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

Перегляд деталей бекенду

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

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

qiskit-ibm-runtime~=0.47.0

Ця сторінка пояснює, як знайти інформацію про доступні тобі бекенди.

Перелік або фільтрація бекендів​

Перелік доступних тобі бекендів​

Ти можеш використовувати Qiskit або IBM Quantum Platform для перегляду списку доступних тобі бекендів чи пошуку конкретного бекенду.

Назви QPU

QPU, розміщені в IBM Cloud®, мають назви, що починаються з ibm_*. Усім QPU присвоюють назву міста — наприклад, ibm_kingston. Ця назва не вказує на місце фактичного розташування QPU.

Використовуй метод QiskitRuntimeService.backends(), як показано в наступному блоці коду. Цей метод повертає список екземплярів IBMBackend.

Щоб запустити наступний код, переконайся, що ти вже пройшов(ла) автентифікацію в сервісі. Докладніше дивись у розділі Налаштування акаунту IBM Cloud.

Щоб знайти конкретний бекенд, використовуй метод QiskitRuntimeService.backend() (зверни увагу, що тут використовується однина: backend), який приймає назву бекенду як вхідний параметр і повертає екземпляр IBMBackend, що представляє цей конкретний бекенд:

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

service.backends()
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>]
service.backend("ibm_fez")
<IBMBackend('ibm_fez')>
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()

service.backends(simulator=False, operational=True, min_num_qubits=100)
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>]
примітка

Якщо ти увійшов(ла) до конкретного екземпляра або регіону, або якщо ти ініціалізував(ла) сервіс із конкретним екземпляром або регіоном за допомогою QiskitRuntimeService(), повертаються лише бекенди, доступні тобі в цьому екземплярі або регіоні.

Фільтрація бекендів​

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

Наступний код повертає лише бекенди, які відповідають таким критеріям і доступні тобі на твоєму поточно вибраному екземплярі:

  • Є реальними квантовими пристроями (simulator=False)

  • Наразі працюють (operational=True)

  • Мають щонайменше сто кубітів (min_num_qubits=100)

Схожий метод — QiskitRuntimeService.least_busy(), який приймає ті самі фільтри, що й backends(), але повертає бекенд, що відповідає фільтрам і має найменшу кількість завдань у черзі:

service.least_busy(operational=True, min_num_qubits=100)
<IBMBackend('ibm_fez')>

Статична інформація про бекенд​

Деяка інформація про бекенд не змінюється регулярно, наприклад його назва, версія, кількість кубітів, тип процесора (назва родини птахів, яка вказує на топологію та приблизну кількість кубітів) та типи функцій, які він підтримує. Ця інформація доступна як атрибути об'єкта backend. Повний список атрибутів дивись у документації API IBMBackend. Більше інформації про версіонування дивись у розділі Версіонування QPU нижче.

Регіон бекенду (місцезнаходження дата-центру, де зберігатимуться та оброблятимуться твої дані й експерименти) зазначено в його детальній інформаційній картці на сторінці Обчислювальні ресурси на IBM Quantum Platform.

backend = service.least_busy(operational=True, simulator=False)

print(
f"Name: {backend.name}\n"
f"Version: {backend.backend_version}\n"
f"No. of programmable qubits: {backend.num_qubits}\n"
f"Processor type: {backend.processor_type}\n"
)
Name: ibm_fez
Version: 1.3.37
No. of programmable qubits: 156
Processor type: {'family': 'Heron', 'revision': '2'}

Версіонування QPU​

Кожен QPU має номер версії у форматі X.Y.Z (мажорна.мінорна.ревізія). Схема, скомпільована для певного номера версії, гарантовано запуститься на цьому QPU. Якщо номер ревізії змінюється, схема продовжить працювати. Якщо змінюється мажорний або мінорний номер, немає гарантії, що схема запуститься, хоча вона може й запуститися.

Номер версії ревізії збільшуватиметься для виправлень, які не порушують роботу вже скомпільованої схеми.

Приклад коду раніше в цьому розділі демонструє, як знайти версію бекенда. На платформі IBM Quantum Platform ти можеш переглянути версію на детальній інформаційній картці QPU (клацни на назву QPU в таблиці Обчислювальні ресурси, щоб відкрити картку).

Умови, за яких номер версії або ревізії можуть змінюватися, наведені в наступній таблиці.

