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

Отримання інформації про бекенд за допомогою Qiskit

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

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

qiskit-ibm-runtime~=0.43.1

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

Список бекендів

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

Примітки
  • Якщо ти увійшов до конкретного інстансу або регіону, або якщо ти ініціалізував сервіс із конкретним інстансом чи регіоном за допомогою QiskitRuntimeService(), будуть повернуті лише бекенди, доступні тобі в цьому інстансі або регіоні. В іншому випадку повертаються всі бекенди, доступні тобі в будь-якому інстансі та в будь-якому регіоні.
  • Список повернутих бекендів може відрізнятися від тих, що відображаються на сторінці Обчислювальних ресурсів IBM Quantum Platform. Список на сторінці обчислювальних ресурсів завжди відфільтрований за регіоном, обраним у верхній частині сторінки.

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

# 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_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

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

service.backend("ibm_fez")
<IBMBackend('ibm_fez')>

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

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

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

  • Є реальними квантовими пристроями (simulator=False)
  • Наразі функціонують (operational=True)
  • Мають щонайменше 5 кубітів (min_num_qubits=5)
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()

service.backends(simulator=False, operational=True, min_num_qubits=5)
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

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

service.least_busy(operational=True, min_num_qubits=5)
<IBMBackend('ibm_torino')>

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

Деяка інформація про бекенд не змінюється регулярно, наприклад, його назва, версія, кількість кубітів та типи підтримуваних функцій. Ця інформація доступна як атрибути об'єкта backend.

Наступна комірка будує опис бекенду.

backend = service.backend("ibm_fez")

print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"No. of qubits: {backend.num_qubits}\n"
)
Name: ibm_fez
Version: 2
No. of qubits: 156

Повний список атрибутів дивись у документації API IBMBackend.

Нативні гейти та операції

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

Нативні гейти та операції для QPU можна переглянути або за допомогою Qiskit, або на сторінці обчислювальних ресурсів IBM Quantum® Platform.


from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

for backend in service.backends():
config = backend.configuration()
if "simulator" in config.backend_name:
continue
print(f"Backend: {config.backend_name}")
print(f" Processor type: {config.processor_type}")
print(f" Supported instructions:")
for instruction in config.supported_instructions:
print(f" {instruction}")
print()

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

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

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

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

  • T1 (Relaxation Time): Час T1 — це середня тривалість перебування кубіту у збудженому стані 1|1\rangle перед тим, як він розпадається до основного стану 0|0\rangle внаслідок релаксації енергії. Цей параметр характеризує поведінку кубіту при релаксації енергії та виражається в секундах (с).

  • T2 (Dephasing Time): Час T2 позначає часовий масштаб, протягом якого кубіт зберігає фазову когерентність суперпозиції між станами 0|0\rangle та 1|1\rangle. Він враховує як релаксацію енергії, так і процеси чистого дефазування, даючи уявлення про властивості когерентності кубіту.

  • frequency: Цей параметр задає резонансну частоту кубіту, що вказує на різницю енергій між станами 0|0\rangle та 1|1\rangle, виражену в герцах (Гц).

  • anharmonicity: Ангармонічність — це різниця енергій між першим і другим збудженими станами кубіту, також виражена в герцах (Гц).

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

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

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

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

# fundamental physical properties of qubit 1
backend.qubit_properties(1)
QubitProperties(t1=0.00023160183954439313, t2=0.0002759670226087048, frequency=None)
# calibration data with detailed properties of qubit 0
backend.properties().qubit_property(0)
{'T1': (5.199156952582205e-05,
datetime.datetime(2026, 1, 14, 16, 18, 26, tzinfo=tzlocal())),
'T2': (2.253552085985709e-05,
datetime.datetime(2026, 1, 14, 16, 19, 6, tzinfo=tzlocal())),
'readout_error': (0.013916015625,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas0_prep1': (0.026123046875,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas1_prep0': (0.001708984375,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'readout_length': (1.56e-06,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal()))}
# 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]
frequency = qubit_props.get("frequency", (None,))[0]
anharmonicity = qubit_props.get("anharmonicity", (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" Frequency: {frequency} Hz")
print(f" Anharmonicity: {anharmonicity} Hz")
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: 9.563335658857979e-05 seconds
T2: 6.570556299807121e-05 seconds
Frequency: None Hz
Anharmonicity: None Hz
Readout Error: 0.006591796875
P(0 | 1): 0.009765625
P(1 | 0): 0.00341796875
Readout Length: 1.56e-06 seconds

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

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

backend.target["cz"][(1, 0)]
InstructionProperties(duration=6.8e-08, error=0.007831625819164134)

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

backend.target["measure"][(0,)]
InstructionProperties(duration=1.56e-06, error=0.013916015625)

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

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