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

Ініціалізація облікового запису сервісу Qiskit Runtime

Перед використанням Qiskit Runtime потрібно ініціалізувати (створити екземпляр) свого облікового запису, надавши (завантаживши) облікові дані. Ці дані можна вводити вручну щоразу при ініціалізації сервісу Qiskit Runtime або зберегти для повторного використання.

Примітки

Перш ніж почати

Переконайся, що виконав такі кроки:

  1. Переконайся, що є членом облікового запису IBM Cloud. Інструкції дивись у розділі Налаштування облікового запису IBM Cloud.
  2. Створи (або отримай доступ до) хоча б один екземпляр. Виконай такі кроки для перевірки:
    1. Увійди на IBM Quantum Platform.
    2. Переконайся, що в перемикачі облікових записів у заголовку обрано правильний акаунт і регіон.
    3. Якщо в тебе відображається один або більше екземплярів — цей крок виконано. Інакше створи екземпляр.
  3. Переконайся, що працюєш у активному Python-середовищі зі встановленими Qiskit SDK і Qiskit Runtime.
  4. Активуй віртуальне середовище Python і запусти Python у ньому.

Знайди свої облікові дані

  1. Знайди свій API-ключ (також відомий як API token). На панелі керування створи API-ключ, а потім скопіюй його в надійне місце для подальшої автентифікації. Токен більше не буде видно. Зверни увагу, що один API-ключ можна використовувати для підключення до будь-якого регіону.
  2. Необов'язково: знайди потрібний екземпляр на сторінці 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: теги екземпляра. Приймає список рядків із назвами тегів.
примітка

Можна налаштувати збережені облікові дані для автоматичного вибору екземпляра.

Екземпляр вибирається в такому порядку:

  1. Якщо твій акаунт має доступ лише до одного екземпляра — він обирається за замовчуванням.
  2. Якщо використовуються збережені облікові дані і в них вказано екземпляр — використовується він. Дивись Особливості завантаження збережених облікових даних.
  3. Якщо в акаунті є кілька екземплярів із доступом до запитуваного QPU, система використовує вказані уподобання плану для вибору плану й екземпляра. Для Qiskit Runtime v0.42 і новіших безплатні плани мають пріоритет за замовчуванням.
  4. Якщо в акаунті є доступ до кількох екземплярів, але лише один має доступ до запитуваного 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")

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