ข้ามไปยังเนื้อหาหลัก
โครงการนี้อยู่ในช่วงเบต้า พบข้อผิดพลาด? สร้าง GitHub Issue มีคำถามหรือไอเดีย? ถามใน Discussions — ยินดีรับฟังความคิดเห็น!
คุณภาพการแปลในหน้านี้เป็นอย่างไร?

Execution modes โดยใช้ REST API

Package versions

โค้ดในหน้านี้พัฒนาโดยใช้ข้อกำหนดต่อไปนี้ เราแนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า

qiskit[all]~=2.3.0

คุณสามารถรัน IBM Quantum primitive workload โดยใช้ REST API ใน execution mode แบบใดแบบหนึ่งจากสามแบบ ขึ้นอยู่กับความต้องการของคุณ ได้แก่ job, session และ batch หัวข้อนี้อธิบายโหมดเหล่านี้

หมายเหตุ

เอกสารนี้ใช้โมดูล Python requests เพื่อแสดง IBM Quantum Compute Service 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 คือฟีเจอร์ที่ให้คุณรัน 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​

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)
},
}

}

Sampler jobs in session mode​

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)
},
}

}

ขั้นตอนถัดไป​

คำแนะนำ
  • ดูตัวอย่าง Sampler primitives โดยละเอียดโดยใช้ REST API
  • ดูตัวอย่าง Estimator primitives โดยละเอียดโดยใช้ REST API
  • ฝึกใช้ primitives ผ่านบทเรียน Cost function lesson ใน IBM Quantum® Learning
  • เรียนรู้วิธี transpile ในเครื่องในส่วน Transpile