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

הרץ את עומס העבודה הראשון שלך ב-Qiskit Serverless מרחוק

גרסאות חבילות

הקוד בדף זה פותח באמצעות הדרישות הבאות. אנו ממליצים להשתמש בגרסאות אלו או בגרסאות חדשות יותר.

qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4

סעיף זה בוחן כיצד להשתמש ב-qiskit-ibm-catalog כדי לרשום תוכניות זמינות ב-Qiskit Serverless, להעביר קלטים לתוכניות אלו, להריץ אותן מרחוק, לבדוק את הסטטוס שלהן ולאחזר תוצאות ולוגים.

ודא שאמת את עצמך ל-Qiskit Serverless באמצעות מפתח ה-API שלך (ראה פריסה ל-IBM Quantum Platform להוראות).

רשימת תוכניות זמינות

תוכל להשתמש ב-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>]

צעדים הבאים

המלצות