Lumaktaw sa pangunahing nilalaman

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)

Output ng nakaraang code cell

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 Serverless
  • INITIALIZING: Nagsisimula na ang remote na programa; kasama dito ang pag-set up ng remote na environment at pag-install ng mga dependency
  • RUNNING: Tumatakbo na ang programa. Sa yugtong ito, kung mayroon kang mga print() na output sa iyong programa, maaari kang makuha ng mga logs gamit ang job.logs()
  • DONE: Tapos na ang programa, at maaari kang makuha ng data na naka-store sa save_result() gamit ang job.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
tip

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​

Mga Rekomendasyon