Sari la conținutul principal

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
sfat

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)

Rezultatul celulei de cod anterioare

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 Serverless
  • INITIALIZING: Programul de la distanță pornește; aceasta include configurarea mediului de la distanță și instalarea dependențelor
  • RUNNING: Programul rulează. În această etapă, dacă ai ieșiri print() în programul tău, poți recupera jurnalele folosind job.logs()
  • DONE: Programul este complet și poți recupera datele stocate în save_result() cu job.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
sfat

Î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

Recomandări