Patakbuhin ang iyong unang Qiskit Serverless workload nang remote
Mga bersyon ng package
Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na requirements. Inirerekomenda naming gamitin ang mga bersyong ito o mas bago pa.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Tinutuklas ng seksyong ito kung paano gamitin ang qiskit-ibm-catalog para mag-lista ng mga programang available sa Qiskit Serverless, magpasa ng mga input sa mga programang ito, patakbuhin ang mga ito nang remote, suriin ang kanilang status, at kunin ang mga resulta at logs.
Siguruhing naka-authenticate ka na sa Qiskit Serverless gamit ang iyong API key (tingnan ang I-deploy sa IBM Quantum Platform para sa mga instruksyon).
Mag-lista ng mga available na programaβ
Maaari mong gamitin ang QiskitServerless.list() para makuha ang listahan ng mga available na programa na maaaring patakbuhin gamit ang Qiskit Serverless. Kasama dito ang dating na-upload na transpile_remote_serverless.
# 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)
Patakbuhin ang na-upload na programa at magpasa ng mga inputβ
Una, i-set up ang iyong mga input. Ang iyong programa ay may tatlong input: circuits, backend, at optimization_level. Maaari mong gamitin ang random_circuit para lumikha ng 30 random na circuits:
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)
Susunod, gamitin ang QiskitRuntimeService at least_busy para pumili ng backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)
Itakda ang iyong optimization level:
optimization_level = 3
Piliin ang iyong programa gamit ang serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
Susunod, ipasa ang iyong mga input at patakbuhin ito sa paraang pythonic tulad ng sumusunod:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Suriin ang status ng jobβ
Sa pamamagitan ng iyong Qiskit Serverless job_id, maaari mong suriin ang status ng mga tumatakbong jobs. Kasama dito ang mga sumusunod na status:
QUEUED: Ang remote na programa ay nasa Qiskit Serverless queue. Ang priority ng queue ay kasalukuyang batay sa gaano karami ang iyong paggamit ng Qiskit ServerlessINITIALIZING: Nagsisimula na ang remote na programa; kasama dito ang pag-set up ng remote na environment at pag-install ng mga dependencyRUNNING: Tumatakbo na ang programa. Sa yugtong ito, kung mayroon kang mgaprint()na output sa iyong programa, maaari kang makuha ng mga logs gamit angjob.logs()DONE: Tapos na ang programa, at maaari kang makuha ng data na naka-store sasave_result()gamit angjob.results()
Maaari ka ring magtakda ng mas detalyadong mga job status sa Pamahalaan ang Qiskit Serverless compute at data resources.
job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
Sa kasalukuyan, ang IBM Quantum workloads table ay nagpapakita lamang ng mga Qiskit Runtime workload. Gamitin ang job.status() para makita ang kasalukuyang status ng iyong Qiskit Serverless workload.
Matagumpay mong natakbo ang iyong unang Qiskit Serverless program!
Kunin ang mga logs at resultaβ
Tulad ng nabanggit kanina, kapag RUNNING na ang isang programa, maaari mong gamitin ang job.logs() para kunin ang mga logs na nagmula sa mga print() na output:
logs = job.logs()
print(logs)
No logs yet.
Anumang oras, maaari ka ring mag-cancel ng job:
job.stop()
'Job has been stopped.'
Kapag DONE na ang isang programa, maaari mong gamitin ang job.results() para kunin ang resulta na naka-store sa 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>]}
Mag-lista ng mga jobs na dating pinatakbo gamit ang Qiskit Serverlessβ
Maaari mong gamitin ang jobs() para mag-lista ng lahat ng jobs na isinumite sa 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>]
Mga susunod na hakbangβ
- Tuklasin ang mga tool para sa compute at data management na available sa iyong programa, kasama na ang parallelization.