انتقل إلى المحتوى الرئيسي

شغّل أول حمل عمل لك على 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 للاطلاع على التعليمات).

عرض البرامج المتاحة

يمكنك استخدام 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>]

الخطوات التالية

توصيات