Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

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

Версії пакетів

Код на цій сторінці розроблено з використанням наведених нижче залежностей. Рекомендуємо використовувати ці або новіші версії.

qiskit[all]~=2.3.0

Ти можеш запускати робочі навантаження з примітивами IBM Quantum через REST API в одному з трьох режимів виконання, залежно від потреб: job, session та batch. Нижче пояснено кожен із них.

примітка

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

Job mode через REST API​

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

Session mode через REST API​

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

примітка

Користувачі плану 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 mode через REST API​

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

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

}

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

Рекомендації
  • Переглянь детальні приклади примітивів Sampler через REST API.
  • Переглянь детальні приклади примітивів Estimator через REST API.
  • Практикуйся з примітивами, працюючи над уроком про функцію вартості в IBM Quantum® Learning.
  • Дізнайся, як транспілювати локально, у розділі Transpile.