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

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

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

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

qiskit-ibm-runtime~=0.46.1

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

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

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

Ти можеш використовувати 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 — required packages for this notebook
!pip install -q qiskit-ibm-runtime
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

service.backends()
[<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>,
<IBMBackend('ibm_miami')>]
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_boston')>,
<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>,
<IBMBackend('ibm_miami')>]
примітка

Якщо ти увійшов(ла) до конкретного екземпляра або регіону, або якщо ти ініціалізував(ла) сервіс із конкретним екземпляром або регіоном за допомогою 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.backend("ibm_fez")

print(
f"Name: {backend.name}\n"
f"Version: {backend.backend_version}\n"
f"No. of qubits: {backend.num_qubits}\n"
f"Processor type: {backend.processor_type}\n"
)
Name: ibm_fez
Version: 1.3.37
No. of 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, ID, delay
Двокубітні вентиліCZ, ECR
Дробові вентиліRX (однокубітний), RZZ (двокубітний)
Невітарні інструкціїmeasure, reset, measure_*, delay
Керуючий потікif_else (класичний зворотний зв'язок)
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("ibm_kingston")

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 (Час дефазування)

Час 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.backend("ibm_fez")

backend.qubit_properties(1)
QubitProperties(t1=0.00018243651954462543, t2=0.00020405172321184844, frequency=None)
# Retrieve qubit properties
qubit_index = 126 # 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")
Qubit 126 Properties:
T1: 0.0001248478211384773 seconds
T2: 7.96150033446492e-05 seconds
Readout Error: 0.0244140625
P(0 | 1): 0.029052734375
P(1 | 0): 0.019775390625
Readout Length: 1.56e-06 seconds

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

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

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

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

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

prob-meas0-prep1

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

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

Аналогічно, цей параметр представляє ймовірність вимірювання кубіта у стані 1, коли він призначений для підготовки у стані 0|0\rangle, що позначається як P(10)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. Найкраща похибка 2Q — це найменша похибка двокубітного вентиля на будь-якому ребрі пристрою, також з цієї серії вимірювань.

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

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

Обчислення за допомогою QiskitСлідуй прикладу в цьому ноутбуці GitHub спільноти Qiskit
Перегляд на IBM Quantum PlatformРозділ «Details»; дані по кожному ребру також знайди в розділі «Calibration data»
Похибка 2Q (пошарова)

Середня похибка на шаровий вентиль (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)», що надає розширений вигляд найменшої похибки двокубітного вентиля (пошарової), виміряної як функція кількості кубітів у ланцюжку. Остаточне значення при довжині ланцюжка 100 — це значення, наведене в розділі «Details». На практиці вимірюють шість ланцюжків по 100 кубітів (попередньо відібраних на основі очікуваної оптимальної продуктивності), а значення, що зазначається для числа кубітів N, — це найменша похибка, знайдена в підланцюжку довжиною N, шляхом перебору шести ланцюжків по 100 кубітів.

Обчислення за допомогою QiskitСлідуй прикладу в цьому ноутбуці GitHub спільноти Qiskit
Перегляд на IBM Quantum PlatformРозділ «Details» та розширений вигляд у розділі «Two-qubit gate error (layered)»
Похибка RZZ (Heron)

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

Перегляд за допомогою QiskitВажливо: переконайся, що ти встановив(ла) use_fractional_gates=True при завантаженні бекенду, тоді можна використовувати backend.target['rzz'][<qubit 1>, <qubit 2>]
Перегляд на IBM Quantum PlatformРозділ «Calibration»: вибери RZZ у спадному меню «Connection» та наведи курсор на з'єднання кубітів у вигляді мапи. Також можна вибрати похибку RZZ у спадному меню виводу графа або знайти значення в табличному поданні у стовпці «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, і передбачається, що їх похибки однакові.

Перегляд на IBM Quantum PlatformРозділ «Details»
Похибка обертання навколо осі Z (RZ)

Похибка віртуального вентиля RZ. Зазначається як 0, оскільки ці операції виконуються програмно.

Перегляд за допомогою Qiskit backend.target['<instruction>'][<qubit 1>, ]
Перегляд на IBM Quantum PlatformРозділ «Calibration»: спадне меню «Connection»
Похибка зчитування

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

Перегляд за допомогою Qiskitbackend.properties().readout_error(<qubit>)
Перегляд на IBM Quantum PlatformРозділ «Calibration data», спадне меню «Qubit»
Похибка зчитування (медіанна)

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

Перегляд на IBM Quantum PlatformРозділ «Calibration data», розділ «Details»
Тривалість однокубітного вентиля

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

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

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

Перегляд за допомогою Qiskitbackend.target['<instruction>'][<qubit 1>, <qubit 2> ].duration
Перегляд на IBM Quantum PlatformРозділ «Calibration»: спадне меню «Qubit»
Тривалість зчитування

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

Перегляд за допомогою Qiskit
  • Для measure: backend.properties().readout_length(<qubit>)
  • Для measure_2: backend.target['measure_2'][<qubit 1>, ].duration
Перегляд на IBM Quantum PlatformРозділ «Calibration data», спадне меню «Qubit»
backend.target["cz"][(1, 0)]
InstructionProperties(duration=6.8e-08, error=0.010202155482934266)
backend.target["measure"][(0,)]
InstructionProperties(duration=1.56e-06, error=0.025634765625)

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

CLOPS (або CLOPS_h)

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

Обчислення за допомогою QiskitЗнайди код CLOPS на GitHub спільноти Qiskit
Перегляд на IBM Quantum PlatformРозділ «Details»
Статус

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

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

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

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

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

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

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