Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Porta il codice su Qiskit Serverless

suggerimento

Qiskit Serverless sta ricevendo un aggiornamento e le sue funzionalità stanno cambiando rapidamente. Durante questa fase di sviluppo, puoi trovare le note di rilascio e la documentazione più recente nella pagina GitHub di Qiskit Serverless.

Il seguente esempio mostra come portare il codice esistente per sfruttare Qiskit Serverless.

nota

Il codice seguente presuppone che tu abbia salvato le tue credenziali. Se non l'hai ancora fatto, segui le istruzioni in Configura il tuo account IBM Cloud per autenticarti con la tua chiave API.

Aggiorna l'esperimento​

nota

Nella versione Serverless, crea il servizio runtime con get_runtime_service() (da qiskit_serverless) invece di QiskitRuntimeService(), in modo che i job e le sessioni di IBM Quantum® Compute Service che avvia vengano tracciati rispetto al job Qiskit Serverless principale. Consulta Scrivi il tuo primo programma Qiskit Serverless per i dettagli.

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
optimization_level = 3

service = QiskitRuntimeService(channel="ibm_quantum_platform")
backend = service.get_backend(backend_name)

pass_manager = generate_preset_pass_manager(
optimization_level=optimization_level, backend=backend
)

# @distribute_task(target={"cpu": 1})
def transpile_parallel(circuit, pass_manager):
"""Distributed transpilation for an abstract circuit into an ISA circuit for a given backend."""

isa_circuit = pass_manager.run(circuit)

return isa_circuit

transpiled_circuits = [
transpile_parallel(circuit, pass_manager)
for circuit in circuits
]

print(transpiled_circuits)

Upload to Qiskit Serverless​

Follow the instructions on the Introduction to Qiskit Functions page to authenticate with your API key.

from qiskit_ibm_catalog import QiskitServerless, QiskitFunction

# Authenticate to the remote cluster and submit the pattern for remote execution.
serverless = QiskitServerless()

transpile_remote_demo = QiskitFunction(
title="transpile_remote_serverless",
entrypoint="transpile_remote.py",
working_dir="./source_files/",
)

serverless.upload(transpile_remote_demo)

Output

'transpile_remote_serverless'

Esecuzione remota in Qiskit Serverless​

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# Setup inputs
qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
backend = "ibm_brisbane"
optimization_level = 3

# Running program
transpile_remote_serverless = serverless.load('transpile_remote_serverless')
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend,
optimization_level=optimization_level
)

job.job_id

Output

'727e921d-512d-4b7d-af97-fe29e93ce7ea'

Passi successivi​

Raccomandazioni