IBM Cloud Docs
Esegui un lavoro

Esegui un lavoro

Questa esercitazione illustra la procedura per utilizzare un programma per eseguire un lavoro su IBM Quantum e restituire lo stato del lavoro.

La nuova interfaccia della piattaforma IBM Quantum è stata rilasciata in modalità di accesso anticipato. Si consiglia di iniziare a utilizzare tale interfaccia per lavorare con i servizi Quantum di IBM. Poiché è basato su IBM Cloud, la migrazione è semplice. Vedi la guida alla migrazione per i dettagli.

Prima di iniziare

È necessario un circuito da inviare al programma. Per imparare a creare circuiti utilizzando Qiskit, consultate la guida Map problem to quantum circuits and operators.

Eseguire il lavoro

Utilizzerai ilQiskit RuntimeQiskitRuntimeService Metodo .run(), che accetta i seguenti parametri:

  • program_id: ID del programma da eseguire.
  • input: parametri di input del programma. Questi valori di immissione vengono passati al programma di runtime e dipendono dai parametri definiti per il programma.
  • options: opzioni di runtime. Queste opzioni controllano l'ambiente di esecuzione. Attualmente, l'unica opzione disponibile è backend_name, che è facoltativo.
  • result_decoder: classe facoltativa utilizzata per decodificare il risultato del lavoro.

Nel seguente esempio, inviamo un circuito al programma Sampler:

from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit import QuantumCircuit

service = QiskitRuntimeService()

bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()

# Execute the Bell circuit
backend = service.backend("ibmq_qasm_simulator")
sampler = Sampler(backend=backend)
job = sampler.run([(bell,)])
result = job.result()

pub_result = result[0]
# Get counts from the classical register "meas".
print(f" >> Counts for the meas output register: {pub_result.data.meas.get_counts()}")

In alternativa, puoi utilizzare Run a job API; facoltativamente, utilizza Swagger. È necessario specificare l'ID programma e il backend su cui eseguire e, facoltativamente, è possibile fornire parametri. Prendere nota dell'ID lavoro restituito. Queste informazioni sono necessarie per controllare lo stato e visualizzare i risultati.

Per garantire la correttezza, esiste un tempo di esecuzione massimo per ogni lavoro Qiskit Runtime. Se un lavoro supera questo limite di tempo, viene terminato in modo forzato. Il tempo di esecuzione massimo è il minore tra 1) il limite QPU e 2) il max_execution_time definito dal programma. Il limite del tempo di esecuzione è di tre ore per i lavori del simulatore e di otto ore per i lavori in esecuzione su una QPU fisica.

L'esempio precedente inoltra un lavoro semplice, ma è possibile inoltrare più lavori come batch oppure è possibile utilizzare le sessioni per inoltrare più lavori iterativi. Per informazioni, fare riferimento alla documentazione Modalità di esecuzione.

(Facoltativo) Restituire lo stato del lavoro

Seguire il metodo Qiskit Runtime QiskitRuntimeService.run() eseguendo un metodo RuntimeJobV2. Il metodo run() restituisce un'istanza RuntimeJob, che rappresenta l'istanza di esecuzione asincrona del programma. La classe RuntimeJobV2 eredita da BasePrimitiveJob. Il metodo status() di questa classe restituisce una stringa invece di un'enumerazione JobStatus precedentemente restituita. Per i dettagli, vedi il Riferimento APIRuntimeJobV2.

Esistono diversi metodi RuntimeJob, incluso job.status():

# check the job status
print(f"Job {job.job_id()} status: {job.status()}")

In alternativa, esegui l'API List job details, manualmente o utilizzando Swagger per controllare lo stato del lavoro.

Passi successivi