Mode eksekusi menggunakan REST API
Package versions
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan penggunaan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
Kamu bisa menjalankan workload primitif IBM Quantum menggunakan REST API dalam salah satu dari tiga mode eksekusi, tergantung kebutuhanmu: job, session, dan batch. Topik ini menjelaskan mode-mode tersebut.
Dokumentasi ini menggunakan modul Python requests untuk mendemonstrasikan REST API IBM Quantum Compute Service. Namun, alur kerja ini bisa dijalankan menggunakan bahasa atau framework apa pun yang mendukung REST API. Lihat dokumentasi referensi API untuk detailnya.
Job mode dengan REST API
Dalam job mode, satu permintaan primitif Estimator atau Sampler dibuat tanpa context manager. Lihat cara menjalankan Circuit kuantum menggunakan Estimator dan Sampler untuk beberapa contoh.
Session mode dengan REST API
Session adalah fitur yang memungkinkan kamu menjalankan workload iteratif multi-job secara efisien di komputer kuantum. Menggunakan session membantu menghindari penundaan yang disebabkan oleh antrian setiap job secara terpisah, yang bisa sangat berguna untuk tugas iteratif yang memerlukan komunikasi yang sering antara sumber daya klasik dan kuantum. Detail lebih lanjut tentang Session bisa ditemukan di dokumentasi.
Pengguna Open Plan tidak bisa mengirim job session.
Mulai session
Mulai dengan membuat session dan mendapatkan 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'}
Tutup session
Sebaiknya tutup Session ketika semua job sudah selesai. Ini akan mengurangi waktu tunggu 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
Batch mode dengan REST API
Sebagai alternatif, kamu bisa mengirim job batch dengan menentukan mode dalam payload permintaan. Batch mode bisa membantu mempersingkat waktu pemrosesan jika semua job bisa disediakan di awal. Pelajari batch mode di panduan pengenalan mode eksekusi.
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 dikirim dalam session
Setelah session disiapkan, satu atau lebih job Sampler atau Estimator bisa dikirim ke session yang sama dengan menentukan session ID.
<parameter values> dalam PUB bisa berupa satu parameter atau daftar parameter. Ini juga mendukung numpy broadcasting.
Job Estimator dalam 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 in 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)
},
}
}
Langkah berikutnya
- Tinjau contoh primitif Sampler yang detail menggunakan REST API.
- Tinjau contoh primitif Estimator yang detail menggunakan REST API.
- Berlatihlah menggunakan primitif dengan mengerjakan pelajaran fungsi biaya di IBM Quantum® Learning.
- Pelajari cara melakukan transpilasi secara lokal di bagian Transpile.