מצבי הרצה באמצעות REST API
Package versions
הקוד בעמוד זה פותח באמצעות הדרישות הבאות. אנחנו ממליצים להשתמש בגרסאות אלה או חדשות יותר.
qiskit[all]~=2.3.0
תוכלו להריץ את עומסי העבודה של ה-primitives של IBM Quantum באמצעות REST APIs באחד משלושה מצבי הרצה, בהתאם לצרכים שלכם: job, session ו-batch. נושא זה מסביר מצבים אלה.
תיעוד זה משתמש במודול requests של Python כדי להדגים את IBM Quantum Compute Service REST API. עם זאת, ניתן לבצע תהליך עבודה זה בכל שפה או מסגרת התומכת בעבודה עם REST APIs. עיין בתיעוד הפניית API לפרטים.
Job mode עם REST API
ב-job mode, מתבצעת בקשה בודדת של Estimator או Sampler ללא מנהל הקשר. ראה כיצד להריץ Circuit קוונטי באמצעות Estimator ו-Sampler לדוגמאות.
Session mode עם REST API
session הוא תכונה המאפשרת להריץ בצורה יעילה עומסי עבודה איטרטיביים הכוללים משימות (jobs) מרובות במחשבים קוונטיים. שימוש ב-sessions מסייע למנוע עיכובים הנגרמים מהמתנה בתור לכל משימה בנפרד, דבר שיכול להיות שימושי במיוחד למשימות איטרטיביות הדורשות תקשורת תכופה בין משאבים קלאסיים לקוונטיים. פרטים נוספים על Sessions ניתן למצוא בתיעוד.
משתמשי Open Plan אינם יכולים לשלוח משימות session.
פתיחת session
התחילו ביצירת session וקבלת מזהה session.
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
מומלץ לסגור 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
לחלופין, ניתן לשלוח משימת batch על ידי ציון ה-mode ב-payload של הבקשה. 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']
דוגמאות למשימות שנשלחו ב-session
לאחר הגדרת session, ניתן לשלוח משימת Sampler או Estimator אחת או יותר לאותו session על ידי ציון מזהה ה-session.
ה-<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 primitives באמצעות REST API.
- ראה בדוגמאות מפורטות של Estimator primitives באמצעות REST API.
- תרגל עם primitives דרך שיעור פונקציית העלות ב-IBM Quantum® Learning.
- למד כיצד לבצע Transpile מקומי בחלק Transpile.