Langkau ke kandungan utama

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.

nota

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.

nota

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.

nota

<parameter values> dalam PUB boleh sama ada satu parameter atau senarai parameter. Ia juga menyokong penyiaran numpy.

Job Estimator dalam mod session

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 seterusnya

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