Execution modes โดยใช้ REST API
Package versions
โค้ดในหน้านี้ถูกพัฒนาโดยใช้ requirements ต่อไปนี้ เราแนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit[all]~=2.3.0
สามารถรัน Qiskit primitive workloads โดยใช้ REST APIs ใน execution modes สามแบบ ขึ้นอยู่กับความต้องการของคุณ: job, session และ batch หัวข้อนี้อธิบายโหมดเหล่านี้
เอกสารนี้ใช้โมดูล Python requests เพื่อแสดง Qiskit Runtime REST API อย่างไรก็ตาม เวิร์กโฟลว์นี้สามารถรันได้โดยใช้ภาษาหรือ framework ใดก็ตามที่รองรับการทำงานกับ REST APIs ดูรายละเอียดได้ที่เอกสาร API reference
Job mode โดยใช้ REST API
ใน job mode การร้องขอ primitive เดียวของ Estimator หรือ Sampler ทำโดยไม่มี context manager ดูวิธีรัน quantum circuit โดยใช้ Estimator และ Sampler สำหรับตัวอย่างบางส่วน
Session mode โดยใช้ REST API
Session คือฟีเจอร์ของ Qiskit Runtime ที่ให้คุณรัน multi-job iterative workloads บน quantum computers ได้อย่างมีประสิทธิภาพ การใช้ sessions ช่วยหลีกเลี่ยงความล่าช้าที่เกิดจากการจัดคิว job แต่ละตัวแยกกัน ซึ่งมีประโยชน์มากสำหรับงานแบบ iterative ที่ต้องการการสื่อสารบ่อยครั้งระหว่างทรัพยากร classical และ quantum ดูรายละเอียดเพิ่มเติมเกี่ยวกับ Sessions ได้ในเอกสาร
ผู้ใช้ Open Plan ไม่สามารถส่ง session jobs
เริ่ม session
เริ่มต้นด้วยการสร้าง session และรับ session ID
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 เมื่อ job ทั้งหมดเสร็จสมบูรณ์ สิ่งนี้จะช่วยลดเวลารอสำหรับผู้ใช้รายถัดไป
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 job ได้โดยระบุ mode ใน request payload Batch mode ช่วยลดเวลาการประมวลผลได้หากสามารถระบุ job ทั้งหมดได้ตั้งแต่เริ่มต้น เรียนรู้เกี่ยวกับ batch mode ในคู่มือบทนำสู่ execution modes
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']
ตัวอย่าง job ที่ส่งใน session
เมื่อตั้งค่า session แล้ว สามารถส่ง Sampler หรือ Estimator job หนึ่งตัวหรือมากกว่าไปยัง session เดียวกันได้โดยระบุ session ID
<parameter values> ใน PUB สามารถเป็น parameter เดียวหรือรายการของ parameters ก็ได้ และรองรับ numpy broadcasting ด้วย
Estimator jobs ใน 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 ใน 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
- อ่าน Migrate to V2 primitives
- ฝึกกับ primitives โดยทำงานผ่าน Cost function lesson ใน IBM Quantum® Learning
- เรียนรู้วิธี transpile ในเครื่องในส่วน Transpile