أوضاع التنفيذ باستخدام REST API
Package versions
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو إصدارات أحدث.
qiskit[all]~=2.3.0
يمكنك تشغيل أعباء عمل أوليّات IBM Quantum باستخدام REST APIs في أحد ثلاثة أوضاع تنفيذ، حسب احتياجاتك: وضع المهمة (job) ووضع الجلسة (session) ووضع الدُّفعة (batch). يشرح هذا الموضوع هذه الأوضاع.
تستخدم هذه الوثائق وحدة Python المسماة requests لتوضيح IBM Quantum Compute Service REST API. غير أنه يمكن تنفيذ سير العمل هذا بأي لغة أو إطار عمل يدعم التعامل مع REST APIs. راجع توثيق مرجع API لمزيد من التفاصيل.
Job mode مع REST API
في job mode، يُرسَل طلب واحد إلى أوليّة Estimator أو Sampler دون استخدام مدير سياق. اطّلع على أمثلة تشغيل دوائر كمية باستخدام Estimator وSampler.
Session mode مع REST API
الجلسة هي ميزة تتيح لك تشغيل أحمال عمل متعددة المهام وتكرارية على الحواسيب الكمية بكفاءة. يساعد استخدام الجلسات على تجنب التأخيرات الناجمة عن وضع كل مهمة في قائمة الانتظار بشكل منفصل، وهو أمر مفيد بشكل خاص للمهام التكرارية التي تستلزم تواصلاً متكرراً بين الموارد الكلاسيكية والكمية. يمكنك الاطلاع على مزيد من التفاصيل حول الجلسات في التوثيق.
لا يمكن لمستخدمي الخطة المجانية (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
Batch mode مع REST API
بدلاً من ذلك، يمكنك إرسال مهمة دُفعية عن طريق تحديد mode في حمولة الطلب. يُمكن لـ batch mode أن يُقصّر وقت المعالجة إذا كانت جميع المهام متوفرة منذ البداية. تعرّف على batch 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 إما معاملاً واحداً أو قائمة من المعاملات. كما تدعم آلية البثّ (broadcasting) في numpy.
مهام Estimator في session mode
- 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 jobs in session mode
- 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.
- تدرّب على الأوليّات من خلال درس دالة التكلفة في IBM Quantum® Learning.
- تعلّم كيفية التحويل البرمجي محلياً في قسم Transpile.