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

Вказівка параметрів Estimator

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

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

qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0

Ти можеш використовувати параметри для налаштування примітиву Estimator. Хоча інтерфейс методу run() примітивів є спільним для всіх реалізацій, їхні параметри відрізняються. Ознайомся з довідниками API для отримання інформації про параметри qiskit.primitives.BaseEstimatorV2 та qiskit_aer.BaseEstimatorV2.

Notes :

Примітки щодо вказівки параметрів у примітивах Estimator
  • Ти можеш переглядати доступні параметри та оновлювати їх значення під час або після ініціалізації Estimator.
  • Використовуй метод update() для застосування змін до атрибуту options.
  • Якщо не вказати значення для параметра, йому присвоюється спеціальне значення Unset і використовуються серверні значення за замовчуванням.
  • Атрибут options має тип Python dataclass. Можна використовувати вбудований метод asdict для перетворення його на словник.

Налаштування параметрів Estimator​

Ти можеш встановлювати параметри під час ініціалізації Estimator, після ініціалізації Estimator або (лише для precision) у методі run().

Ініціалізація примітиву​

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

Клас параметрів​

Під час створення екземпляра класу Estimator ти можеш передати екземпляр класу параметрів. Ці параметри будуть застосовані при використанні run() для виконання обчислень. Вкажи параметри у такому форматі: options.option.sub-option.sub-sub-option = choice. Наприклад: options.dynamical_decoupling.enable = True

Приклад:

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

_needed = {"qiskit": "qiskit", "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")
from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# from qiskit_ibm_runtime.options import EstimatorOptions

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models import EstimatorOptions

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

options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

Словник​

Ти можеш вказати параметри як словник під час ініціалізації Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator

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

# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)

Оновлення параметрів після ініціалізації​

Ти можеш вказувати параметри у форматі estimator.options.option.sub-option.sub-sub-option = choice, щоб скористатися автодоповненням, або використовувати метод update() для масового оновлення.

Клас параметрів Estimator (EstimatorOptions) не потрібно створювати, якщо ти встановлюєш параметри після ініціалізації примітиву.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator

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

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)

Метод Run()​

Єдині значення, які можна передати до run(), це ті, що визначені в інтерфейсі. Тобто precision для Estimator. Це перезаписує будь-яке значення, встановлене для default_precision для поточного запуску.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('dab7lhjvpcac73ddekcg', 'estimator')>

Особливий випадок: точність​

Метод Estimator.run приймає два аргументи: список PUB-ів, кожен з яких може вказувати специфічне для PUB значення точності, та іменований аргумент precision. Ці значення точності є частиною інтерфейсу виконання Estimator і не залежать від параметрів Runtime Estimator. Вони мають пріоритет над будь-якими значеннями, вказаними як параметри, щоб відповідати абстракції Estimator.

Однак, якщо precision не вказано жодним PUB або в іменованому аргументі run (або якщо всі вони мають значення None), використовується значення точності з параметрів, зокрема default_precision.

примітка

Ці параметри точності призначені лише для задання цільової точності, і результати не гарантовано досягнуть вказаної точності.

Зверни увагу, що параметри Estimator містять як default_shots, так і default_precision. Однак, оскільки twirling вентилів увімкнено за замовчуванням, добуток num_randomizations та shots_per_randomization має пріоритет над цими двома параметрами.

Зокрема, для будь-якого PUB Estimator:

  1. Якщо PUB вказує точність, використовуй це значення.

  2. Якщо аргумент-ключове слово precision вказано у run, використовуй це значення.

  3. Якщо twirling увімкнено (True за замовчуванням), використовується добуток num_randomizations та shots_per_randomization, вказаний у параметрах twirling.

  4. Якщо вказано estimator.options.default_shots, використовуй це значення для контролю кількості даних.

  5. Якщо вказано estimator.options.default_precision, використовуй це значення.

Наприклад, якщо точність вказана в усіх чотирьох місцях, використовується те, що має найвищий пріоритет (точність, вказана у PUB).

примітка

Хоча точність, вказана у PUB та в run, має вищий пріоритет, завдання завершиться з помилкою, якщо twirling увімкнено і добуток num_randomizations та shots_per_randomization менший за кількість shots, необхідних для досягнення вказаної точності. У такому випадку Estimator не може розподілити shots між вказаними num_randomizations.

примітка

Точність і використання QPU пов'язані обернено. Тобто, що нижча точність — то більше QPU-часу потрібно для виконання.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('dab7ljjvpcac73ddekgg', 'estimator')>

Вимкнення всього пом'якшення та придушення помилок​

Ти можеш вимкнути все пом'якшення та придушення помилок, наприклад, якщо проводиш дослідження власних методів пом'якшення. Для цього встанови resilience_level = 0.

Приклад:

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator

# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()

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

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

Доступні параметри​

Наступна інформація документує параметри з останньої версії qiskit-ibm-runtime. Щоб переглянути старіші версії параметрів, відвідай довідник API qiskit-ibm-runtime та вибери попередню версію.

default_shots

Загальна кількість shots для кожної схеми в кожній конфігурації.

Варіанти: Ціле число >= 0

За замовчуванням: None

Документація API default_shots

default_precision

Точність за замовчуванням для будь-якого PUB або виклику run(), що не вказує власну.

Варіанти: Float > 0

За замовчуванням: 0.015625 (1 / sqrt(4096))

Документація API default_precision

