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
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ă te-ai autentificat la Qiskit Serverless folosind cheia ta API (vezi Implementează pe IBM Quantum Platform pentru instrucțiuni).
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.