Ініціалізація облікового запису сервісу Qiskit Runtime
Перед використанням Qiskit Runtime потрібно ініціалізувати (створити екземпляр) свого облікового запису, надавши (завантаживши) облікові дані. Ці дані можна вводити вручну щоразу при ініціалізації сервісу Qiskit Runtime або зберегти для повторного використання.
- Якщо ти використовуєш публічний комп'ютер або інше ненадійне середовище, скористайся інструкціями зі сторінки Ініціалізація сервісу в ненадійному середовищі.
- Перейди до цих інструкцій, якщо хочеш підключитися через REST API замість Qiskit.
- За потре би скористайся цією інформацією, щоб налаштувати брандмауер для доступу до API-ендпоінтів IBM Quantum.
Перш ніж почати
Переконайся, що виконав такі кроки:
- Переконайся, що є членом облікового запису IBM Cloud. Інструкції дивись у розділі Налаштування облікового запису IBM Cloud.
- Створи (або отримай доступ до) хоча б один екземпляр. Виконай такі кроки для перевірки:
- Увійди на IBM Quantum Platform.
- Переконайся, що в перемикачі облікових записів у заголовку обрано правильний акаунт і регіон.
- Якщо в тебе відображається один або більше екземплярів — цей крок виконано. Інакше створи екземпляр.
- Переконайся, що працюєш у активному Python-середовищі зі встановленими Qiskit SDK і Qiskit Runtime.
- Активуй віртуальне середовище Python і запус ти Python у ньому.
Знайди свої облікові дані
- Знайди свій API-ключ (також відомий як API token). На панелі керування створи API-ключ, а потім скопіюй його в надійне місце для подальшої автентифікації. Токен більше не буде видно. Зверни увагу, що один API-ключ можна використовувати для підключення до будь-якого регіону.
- Необов'язково: знайди потрібний екземпляр на сторінці Instances. Наведи курсор на його CRN, клацни іконку копіювання, а потім збережи в надійному місці для ідентифікації екземпляра.
Підключи Qiskit до екземпляра сервісу Qiskit Runtime
Ці інструкції розраховані на qiskit_ibm_runtime v0.42 або новіший. Деякі функції недоступні в старіших версіях qiskit_ibm_runtime. У таких випадках завжди вказуй значення для channel, token і instance — явно або через збережений акаунт.
Нижче наведено базовий код для підключення Qiskit до екземпляра сервісу Qiskit Runtime. Проте є кілька способів налаштувати параметри QiskitRuntimeService відповідно до твоїх потреб — вони описані в наступних розділах.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(channel=<channel>,
token=<your-API_KEY>, # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
instance=<instance_CRN>)
Канал за замовчуванням — ibm_quantum_platform. Оскільки це майже завжди правильний вибір, у прикладах його не вказано.
Швидкий старт: явне зазначення облікових даних
Найшвидший спосіб запустити екземпляр QiskitRuntimeService — метод прямої ініціалізації: явно вказувати API-токен (ключ) і CRN (ідентифікатор екземпляра) щоразу при ініціалізації сервісу Qiskit Runtime. За потреби дивись розділ Знайди свої облікові дані.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(token=<cloud_api_key>, # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
instance=<instance_CRN>)
Цей підхід надійний, але може бути незручним, якщо потрібно щоразу вводити одні й ті самі дані. Щоб уникнути повторного введення облікових даних, у надійному Python-середовищі (наприклад, на особистому ноутбуці або робочій станції) можна використовувати збережені облікові дані — це описано в наступному розділі.
Хоча параметр instance є необов'язковим, рекомендується завжди його вказувати, якщо тільки ти не хочеш використовувати один сервіс для роботи з кількома екземплярами. У такому випадку дивись розділ автоматичний вибір екземпляра.
Швидкий старт: використання збережених облікових даних
Якщо ти вже зберіг облікові дані, використовуй наведений нижче код для застосування облікових даних за замовчуванням. Інструкції зі збереження облікових даних дивись у розділі Збережи свої облікові дані.
from qiskit_ibm_runtime import QiskitRuntimeService
# run every time you need the service
service = QiskitRuntimeService()
...
Якщо ти зберіг кілька наборів облікових даних із власними назвами — наприклад, для відкритого і преміум-доступу — використовуй такий код для завантаження конкретного набору.
from qiskit_ibm_runtime import QiskitRuntimeService
# run every time you need the service
service = QiskitRuntimeService(name="<name_of_saved_credentials>")
...
Особливості завантаження збережених облікових даних
-
Якщо ти ініціалізуєш сервіс із
tokenіnameодночасно,tokenігнорується і завантажуються дані з акаунтаname.У наведеному нижче прикладі сервіс завантажує дані з
account_Aі не використовуєtoken_B:from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(token="token_B", name="account_A") -
Якщо при ініціалізації сервісу вказати
nameіinstance, сервіс намагається завантажити акаунтnameта підключитися до вказаногоinstance. При будь-якому конфлікті виводиться попередження.У наведеному нижче прикладі сервіс намагається завантажити облікові дані для
account_Aі використовувати екземплярCRN_B— навіть якщо вaccount_Aвказано інший екземпляр:from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(instance="CRN_B", name="account_A") -
Сервіс намагається завантажити збережений акаунт за замовчуванням лише тоді, коли при ініціалізації не вказано
tokenіname. Однак якщо явно вказаноinstance, сервіс намагається підключитися до цього екземпляра з використанням облікових даних за замовчуванням. При будь-якому конфлікті виводиться попередження.У наведеному нижче прикладі сервіс намагається завантажити облікові дані за замовчуванням і використовувати екземпляр
CRN_B— навіть якщо в акаунті за замовчуванням вказано інший екземпляр:from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService(instance="CRN_B") -
Якщо збережено кілька наборів облікових даних, але при ініціалізації сервісу не вказано жодного і акаунт за замовчуванням відсутній — використовується той, чия назва стоїть останньою в алфавітному порядку.
У наведеному нижче прикладі користувач зберіг акаунти з назвами "my_premium" і "my_open", але не позначив жоден як типовий. Потім сервіс було ініціалізовано таким кодом. У цьому випадку використовуються облікові дані "my_premium":
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService() -
Якщо постійно з'являється помилка «401 Unauthorized», можливо, ти намагаєшся використати bearer token замість API-ключа.
Автоматичний вибір екземпляра
Якщо при ініціалізації сервісу вказати токен, але не вказати CRN екземпляра, QiskitRuntimeService автентифікується в акаунті, ідентифікованому токеном, і автоматично обирає найбільш відповідний екземпляр для запитуваного завдання. Якщо в твоєму акаунті є кілька екземплярів, сервіс автоматично вибирає серед доступних, залежно від запитуваного ресурсу та таких параметрів QiskitRuntimeService (якщо встановлені): plans_preference, region, tags.
plans_preference: типи планів екземплярів, яким надається пріоритет. Наприклад, якщо передати [open], доступні лише екземпляри Open Plan. Допустимі значення:open,premium,pay-as-you-go,flexіon-prem. Якщоplans_preferenceне вказано, безплатні плани мають пріоритет над платними.region: регіон екземпляра. Допустимі значення:us-eastіeu-de.tags: теги екземпляра. Приймає список рядків із назвами тегів.
Можна налаштувати збережені облікові дані для автоматичного вибору екземпляра.
Екземпляр вибирається в такому порядку:
- Якщо твій акаунт має доступ лише до одного екземпляра — він обирається за замовчуванням.
- Якщо використовуються збережені облікові дані і в них вказано екземпляр — використовується він. Дивись Особливості завантаження збережених облікових даних.
- Якщо в акаунті є кілька екземплярів із доступом до запитуваного QPU, система використовує вказані уподобання плану для вибору плану й екземпляра. Для Qiskit Runtime v0.42 і новіших безплатні плани мають пріоритет за замовчуванням.
- Якщо в акаунті є доступ до кількох екземплярів, але лише один має доступ до запитуваного QPU — обирається саме він. Якщо цей екземпляр не пов'язаний із безплатним планом, буде нараховано вартість.
Приклади
У цьому прикладі сервіс шукає серед усіх екземплярів, доступних акаунту, ті, що мають доступ до вказаного Backend:
service = QiskitRuntimeService(token=<your-API_KEY>)
У цьому прикладі сервіс шукає серед усіх екземплярів акаунта в регіоні ЄС ті, що мають доступ до вказаного Backend:
service = QiskitRuntimeService(token=<your-API_KEY>, region="eu-de")
У цьому прикладі сервіс шукає серед усіх екземплярів акаунта з тегом services ті, що мають доступ до вказаного Backend:
service = QiskitRuntimeService(token=<your-API_KEY>, tags=['services'])
У цьому прикладі сервіс шукає серед усіх преміум і відкритих екземплярів акаунта ті, що мають доступ до вказаного Backend. Якщо Backend доступний і в Premium Plan, і в Open Plan, пріоритет надається Premium Plan, оскільки premium вказано першим у plans_preference.
service = QiskitRuntimeService(token=<your-API_KEY>, plans_preference=['premium', 'open'])
Визначення обраного екземпляра
Обраний екземпляр повертається як попередження. Крім того, можна запустити service.active_instance(), щоб дізнатися активний екземпляр.
Локальне тестування з Qiskit Runtime
Клас QiskitRuntimeService можна ініціалізувати з channel=local для локальної симуляції. У цьому випадку автентифікація не потрібна і не потрібно вказувати значення для token або instance. Тому не рекомендується зберігати локальний акаунт — натомість можна використовувати пряму ініціалізацію:
from qiskit_ibm_runtime import QiskitRuntimeService
# Initialize for local testing
service = QiskitRuntimeService(channel="local")
Наступні кроки
- Створюй екземпляри та керуй ними.
- Ініціалізуй сервіс у ненадійному середовищі.
- Налаштуй використання IBM Quantum Platform через REST API.
- Виконай кроки з розділу Hello world, щоб написати й запустити квантову програму.