Перейти до основного вмісту

Режими виконання через REST API

Ти можеш запускати свої примітивні навантаження Qiskit через REST API в одному з трьох режимів виконання, залежно від потреб: job, session та batch. Ця тема пояснює ці режими.

примітка

У цій документації використовується модуль Python requests для демонстрації REST API Qiskit Runtime. Однак цей процес можна виконати за допомогою будь-якої мови або фреймворку, що підтримує роботу з REST API. Дивись довідкову документацію API для отримання деталей.

Режим job через REST API

У режимі job виконується один примітивний запит до Estimator або Sampler без контекстного менеджера. Дивись, як запустити квантову схему за допомогою Estimator і Sampler для прикладів.

Режим session через REST API

Session — це функція Qiskit Runtime, яка дозволяє ефективно виконувати ітеративні навантаження з кількох завдань на квантових комп'ютерах. Використання сесій допомагає уникнути затримок через окрему постановку кожного завдання в чергу, що особливо корисно для ітеративних завдань, які вимагають частої комунікації між класичними та квантовими ресурсами. Більше деталей про Session можна знайти в документації.

примітка

Користувачі плану Open не можуть надсилати завдання через 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())

Вивід

{'id': 'crw9s7cdbt40008jxesg'}

Закриття сесії

Гарна практика — закривати Session, коли всі завдання виконано. Це скоротить час очікування для наступних користувачів.

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)

Вивід

Session closure response ok?: True

Режим batch через REST API

Альтернативно, ти можеш надіслати пакетне завдання, вказавши mode у тілі запиту. Режим batch може допомогти скоротити час обробки, якщо всі завдання можна надати одразу. Дізнайся про режим batch у посібнику вступ до режимів виконання.

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']

Приклади завдань, надісланих у сесії

Після налаштування сесії одне або кілька завдань Sampler чи Estimator можна надіслати в ту саму сесію, вказавши її ID.

примітка

<parameter values> у PUB може бути як одним параметром, так і списком параметрів. Також підтримується numpy broadcasting.

Завдання Estimator у режимі 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 у режимі session

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

}

Наступні кроки

Рекомендації