Mode eksekusi menggunakan REST API
Kamu bisa menjalankan workload Qiskit primitive 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 Qiskit Runtime. Namun, alur kerja ini bisa dijalankan menggunakan bahasa atau framework apa pun yang mendukung REST API. Lihat dokumentasi referensi API untuk detailnya.
Mode job dengan REST API​
Dalam mode job, satu permintaan primitive dari Estimator atau Sampler dibuat tanpa context manager. Lihat cara menjalankan Circuit kuantum menggunakan Estimator dan Sampler untuk beberapa contoh.
Mode session dengan REST API​
Session adalah fitur Qiskit Runtime 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 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
Mode batch dengan REST API​
Sebagai alternatif, kamu bisa mengirim job batch dengan menentukan mode dalam payload permintaan. Mode batch bisa membantu mempersingkat waktu pemrosesan jika semua job bisa disediakan di awal. Pelajari mode batch 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.
<nilai parameter> dalam sebuah PUB bisa berupa parameter tunggal atau daftar parameter. Ini juga mendukung broadcasting numpy.
Job Estimator dalam mode session​
- 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)
},
}
}
Job Sampler dalam mode session​
- 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 dan Estimator yang detail menggunakan REST API.
- Baca Migrasi ke V2 primitives.
- Praktikkan primitives dengan mengerjakan pelajaran fungsi biaya di IBM Quantum® Learning.
- Pelajari cara melakukan transpilasi secara lokal di bagian Transpile.