מצבי הרצה באמצעות REST API
Package versions
The code on this page was developed using the following requirements. We recommend using these versions or newer.
qiskit[all]~=2.3.0
ניתן להריץ את עומסי העבודה של Qiskit primitives באמצעות REST APIs באחד משלושה מצבי הרצה, בהתאם לצרכים שלך: job, session ו-batch. נושא זה מסביר את המצבים האלה.
תיעוד זה משתמש במודול Python requests כדי להדגים את Qiskit Runtime REST API. עם זאת, ניתן לבצע תהליך עבודה זה בכל שפה או מסגרת התומכת בעבודה עם REST APIs. ראה בתיעוד ה-API Reference לפרטים נוספים.
מצב Job עם REST API
במצב job, מתבצעת בקשה בודדת של Estimator או Sampler ללא מנהל הקשר. ראה כיצד להריץ Circuit קוונטי באמצעות Estimator ו-Sampler לדוגמאות.
מצב Session עם REST API
session הוא תכונה של Qiskit Runtime המאפשרת להריץ בצורה יעילה עומסי עבודה איטרטיביים רב-משימתיים במחשבים קוונטיים. שימוש ב-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 עם REST API
לחלופין, ניתן לשלוח משימת batch על ידי ציון ה-mode ב-payload של הבקשה. מצב batch יכול לסייע בקיצור זמן העיבוד אם ניתן לספק את כל המשימות מראש. למד על מצב batch במדריך מבוא למצבי הרצה.
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
- 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 במצב session
- 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.
- קרא את מעבר ל-V2 primitives.
- תרגל עם primitives דרך שיעור פונקציית העלות ב-IBM Quantum® Learning.
- למד כיצד לבצע Transpile מקומי בחלק Transpile.