הרץ את עומס העבודה הראשון שלך ב-Qiskit Serverless מרחוק
Package versions
הקוד בדף זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Qiskit Serverless עובר שדרוג, והתכונות שלו משתנות במהירות. בשלב הפיתוח הזה, ניתן למצוא הערות שחרור ואת התיעוד העדכני ביותר בעמוד Qiskit Serverless GitHub.
סעיף זה בוחן כיצד להשתמש ב-qiskit-ibm-catalog כדי לרשום תוכניות זמינות ב-Qiskit Serverless, להעביר קלטים לתוכניות אלו, להריץ אותן מרחוק, לבדוק את הסטטוס שלהן ולאחזר תוצאות ולוגים.
ודא שעקבת אחרי זרימת העבודה בכתוב את תוכנית Qiskit Serverless הראשונה שלך לפני שתתחיל.
רשימת תוכניות זמינות
תוכל להשתמש ב-QiskitServerless.list() כדי לאחזר רשימה של התוכניות הזמינות להרצה עם Qiskit Serverless. זה כולל את transpile_remote_serverless שהועלה בעבר.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit", "qiskit_ibm_catalog": "qiskit-ibm-catalog", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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 Serverless -
INITIALIZING: התוכנית המרוחקת מתחילה; זה כולל הגדרת הסביבה המרוחקת והתקנת תלויות -
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 משקפת רק עומסי עבודה של IBM Quantum Compute Service. השתמש ב-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>]
צעדים הבאים
- חקור כלי ניהול חישוב ונתונים הזמינים לתוכנית שלך, כולל הרצה מקבילית.