أوضاع التنفيذ باستخدام REST API
إصدارات الحزم
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث منها.
qiskit[all]~=2.3.0
يمكنك تشغيل أحمال عمل Qiskit الأولية باستخدام REST APIs في أحد ثلاثة أوضاع تنفيذ، بحسب احتياجاتك: وضع المهمة (job)، ووضع الجلسة (session)، ووضع الدُّفعة (batch). يشرح هذا الموضوع هذه الأوضاع.
تستخدم هذه الوثائق وحدة Python المسماة requests لتوضيح كيفية التعامل مع Qiskit Runtime REST API. غير أن هذا العمل يمكن تنفيذه بأي لغة أو إطار عمل يدعم REST APIs. راجع توثيق مرجع API لمزيد من التفاصيل.
وضع المهمة مع REST API
في وضع المهمة، يُرسَل طلب أولي واحد من Estimator أو Sampler دون استخدام مدير سياق. اطّلع على أمثلة تشغيل دوائر كمية باستخدام Estimator وSampler.
وضع الجلسة مع REST API
الجلسة هي ميزة في Qiskit Runtime تتيح لك تشغيل أحمال عمل متعددة المهام وتكرارية على الحواسيب الكمية بكفاءة. يساعد استخدام الجلسات على تجنب التأخيرات الناجمة عن وضع كل مهمة في قائمة الانتظار بشكل منفصل، وهو أمر مفيد بشكل خاص للمهام التكرارية التي تستلزم تواصلاً متكرراً بين الموارد الكلاسيكية والكمية. يمكنك الاطلاع على مزيد من التفاصيل حول الجلسات في التوثيق.
لا يمكن لمستخدمي الخطة المجانية (Open Plan) إرسال مهام الجلسة.
بدء جلسة
ابدأ بإنشاء جلسة والحصول على معرّف الجلسة.
import json
import requests
sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
auth_id = "Bearer <YOUR_BEARER_TOKEN>"
backend = "<BACKEND_NAME>"
crn = "<SERVICE-CRN>"
headersList = {
"Accept": "application/json",
"Content-Type": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}
payload = json.dumps({
"backend": backend,
"mode": 'dedicated',
})
response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)
sessionId = response.json()['id']
print(response.json())
Output
{'id': 'crw9s7cdbt40008jxesg'}
إغلاق الجلسة
من الممارسات الجيدة إغلاق Session عند الانتهاء من جميع المهام. سيُقلّل ذلك من وقت الانتظار للمستخدمين التاليين.
closureURL="https://quantum.cloud.ibm.com/api/v1/sessions/"+sessionId+"/close"
headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn
}
closure_response = requests.request(
"DELETE",
closureURL,
headers=headersList
)
print("Session closure response ok?:",closure_response.ok,closure_response.text)
Output
Session closure response ok?: True
وضع الدُّفعة مع REST API
بدلاً من ذلك، يمكنك إرسال مهمة دُفعية عن طريق تحديد mode في حمولة الطلب. يُمكن لوضع الدُّفعة أن يُقصّر وقت المعالجة إذا كانت جميع المهام متوفرة منذ البداية. تعرّف على وضع الدُّفعة في دليل مقدمة أوضاع التنفيذ.
import json
import requests
sessionsUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
headersList = {
"Accept": "application/json",
"Authorization": auth_id,
"Service-CRN": crn,
'Content-Type': 'application/json'
}
payload = json.dumps({
"backend": backend,
"instance": "hub1/group1/project1",
"mode": "batch"
})
response = requests.request("POST", sessionsUrl, data=payload, headers=headersList)
sessionId = response.json()['id']
أمثلة على مهام مُرسَلة داخل جلسة
بمجرد إعداد الجلسة، يمكن إرسال مهمة أو أكثر من مهام Sampler أو Estimator إلى الجلسة نفسها عن طريق تحديد معرّف الجلسة.
يمكن أن تكون <parameter values> في PUB إما معاملاً واحداً أو قائمة من المعاملات. كما تدعم البثّ broadcast الخاص بـ numpy.
مهام Estimator في وضع الجلسة
- 1 circuit, 4 observables
- 1 circuit, 4 observables, 2 parameter sets
- 2 circuits, 2 observables
job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [obs1, obs2, obs3, obs4]]], #primitive unified blocs (PUBs) containing one circuit each.
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [[obs1], [obs2], [obs3], [obs4]], [[vals1], [vals2]]]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
job_input = {
'program_id': 'estimator',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, obs1],[resulting_qasm, obs2]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
مهام Sampler في وضع الجلسة
- 1 circuit, no parameters
- 1 circuit, 3 parameter sets
- 2 circuits, 1 parameter set
job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [vals1, vals2, vals3]]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
job_input = {
'program_id': 'sampler',
"backend": backend,
"session_id": sessionId, # This specifies the previously created Session
"params": {
"pubs": [[resulting_qasm, [val1]],[resulting_qasm,None,100]], #primitive unified blocs (PUBs) containing one circuit each
"options":{
"transpilation":{"optimization_level": 1},
"twirling": {"enable_gates": True,"enable_measure": True},
# "dynamical_decoupling": {"enable": True, "sequence_type": "XpXm"}, #(optional)
},
}
}
الخطوات التالية
- راجع أمثلة مفصّلة على أوليّات Sampler باستخدام REST API.
- راجع أمثلة مفصّلة على أوليّات Estimator باستخدام REST API.
- اقرأ الانتقال إلى الأوليّات V2.
- تدرّب على الأوليّات من خلال درس دالة التكلفة في IBM Quantum® Learning.
- تعلّم كيفية التحويل البرمجي محلياً في قسم Transpile.