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

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

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

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

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

Ти можеш використовувати параметри для налаштування примітиву 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, який потім робить копію цих опцій. Таким чином, зміна оригінального словника або екземпляра опцій не впливає на опції, що належать примітиву.

Клас опцій

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

Приклад:

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options 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
from qiskit_ibm_runtime import EstimatorV2 as 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() для масового оновлення.

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

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as 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
from qiskit_ibm_runtime import EstimatorV2 as 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('d7amh42k86tc73a1sa20', 'estimator')>

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

Метод EstimatorV2.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 менший за кількість вимірювань, необхідних для досягнення вказаної точності. У такому випадку EstimatorV2 не може розподілити вимірювання між вказаними num_randomizations.

примітка

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

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as 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('d8286b00bvlc73d1vn50', 'estimator')>

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

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

Приклад:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# 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.callback

Функція зворотного виклику, яка отримує Job ID та Job result.

Варіанти: None

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

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_learning

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

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

resilience.layer_noise_learning.layer_pair_depths

Варіанти: list[int] від 2 до 10 значень у діапазоні [0, 200]

За замовчуванням: (0, 1, 2, 4, 16, 32)

resilience.layer_noise_learning.max_layers_to_learn

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

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

resilience.layer_noise_learning.num_randomizations

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

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

resilience.layer_noise_learning.shots_per_randomization

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

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

resilience.layer_noise_model

Варіанти: NoiseLearnerResult, Sequence[LayerError]

За замовчуванням: 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.measure_noise_learning.shots_per_randomization

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

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

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

seed_estimator

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

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

seed_estimator

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

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

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