דלג לתוכן הראשי

הרץ את עומס העבודה הראשון שלך ב-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)

Output of the previous code cell

לאחר מכן, השתמש ב-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 משקפת רק עומסי עבודה של 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>]

צעדים הבאים

המלצות