dynamical_decoupling

Керування налаштуваннями пом'якшення помилок динамічного роз'єднання.

Документація API dynamical_decoupling

dynamical_decoupling.enable

Варіанти: True, False

За замовчуванням: False

dynamical_decoupling.extra_slack_distribution

Варіанти: middle, edges

За замовчуванням: middle

dynamical_decoupling.scheduling_method

Choices: asap, alap Default: alap

dynamical_decoupling.sequence_type

Choices: XX, XpXm, XY4 Default: XX

dynamical_decoupling.skip_reset_qubits

Choices: True, False Default: False

environment

Документація API environment

environment.job_tags

Список тегів.

Варіанти: None

За замовчуванням: None

environment.log_level

Варіанти: DEBUG, INFO, WARNING, ERROR, CRITICAL

За замовчуванням: WARNING

environment.private

Варіанти: True, False

За замовчуванням: False

execution

Документація API execution

execution.init_qubits

Чи скидати кубіти до основного стану для кожного shot.

Варіанти: True, False

За замовчуванням: True

execution.rep_delay

Затримка між вимірюванням і наступною квантовою схемою.

Варіанти: Значення в діапазоні, наданому backend.rep_delay_range

За замовчуванням: Визначається backend.default_rep_delay

max_execution_time

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

Варіанти: Ціле число секунд у діапазоні [1, 10800]

За замовчуванням: 10800 (3 години)

resilience

Розширені параметри стійкості для тонкого налаштування стратегії стійкості.

Документація API resilience

resilience.layer_noise_model

Choices: Sequence[LayerNoiseModel]

За замовчуванням: None

resilience.measure_mitigation

Варіанти: True, False

За замовчуванням: True

resilience.measure_noise_learning

Параметри для навчання шуму вимірювань.

Документація API resilience.measure_noise_learning

resilience.measure_noise_learning.num_randomizations

Варіанти: Ціле число >= 1

За замовчуванням: 32

resilience.pec_mitigation

Варіанти: True, False

За замовчуванням: False

resilience.pec

Параметри пом'якшення імовірнісного скасування помилок.

Документація API resilience.pec

resilience.pec.max_overhead

Варіанти: None, Ціле число >= 1

За замовчуванням: 100

resilience.pec.noise_gain

Варіанти: auto, float у діапазоні [0, 1]

За замовчуванням: auto

resilience.zne_mitigation

Варіанти: True, False

За замовчуванням: False

resilience.zne
resilience.zne.amplifier

Варіанти: gate_folding, gate_folding_front, gate_folding_back, pea

За замовчуванням: gate_folding

resilience.zne.extrapolated_noise_factors

Варіанти: Список float

За замовчуванням: [0, *noise_factors]

resilience.zne.extrapolator

Варіанти: Один або кілька з: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

За замовчуванням: (exponential, linear)

resilience.zne.noise_factors

Варіанти: Список float; кожен float >= 1

За замовчуванням: (1, 1.5, 2) для PEA, та (1, 3, 5) в інших випадках

resilience_level

Рівень стійкості до помилок. Вищі рівні дають точніші результати ціною більшого часу обробки. Дивись розділ рівні стійкості у темі «Управління шумом», щоб дізнатися більше.

Варіанти: 0, 1, 2

За замовчуванням: 1

Документація API resilience_level

simulator

Параметри для передачі при симуляції бекенду

Документація API simulator

simulator.basis_gates

Варіанти: Список назв базових вентилів для розгортання

За замовчуванням: Набір усіх базових вентилів, підтримуваних симулятором Qiskit Aer

simulator.coupling_map

Варіанти: Список орієнтованих двокубітних взаємодій

За замовчуванням: None, що означає відсутність обмежень зв'язності (повна зв'язність).

simulator.noise_model

Варіанти: Модель шуму Qiskit Aer NoiseModel або її представлення

За замовчуванням: None

simulator.seed_simulator

Варіанти: Ціле число

За замовчуванням: None

twirling

Параметри twirling

Документація API twirling

twirling.enable_gates

Варіанти: True, False

За замовчуванням: False

twirling.enable_measure

Варіанти: True, False

За замовчуванням: True

twirling.num_randomizations

Варіанти: auto, Ціле число >= 1

За замовчуванням: auto

twirling.shots_per_randomization

Варіанти: auto, Ціле число >= 1

За замовчуванням: auto

twirling.strategy

Варіанти: active, active-circuit, active-accum, all

За замовчуванням: active-accum

experimental

Експериментальні параметри, якщо доступні.

Сумісність функцій​

Певні функції runtime не можна використовувати разом в одному завданні. Клацни відповідний елемент, щоб переглянути список функцій, несумісних з вибраною функцією:

Дробові вентилі

Несумісне з:

  • Twirling вентилів
  • PEA
  • PEC
ZNE зі складанням вентилів

Може не працювати при використанні власних вентилів. Несумісне з:

  • PEA
  • PEC
Twirling вентилів

Несумісне з:

  • Дробовими вентилями
  • Stretches

Інші примітки:

  • Twirling вимірювань можна застосовувати лише до термінальних вимірювань.
  • Не працює із заплутувальними вентилями, що не належать до групи Кліффорда.
PEA

Несумісне з:

  • Дробовими вентилями
  • ZNE зі складанням вентилів
  • PEC
PEC

Несумісне з:

  • Дробовими вентилями
  • ZNE зі складанням вентилів
  • PEA

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

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