הרץ את עומס העבודה הראשון שלך ב-Qiskit Serverless מרחוק
Package versions
הקוד בדף זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Qiskit Serverless is getting an upgrade, and its features are changing fast. During this development phase, find release notes and the most recent documentation at the Qiskit Serverless GitHub page.
סעיף זה בוחן כיצד להשתמש ב-qiskit-ibm-catalog כדי לרשום תוכניות זמינות ב-Qiskit Serverless, להעביר קלטים לתוכניות אלו, להריץ אותן מרחוק, לבדוק את הסטטוס שלהן ולאחזר תוצאות ולוגים.
ודא שעקבת אחרי זרימת העבודה בכתוב את תוכנית Qiskit Serverless הראשונה שלך לפני שתתחיל.
רשימת תוכניות זמינות
תוכל להשתמש ב-QiskitServerless.list() כדי לאחזר רשימה של התוכניות הזמינות להרצה עם Qiskit Serverless. זה כולל את 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)
הרצת תוכנית שהועלתה והעברת קלטים
ראשית, הגדר את הקלטים שלך. לתוכנית שלך יש שלושה קלטים: circuits, backend ו-optimization_level. תוכל להשתמש ב-random_circuit כדי ליצור 30 מעגלים אקראיים:
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)
לאחר מכן, השתמש ב-QiskitRuntimeService וב-least_busy כדי לבחור backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)
הגדר את רמת האופטימיזציה שלך:
optimization_level = 3
בחר את התוכנית שלך עם serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
לאחר מכן, העבר את הקלטים שלך והרץ אותם באופן פייתוני כדלקמן:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
בדיקת סטטוס עבודה
עם job_id של Qiskit Serverless שלך, תוכל לבדוק את הסטטוס של עבודות רצות. זה כולל את הסטטוסים הבאים:
QUEUED: התוכנית המרוחקת נמצאת בתור Qiskit Serverless. עדיפות התור מבוססת כרגע על כמה השתמשת ב-Qiskit ServerlessINITIALIZING: התוכנית המרוחקת מתחילה; זה כולל הגדרת הסביבה המרוחקת והתקנת תלויותRUNNING: התוכנית רצה. בשלב זה, אם יש לך פלטיprint()בתוכנית שלך, תוכל לאחזר לוגים באמצעותjob.logs()DONE: התוכנית הושלמה, ותוכל לאחזר נתונים המאוחסנים ב-save_result()עםjob.results()
תוכל גם להגדיר סטטוסי עבודה מפורטים יותר בניהול משאבי מחשוב ונתונים ב-Qiskit Serverless.
job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
כרגע, טבלת עומסי העבודה של IBM Quantum משקפת רק עומסי עבודה של Qiskit Runtime. השתמש ב-job.status() כדי לראות את הסטטוס הנוכחי של עומס העבודה של Qiskit Serverless שלך.
הרצת בהצלחה את תוכנית Qiskit Serverless הראשונה שלך!
אחזור לוגים ותוצאות
כפי שהוזכר קודם, ברגע שתוכנית נמצאת במצב RUNNING, תוכל להשתמש ב-job.logs() כדי לאחזר לוגים שנוצרו מפלטי print():
logs = job.logs()
print(logs)
No logs yet.
בכל עת, תוכל גם לבטל עבודה:
job.stop()
'Job has been stopped.'
ברגע שתוכנית נמצאת במצב DONE, תוכל להשתמש ב-job.results() כדי לאחזר את התוצאה המאוחסנת ב-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>]}
רשימת עבודות שהורצו בעבר עם Qiskit Serverless
תוכל להשתמש ב-jobs() כדי לרשום את כל העבודות שהוגשו ל-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>]
צעדים הבאים
- חקור כלי ניהול מחשוב ונתונים הזמינים לתוכנית שלך, כולל הקבלה.