Мажорна версіяМінорна версіяВерсія ревізії
Заміна зразка (чипа)Цикли прогрівання/охолодженняОновлення програмного забезпечення QPU
Значні зміни в керуючій електроніціЗаміна деяких електронних компонентів, якщо заміна суттєво впливає на роботуРучні калібрування для покращення точності
Переміщення QPU в нове місце, якщо це призводить до значних змін поведінкиВідключення вентиля на деякий час через проблеми з калібруванням, і виправлення неможливо легко зробити програмноНезначні зміни електроніки, які не впливають на роботу
Зміна напрямку вентиля CNOT

Підтримувані інструкції​

Кожне сімейство процесорів нативно підтримує обмежений набір інструкцій. Цей набір включає однокубітні та двокубітні вентилі, а також неунітарні операції, такі як measure і reset. Кожен вентиль у схемі має бути транспільований (транспілятором) до елементів підтримуваного набору інструкцій QPU, перш ніж він зможе виконатися на QPU.

Ти можеш переглянути підтримувані набори інструкцій для QPU за допомогою Qiskit. Сторінка Обчислювальні ресурси IBM Quantum Platform перелічує лише підтримувані унітарні вентилі (базові вентилі) для QPU.

Таблиця підтримуваних інструкцій​

Категорія операціїНазва
Однокубітні вентиліRZ, SX, X, XSlow, ID, delay
Двокубітні вентиліCZ, ECR
Дробові вентиліRX (однокубітний), RZZ (двокубітний)
Неунітарні інструкціїmeasure, reset, measure_*, reset_*, measure_reset*, delay
Керуючий потікif_else (класичний прямий зв'язок)
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

print(f"Backend: {backend.name}")
print(f" Processor type: {backend.processor_type}")
print(f" Supported instructions: {backend.supported_instructions}")
Backend: ibm_kingston
Processor type: {'family': 'Heron', 'revision': '2'}
Supported instructions: ['cz', 'id', 'delay', 'measure', 'measure_2', 'reset', 'rz', 'sx', 'x', 'if_else', 'store']

Динамічна інформація про бекенд​

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

На IBM Quantum Platform ти можеш завантажити дані калібрування у файлі CSV. Натисни на QPU на сторінці Обчислювальні ресурси, щоб переглянути його детальну інформаційну картку, а потім натисни на значок завантаження у верхньому правому куті розділу «Calibration data».

Отримання історичних даних

Ти можеш отримати історичні дані властивостей бекенду в Qiskit за допомогою наступного коду:

backend.properties(datetime=<datetime>)

Властивості кубітів​

Перейти до списку властивостей кубітів

backend.properties().qubit_property() повертає інформацію про фізичні атрибути кубітів. Він містить словник різних властивостей кубіта, кожна з яких поєднана зі своїм значенням і часовою міткою останнього калібрування.

Наступні приклади коду демонструють, як перелічити всі властивості або отримати конкретні властивості певного кубіта.

Перегляд властивостей кубітів​

T1 (Час релаксації)

Час T1T_1 представляє середню тривалість перебування кубіта у збудженому стані ∣1⟩|1\rangle до розпаду в основний стан ∣0⟩|0\rangle внаслідок енергетичної релаксації. Цей параметр використовується для характеристики поведінки енергетичної релаксації кубіта та виражається в секундах (с).

Перегляд за допомогою Qiskitbackend.properties().t1(<qubit>)
Перегляд на IBM Quantum PlatformРозділ «Calibration data», спадне меню «qubit»; знайди медіанне значення T1T_1 в розділі «Details»
T2 (Dephasing time)

Час T2T_2 позначає часовий масштаб, протягом якого кубіт зберігає фазову когерентність суперпозиції між станами ∣0⟩|0\rangle та ∣1⟩|1\rangle. Він враховує як енергетичну релаксацію, так і процеси чистого дефазування, надаючи уявлення про когерентні властивості кубіта. T2T_2 вимірюється з послідовності ехо Хана.

Перегляд за допомогою Qiskitbackend.properties().t2(<qubit>)
Перегляд на IBM Quantum PlatformРозділ «Calibration data», спадне меню «qubit»; знайди медіанне значення T2T_2 в розділі «Details»
# fundamental physical properties of qubit 1

backend = service.least_busy(operational=True, simulator=False)

backend.qubit_properties(1)
QubitProperties(t1=0.00022010760855770256, t2=0.0002363339150114578, frequency=None)
# Retrieve qubit properties
qubit_index = backend.num_qubits - 1 # Replace with your qubit index
qubit_props = backend.properties().qubit_property(qubit_index)

# Access specific properties
t1 = qubit_props.get("T1", (None,))[0]
t2 = qubit_props.get("T2", (None,))[0]
readout_error = qubit_props.get("readout_error", (None,))[0]
prob_meas0_prep1 = qubit_props.get("prob_meas0_prep1", (None,))[0]
prob_meas1_prep0 = qubit_props.get("prob_meas1_prep0", (None,))[0]
readout_length = qubit_props.get("readout_length", (None,))[0]

print(f"Qubit {qubit_index} Properties:")
print(f" T1: {t1} seconds")
print(f" T2: {t2} seconds")
print(f" Readout Error: {readout_error}")
print(f" P(0 | 1): {prob_meas0_prep1}")
print(f" P(1 | 0): {prob_meas1_prep0}")
print(f" Readout Length: {readout_length} seconds")

Властивості інструкцій​

Перейти до списку властивостей інструкцій

Атрибут backend.target — це об'єкт qiskit.transpiler.Target: об'єкт, що містить всю інформацію, необхідну для транспіляції схеми для цього бекенду. Це включає похибки та тривалості інструкцій. Наприклад, наступна комірка отримує властивості вентиля cz, що діє між парою з'єднаних кубітів.

Наступна комірка показує властивості операції вимірювання (включно з похибкою зчитування) на кубіті 0.

Перегляд властивостей інструкцій​

prob-meas0-prep1

Цей параметр вказує на ймовірність вимірювання кубіта у стані ∣0⟩|0\rangle, коли він призначений для підготовки у стані ∣1⟩|1\rangle, що позначається як P(0∣1)P(0 | 1). Він відображає похибки в підготовці стану та вимірюванні (SPAM), зокрема похибки вимірювання у надпровідних кубітах.

Перегляд за допомогою Qiskitbackend.properties().qubit_property(<qubit>, 'prob_meas0_prep1')
Перегляд на IBM Quantum PlatformРозділ Calibration data: спадне меню Qubit
prob-meas1-prep0

Аналогічно, цей параметр представляє ймовірність вимірювання кубіта у стані ∣1⟩|1\rangle, коли він призначений для підготовки у стані ∣0⟩|0\rangle, що позначається як P(1∣0)P(1 | 0). Як і prob_meas0_prep1, він відображає похибки SPAM, причому похибки вимірювання є основним джерелом у надпровідних кубітах.

Перегляд за допомогою Qiskitbackend.properties().qubit_property(<qubit>, 'prob_meas0_prep0')
Перегляд на IBM Quantum PlatformРозділ Calibration data: спадне меню Qubit
Помилка 2Q (Heron і Nighthawk: CZ, Eagle: ECR)

Двокубітна похибка на ребро з того самого набору вимірювань, використаного для обчислення медіанної похибки 2Q. 2Q error (best) позначає найнижчу двокубітну похибку на будь-якому ребрі пристрою, також з цього набору вимірювань.

Перегляд за допомогою Qiskitbackend.target['<instruction>'][<qubit 1>, <qubit 2>]
Перегляд на IBM Quantum PlatformРозділ Calibration: наведи курсор на з'єднання кубітів у режимі Map, або знайди значення в режимі Table у стовпці похибки CZ (Heron та Nighthawk) або похибки ECR (Eagle); знайди значення для 2Q error (best) в розділі Details
Медіанна помилка 2Q (Heron: CZ, Eagle: ECR)

Середня точність гейта двокубітної операції за результатами рандомізованого бенчмаркінгу. Виміряно в «ізоляції»: пакети з мінімальним розділенням у два кубіти між ребрами. Цей рандомізований бенчмаркінг використовує чергування шарів однокубітних гейтів Кліффорда та двокубітних гейтів, тому кінцеве значення похибки 2Q включає похибку шару однокубітних гейтів Кліффорда.

Calculate with QiskitДотримуйся прикладу в цьому ноутбуці Qiskit Community GitHub
View on IBM Quantum PlatformРозділ Details; дані по кожному ребру також можна знайти в розділі Calibration data
2Q error (layered)

Середня похибка на шаруватий гейт (EPLG) у ланцюжку зі 100 кубітів. Середнє значення EPLG вимірює середню похибку гейта в шаруватому ланцюжку з NN кубітів (NN=100 тут). Воно виводиться зі схожої величини, відомої як точність шару (LF), де EPLG100_{100} = 4/5(1-LF199^{\frac{1}{99}}), а точність шару — це точність процесу шаруватого ланцюжка з NN кубітів. Детальніше див. у статті Benchmarking quantum processor performance at scale. Зверни увагу, що в статті EPLG визначено для похибки процесу, але для узгодженості з окремо наведеними похибками гейтів тут вона наводиться для середньої похибки гейта, звідки й множник 4/5.

На IBM Quantum Platform детальна інформаційна картка кожного QPU містить розділ Two-qubit gate error (layered), який надає розгорнутий вигляд найнижчої two-qubit gate error (layered), виміряної як функція кількості кубітів у ланцюжку. Кінцеве значення при довжині ланцюжка 100 — це значення, наведене в розділі Details. На практиці вимірюють шість 100-кубітних ланцюжків (попередньо відібраних на основі очікуваної оптимальної продуктивності), і значення, наведене для кількості кубітів N, — це найнижча похибка, знайдена серед підланцюжків довжини N під час пошуку по шести 100-кубітних ланцюжках.

Calculate with QiskitДотримуйся прикладу в цьому ноутбуці Qiskit Community GitHub
View on IBM Quantum PlatformРозділ Details і розгорнутий вигляд у розділі Two-qubit gate error (layered)
RZZ error (Heron)

Похибка гейта RZZ, усереднена за кутами RZZ, за допомогою варіанту рандомізованого бенчмаркінгу для довільних унітарних операторів.

Перегляд за допомогою QiskitВажливо: переконайся, що встановлено use_fractional_gates=True під час завантаження бекенда, після чого можна використовувати backend.target['rzz'][<qubit 1>, <qubit 2>]
Перегляд на IBM Quantum PlatformРозділ Calibration: вибери RZZ у спадному меню Connection і наведи курсор на з'єднання кубітів у вигляді Map. Також можна вибрати RZZ error у спадному меню Graph output у вигляді Graph або знайти значення у вигляді Table у стовпці RZZ error
Помилка ID / помилка √x (sx) / помилка Pauli-X / помилка RX

Похибка однокубітних гейтів скінченної тривалості, виміряна за допомогою рандомізованого бенчмаркінгу. Послідовність рандомізованого бенчмаркінгу включає гейти SX, ID та X, і передбачається, що їхні похибки однакові. Гейт ID є затримкою тривалістю, що дорівнює тривалості гейтів √X та X. Гейт RX також має ту саму тривалість, що й гейти √X та X, зі змінною амплітудою, тому вважається, що він має ту саму похибку, що й ці гейти.

Перегляд за допомогою Qiskitbackend.target['<instruction>'][<qubit 1>, ]
Перегляд на IBM Quantum PlatformРозділ Calibration: спадне меню Qubit
Помилка SX (медіана)

Середня точність гейта гейта √X (SX) за результатами рандомізованого бенчмаркінгу, виміряна одночасно на всіх кубітах. Послідовність рандомізованого бенчмаркінгу включає гейти SX, ID та X, і передбачається, що їхні похибки однакові.

View on IBM Quantum PlatformРозділ Details
Помилка обертання навколо осі Z (RZ)

Похибка віртуального гейта RZ. Наводиться як нуль у всіх випадках, оскільки ці операції виконуються програмно.

View with Qiskit backend.target['<instruction>'][<qubit 1>, ]
View on IBM Quantum PlatformРозділ Calibration: спадне меню Connection
Readout error

Похибка зчитування кількісно визначає середню ймовірність неправильного вимірювання стану кубіта. Зазвичай вона обчислюється як середнє значення prob_meas0_prep1 та prob_meas1_prep0, надаючи єдину метрику точності вимірювання.

View with Qiskitbackend.properties().readout_error(<qubit>)
View on IBM Quantum PlatformРозділ Calibration data: спадне меню Qubit
Readout error (median)

Точність операції зчитування. Похибка зчитування вимірюється підготовкою кубіта в стані ∣0⟩|0\rangle (∣1⟩|1\rangle) та вимірюванням ймовірності отримання результату в стані ∣1⟩|1\rangle (∣0⟩|0\rangle). Наведене значення — середнє цих двох похибок. Медіана береться по всіх кубітах.

View on IBM Quantum PlatformРозділ Calibration data: розділ Details
Single-qubit gate length

Тривалість операції однокубітного гейта. Зверни увагу, що значення, показані на IBM Quantum Platform, наведено в наносекундах. Значення, що повертає Qiskit, наведено в секундах.

Перегляд за допомогою Qiskitbackend.target['<instruction>'][<qubit 1>, ].duration
Перегляд на IBM Quantum PlatformРозділ Calibration: спадне меню Qubit
Довжина гейта (2Q-гейти)

Тривалість операції двокубітного гейта. Зверни увагу, що значення, показані на IBM Quantum Platform, наведено в наносекундах. Значення, що повертає Qiskit, наведено в секундах.

View with Qiskitbackend.target['<instruction>'][<qubit 1>, <qubit 2> ].duration
View on IBM Quantum PlatformРозділ Calibration: спадне меню Qubit
Readout length

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

View with Qiskit
  • Для measure: backend.properties().readout_length(<qubit>)
  • Для measure_2: backend.target['measure_2'][<qubit 1>, ].duration
View on IBM Quantum PlatformРозділ Calibration data: спадне меню Qubit
Initialization error

Похибка ініціалізації кількісно визначає відсоток популяції в стані ∣1⟩|1\rangle після стандартної затримки повторення та процедури ініціалізації кубіта, коли попередній експеримент підготував кубіт у стані ∣1⟩|1\rangle. Зверни увагу, що це дещо відрізняється від величини prob_meas1_prep0, яка вимірює відсоток вимірювань, приписаних стану ∣1⟩|1\rangle. Остання є вимірюванням як похибки ініціалізації, так і процедури розрізнення станів ∣0⟩|0\rangle та ∣1⟩|1\rangle. У межі ідеального вимірювання ці дві величини збігаються.

Перегляд за допомогою Qiskitbackend.properties().qubit_property(<qubit>, 'init_error')
Перегляд на IBM Quantum PlatformРозділ «Calibration data»: спадне меню «qubit»
# Get the cz gate properties for a connected pair of qubits
# (the first edge in this backend's coupling map)
edge = next(iter(backend.target["cz"]))
backend.target["cz"][edge]
backend.target["measure"][(0,)]
InstructionProperties(duration=1.66e-06, error=0.0126953125)

Додаткові властивості​

Максимум схем за секунду (MCPS)

Maximum circuits per second (MCPS) включає вимірювання, скидання та повторну ініціалізацію схеми з гейтом Адамара та одним вимірюванням.

View with Qiskitmcps = backend.configuration().mcps
View on IBM Quantum PlatformРозділ Details
CLOPS (or CLOPS_h)

Circuit layer operations per second (CLOPS) — це показник того, скільки шарів схеми 100x100 (апаратно-орієнтованої схеми) QPU може виконати за одиницю часу.

Calculate with QiskitЗнайди код CLOPS у Qiskit Community GitHub
View on IBM Quantum PlatformРозділ Details
Status

За допомогою BackendStatus можна дізнатися статус QPU (наприклад, Active, Paused, Offline), а також кількість завдань у черзі.

Перегляд за допомогою Qiskitprint(backend.status().status_msg), print(backend.status().pending_jobs)
Перегляд на IBM Quantum PlatformРозділ Details
Діаграма топології або карта зв'язності

Діаграма, що показує пари кубітів, між якими підтримуються двокубітні операції гейтів. Це також називається картою зв'язності (coupling map) або зв'язністю. Кубіти зображено у вигляді кіл, а підтримувані двокубітні операції гейтів — у вигляді ліній, що з'єднують кубіти.

Перегляд за допомогою Qiskitfrom qiskit.visualization import plot_gate_map потім plot_gate_map(backend)
Перегляд на IBM Quantum PlatformРозділ Calibration data; натисни Expand для більшого вигляду
Що означає `error = 1`?

Якщо бенчмаркінг кубіта або ребра не вдається протягом кількох днів, чи то через погану якість даних, чи через інші внутрішні чинники, наведене значення похибки вважається застарілим і буде показано як 1. Це не означає, що кубіт або ребро обов'язково непрацездатні або що похибка справді дорівнює 1; радше похибка вважається невизначеною, тому слід діяти обережно, працюючи з цим кубітом або гейтом.

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

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