Jalankan beban kerja Qiskit Serverless pertama anda dari jauh
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Bahagian ini meneroka cara menggunakan qiskit-ibm-catalog untuk menyenaraikan program yang tersedia dalam Qiskit Serverless, menghantar input ke program ini, menjalankannya dari jauh, menyemak status, dan mendapatkan semula keputusan dan log.
Pastikan anda telah mengesahkan ke Qiskit Serverless menggunakan kunci API anda (lihat Sebarkan ke IBM Quantum Platform untuk arahan).
Senaraikan program yang tersediaβ
Anda boleh menggunakan QiskitServerless.list() untuk mendapatkan senarai program yang tersedia untuk dijalankan dengan Qiskit Serverless. Ini termasuk transpile_remote_serverless yang dimuat naik sebelumnya.
# 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)
Jalankan program yang dimuat naik dan hantar inputβ
Pertama, sediakan input anda. Program anda mempunyai tiga input: circuits, backend, dan optimization_level. Anda boleh menggunakan random_circuit untuk mencipta 30 Circuit rawak:
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)
Seterusnya, gunakan QiskitRuntimeService dan least_busy untuk memilih backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)
Tetapkan tahap pengoptimuman anda:
optimization_level = 3
Pilih program anda dengan serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
Seterusnya, hantar input anda dan jalankannya dalam gaya Pythonic seperti berikut:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Semak status kerjaβ
Dengan job_id Qiskit Serverless anda, anda boleh menyemak status kerja yang sedang berjalan. Ini termasuk status berikut:
QUEUED: Program jauh berada dalam barisan Qiskit Serverless. Keutamaan barisan pada masa ini berdasarkan sejauh mana anda telah menggunakan Qiskit ServerlessINITIALIZING: Program jauh sedang dimulakan; ini termasuk menyediakan persekitaran jauh dan memasang kebergantunganRUNNING: Program sedang berjalan. Pada peringkat ini, jika anda mempunyai outputprint()dalam program anda, anda boleh mendapatkan semula log menggunakanjob.logs()DONE: Program selesai, dan anda boleh mendapatkan semula data yang disimpan dalamsave_result()denganjob.results()
Anda juga boleh menetapkan status kerja yang lebih terperinci dalam Urus sumber pengkomputeran dan data Qiskit Serverless.
job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
Pada masa ini, jadual beban kerja IBM Quantum hanya mencerminkan beban kerja Qiskit Runtime. Gunakan job.status() untuk melihat status semasa beban kerja Qiskit Serverless anda.
Anda telah berjaya menjalankan program Qiskit Serverless pertama anda!
Dapatkan semula log dan keputusanβ
Seperti yang disebutkan sebelumnya, sebaik sahaja program berada dalam status RUNNING, anda boleh menggunakan job.logs() untuk mendapatkan log yang dibuat daripada output print():
logs = job.logs()
print(logs)
No logs yet.
Pada bila-bila masa, anda juga boleh membatalkan kerja:
job.stop()
'Job has been stopped.'
Setelah program berada dalam status DONE, anda boleh menggunakan job.results() untuk mendapatkan keputusan yang disimpan dalam 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>]}
Senaraikan kerja yang pernah dijalankan dengan Qiskit Serverlessβ
Anda boleh menggunakan jobs() untuk menyenaraikan semua kerja yang dihantar ke 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>]
Langkah seterusnyaβ
- Terokai alat pengurusan pengkomputeran dan data yang tersedia untuk program anda, termasuk selarian.