Mod pelaksanaan menggunakan REST API
Package versions
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
Anda boleh menjalankan beban kerja primitif IBM Quantum 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 mendemonstrasikan IBM Quantum Compute Service REST API. 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 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.
<parameter values> dalam PUB boleh sama ada satu parameter atau senarai parameter. Ia juga menyokong penyiaran numpy.
Job Estimator dalam mod session
- 1 litar, 4 observable
- 1 circuit, 4 observables, 2 parameter sets
- 2 litar, 2 observable
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 in session mode
- 1 circuit, no parameters
- 1 litar, 3 set parameter
- 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)
},
}
}
Langkah seterusnya
- Semak contoh primitif Sampler yang terperinci menggunakan REST API.
- Semak contoh primitif Estimator yang terperinci menggunakan REST API.
- Berlatih dengan primitif melalui pelajaran Fungsi kos dalam IBM Quantum® Learning.
- Ketahui cara melakukan transpilasi secara tempatan dalam bahagian Transpile.