Mod pelaksanaan menggunakan REST API
Anda boleh menjalankan beban kerja primitif Qiskit menggunakan REST API dalam salah satu daripada tiga mod pelaksanaan, bergantung pada keperluan anda: job, session, dan batch. Topik ini menerangkan mod-mod tersebut.
Dokumentasi ini menggunakan modul Python requests untuk menunjukkan REST API Qiskit Runtime. Walau bagaimanapun, aliran kerja ini boleh dilaksanakan menggunakan mana-mana bahasa atau rangka kerja yang menyokong kerja dengan REST API. Rujuk dokumentasi rujukan API untuk butiran lanjut.
Mod job dengan REST API​
Dalam mod job, satu permintaan primitif tunggal daripada Estimator atau Sampler dibuat tanpa pengurus konteks. Lihat cara menjalankan litar kuantum menggunakan Estimator dan Sampler untuk beberapa contoh.
Mod session dengan REST API​
Session ialah ciri Qiskit Runtime yang membolehkan anda menjalankan beban kerja berbilang job secara berulang pada komputer kuantum dengan cekap. Menggunakan session membantu mengelakkan kelewatan akibat baris gilir setiap job secara berasingan, yang amat berguna untuk tugas berulang yang memerlukan komunikasi kerap antara sumber klasik dan kuantum. Butiran lanjut tentang Session boleh didapati dalam dokumentasi.
Pengguna Open Plan tidak boleh menghantar job session.
Mulakan session​
Mulakan dengan mencipta session dan mendapatkan ID 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'}
Tutup session​
Adalah amalan yang baik untuk menutup Session apabila semua job selesai. Ini akan mengurangkan masa menunggu bagi pengguna berikutnya.
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
Mod batch dengan REST API​
Sebagai alternatif, anda boleh menghantar job batch dengan menentukan mode dalam muatan permintaan. Mod batch boleh membantu memendekkan masa pemprosesan jika semua job boleh diberikan sekaligus. Ketahui lebih lanjut tentang mod batch dalam panduan pengenalan kepada mod pelaksanaan.
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']
Contoh job yang dihantar dalam session​
Setelah session ditetapkan, satu atau lebih job Sampler atau Estimator boleh dihantar ke session yang sama dengan menentukan ID session.
<nilai parameter> dalam sesebuah PUB boleh berupa parameter tunggal atau senarai parameter. Ia juga menyokong penyiaran numpy.
Job Estimator dalam mod session​
- 1 litar, 4 pemerhatian
- 1 litar, 4 pemerhatian, 2 set parameter
- 2 litar, 2 pemerhatian
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)
},
}
}
Job Sampler dalam mod session​
- 1 litar, tiada parameter
- 1 litar, 3 set parameter
- 2 litar, 1 set parameter
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)
},
}
}
Langkah seterusnya​
- Semak contoh primitif Sampler dan Estimator yang terperinci menggunakan REST API.
- Baca Berhijrah ke primitif V2.
- Berlatih dengan primitif melalui pelajaran Fungsi kos dalam IBM Quantum® Learning.
- Ketahui cara melakukan transpilasi secara tempatan dalam bahagian Transpile.