Rulează primul tău workload Qiskit Serverless de la distanță
Versiuni de pachete
Codul din această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm să folosești aceste versiuni sau unele mai noi.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Qiskit Serverless primește o actualizare și funcțiile sale se schimbă rapid. În această fază de dezvoltare, găsești notele de lansare și cea mai recentă documentație pe pagina Qiskit Serverless GitHub.
Această secțiune explorează cum să folosești qiskit-ibm-catalog pentru a lista programele disponibile în Qiskit Serverless, a transmite intrări acestor programe, a le rula de la distanță, a le verifica statusul și a recupera rezultatele și jurnalele.
Asigură-te că ai urmat fluxul de lucru din Scrie primul tău program Qiskit Serverless înainte de a începe.
Listează programele disponibile
Poți folosi QiskitServerless.list() pentru a obține o listă a programelor disponibile pe care le poți rula cu Qiskit Serverless. Aceasta include transpile_remote_serverless încărcat anterior.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)
Rulează un program încărcat și transmite intrări
Mai întâi, configurează intrările. Programul tău are trei intrări: circuits, backend și optimization_level. Poți folosi random_circuit pentru a crea 30 de circuite aleatorii:
from qiskit.circuit.random import random_circuit
qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)
Apoi, folosește QiskitRuntimeService și least_busy pentru a selecta un backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)
Setează nivelul de optimizare:
optimization_level = 3
Selectează programul cu serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
Apoi, transmite intrările și rulează-l într-un mod pythonic, astfel:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Verifică statusul job-ului
Cu job_id-ul tău Qiskit Serverless, poți verifica statusul job-urilor în curs de rulare. Acesta include următoarele statusuri:
QUEUED: Programul de la distanță se află în coada Qiskit Serverless. Prioritatea din coadă se bazează în prezent pe cât de mult ai folosit Qiskit ServerlessINITIALIZING: Programul de la distanță pornește; aceasta include configurarea mediului de la distanță și instalarea dependențelorRUNNING: Programul rulează. În această etapă, dacă ai ieșiriprint()în programul tău, poți recupera jurnalele folosindjob.logs()DONE: Programul este complet și poți recupera datele stocate însave_result()cujob.results()
Poți seta și statusuri mai detaliate ale job-urilor în Gestionează resursele de calcul și date Qiskit Serverless.
job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
În prezent, tabelul de workload-uri IBM Quantum reflectă doar workload-urile Qiskit Runtime. Folosește job.status() pentru a vedea statusul curent al workload-ului tău Qiskit Serverless.
Ai rulat cu succes primul tău program Qiskit Serverless!
Recuperează jurnalele și rezultatele
După cum s-a menționat anterior, odată ce un program este RUNNING, poți folosi job.logs() pentru a obține jurnalele create din ieșirile print():
logs = job.logs()
print(logs)
No logs yet.
În orice moment, poți și anula un job:
job.stop()
'Job has been stopped.'
Odată ce un program este DONE, poți folosi job.results() pentru a obține rezultatul stocat în save_result():
# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}
Listează job-urile rulate anterior cu Qiskit Serverless
Poți folosi jobs() pentru a lista toate job-urile trimise către Qiskit Serverless:
old_jobs = serverless.jobs()
old_jobs
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]
Pași următori
- Explorează instrumentele de gestionare a calculului și datelor disponibile pentru programul tău, inclusiv paralelizarea.