Mga execution mode gamit ang REST API
Maaari mong patakbuhin ang iyong mga Qiskit primitive workload gamit ang mga REST API sa isa sa tatlong execution mode, depende sa iyong pangangailangan: job, session, at batch. Ipapaliwanag ng topic na ito ang mga mode na ito.
Ginagamit ng dokumentasyong ito ang Python requests module para ipakita ang Qiskit Runtime REST API. Gayunpaman, maaaring isagawa ang workflow na ito gamit ang anumang wika o framework na sumusuporta sa pagtatrabaho sa mga REST API. Tingnan ang API reference documentation para sa mga detalye.
Job mode gamit ang REST API​
Sa job mode, isang primitive request ng Estimator o ng Sampler ang ginagawa nang walang context manager. Tingnan kung paano magpatakbo ng quantum circuit gamit ang Estimator at Sampler para sa ilang halimbawa.
Session mode gamit ang REST API​
Ang session ay isang feature ng Qiskit Runtime na nagpapahintulot sa iyo na mahusay na magpatakbo ng mga multi-job iterative workload sa mga quantum computer. Nakakatulong ang paggamit ng mga session para maiwasan ang mga pagkaantala dahil sa pag-queue ng bawat job nang hiwalay, na maaaring maging kapaki-pakinabang para sa mga iterative na gawain na nangangailangan ng madalas na komunikasyon sa pagitan ng mga classical at quantum na mapagkukunan. Makikita ang karagdagang detalye tungkol sa mga Session sa dokumentasyon.
Ang mga gumagamit ng Open Plan ay hindi makakapag-submit ng mga session job.
Magsimula ng session​
Magsimula sa pamamagitan ng paglikha ng session at pagkuha ng 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'}
Isara ang session​
Magandang gawi na isara ang Session kapag tapos na ang lahat ng job. Makakatulong ito na mabawasan ang oras ng paghihintay para sa mga susunod na gumagamit.
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 gamit ang REST API​
Bilang alternatibo, maaari kang mag-submit ng batch job sa pamamagitan ng pagtukoy ng mode sa request payload. Makakatulong ang batch mode na mapaikli ang oras ng pagproseso kung lahat ng job ay maaaring ibigay sa simula pa lang. Matuto tungkol sa batch mode sa gabay na panimula sa mga execution 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']
Mga halimbawa ng mga job na na-submit sa isang session​
Kapag na-set up na ang isang session, isa o higit pang Sampler o Estimator job ang maaaring i-submit sa parehong session sa pamamagitan ng pagtukoy ng session ID.
Ang <parameter values> sa isang PUB ay maaaring isang solong parameter o isang listahan ng mga parameter. Sinusuportahan din nito ang numpy broadcasting.
Mga Estimator job sa 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)
},
}
}
Mga Sampler job sa 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)
},
}
}
Mga susunod na hakbang​
- Suriin ang mga detalyadong halimbawa ng Sampler at Estimator primitives gamit ang REST API.
- Basahin ang Mag-migrate sa V2 primitives.
- Mag-practis sa mga primitive sa pamamagitan ng pagtatapos ng aralin sa Cost function sa IBM Quantum® Learning.
- Alamin kung paano mag-transpile nang lokal sa seksyon ng Transpile.