Jalankan workload Qiskit Serverless pertamamu dari jarak jauh
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami menyarankan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Qiskit Serverless sedang mendapatkan pembaruan, dan fitur-fiturnya berubah dengan cepat. Selama fase pengembangan ini, temukan catatan rilis dan dokumentasi terbaru di halaman Qiskit Serverless GitHub.
Bagian ini membahas cara menggunakan qiskit-ibm-catalog untuk melihat daftar program yang tersedia di Qiskit Serverless, meneruskan input ke program-program tersebut, menjalankannya dari jarak jauh, memeriksa statusnya, dan mengambil hasil serta log.
Pastikan kamu sudah mengikuti alur kerja di Tulis program Qiskit Serverless pertamamu sebelum kamu mulai.
Daftar program yang tersedia
Kamu bisa menggunakan QiskitServerless.list() untuk mengambil daftar program yang tersedia untuk dijalankan dengan Qiskit Serverless. Ini termasuk transpile_remote_serverless yang sebelumnya sudah diunggah.
# 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 sudah diunggah dan teruskan input
Pertama, siapkan inputmu. Programmu memiliki tiga input: circuits, backend, dan optimization_level. Kamu bisa menggunakan random_circuit untuk membuat 30 Circuit acak:
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)
Selanjutnya, 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)
Atur level optimisasimu:
optimization_level = 3
Pilih programmu dengan serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
Selanjutnya, teruskan inputmu dan jalankan secara 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'
Periksa status job
Dengan job_id Qiskit Serverless milikmu, kamu bisa memeriksa status job yang sedang berjalan. Ini mencakup status-status berikut:
QUEUED: Program jarak jauh sedang berada dalam antrean Qiskit Serverless. Prioritas antrean saat ini didasarkan pada seberapa banyak kamu telah menggunakan Qiskit ServerlessINITIALIZING: Program jarak jauh sedang dimulai; ini termasuk menyiapkan lingkungan jarak jauh dan menginstal dependensiRUNNING: Program sedang berjalan. Pada tahap ini, jika kamu memiliki outputprint()dalam programmu, kamu bisa mengambil log menggunakanjob.logs()DONE: Program sudah selesai, dan kamu bisa mengambil data yang tersimpan disave_result()denganjob.results()
Kamu juga bisa mengatur status job yang lebih detail di Kelola sumber daya komputasi 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
Saat ini, tabel workload IBM Quantum hanya menampilkan workload Qiskit Runtime. Gunakan job.status() untuk melihat status terkini workload Qiskit Serverless-mu.
Kamu telah berhasil menjalankan program Qiskit Serverless pertamamu!
Ambil log dan hasil
Seperti yang disebutkan sebelumnya, setelah program berada dalam status RUNNING, kamu bisa menggunakan job.logs() untuk mengambil log yang dibuat dari output print():
logs = job.logs()
print(logs)
No logs yet.
Kapan saja, kamu juga bisa membatalkan job:
job.stop()
'Job has been stopped.'
Setelah program berada dalam status DONE, kamu bisa menggunakan job.results() untuk mengambil hasil yang tersimpan di 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>]}
Daftar job yang sebelumnya dijalankan dengan Qiskit Serverless
Kamu bisa menggunakan jobs() untuk melihat daftar semua job yang dikirimkan 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 selanjutnya
- Jelajahi alat manajemen komputasi dan data yang tersedia untuk programmu, termasuk paralelisasi.