Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions — kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

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.

catatan

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.

catatan

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.

catatan

<parameter values> dalam PUB bisa berupa satu parameter atau daftar parameter. Ini juga mendukung numpy broadcasting.

Job Estimator dalam session mode​

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)
},
}

}

Sampler jobs in session mode​

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)
},
}

}

Langkah berikutnya​

Rekomendasi
  • 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.