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

IBM Circuit function

Примітка
  • Qiskit Functions — це експериментальна функція, доступна лише користувачам тарифних планів IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API). Вони мають статус попереднього релізу та можуть змінюватися.

Огляд

IBM® Circuit function приймає абстрактні PUB'и як вхідні дані й повертає пом'якшені очікувані значення як результат. Ця circuit function включає автоматизований і налаштований конвеєр, що дозволяє дослідникам зосередитися на відкритті алгоритмів і застосунків.

Опис

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

IBM Circuit function

Початок роботи

Автентифікуйся за допомогою свого API-ключа і вибери Qiskit Function таким чином. (Цей фрагмент коду передбачає, що ти вже зберіг свій акаунт у локальному середовищі.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

Приклад

Щоб почати, спробуй цей базовий приклад:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

Перевір статус завдання Qiskit Function або отримай результати таким чином:

print(job.status())
result = job.result()
QUEUED

Результати мають той самий формат, що й результат Estimator:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

Вхідні дані

Перегляньте таблицю нижче, де наведено всі вхідні параметри, які приймає IBM Circuit function. Подальший розділ Параметри детальніше описує доступні options.

НазваТипОписОбов'язковоЗа замовчуваннямПриклад
backend_namestrНазва backend'у для виконання запиту.ТакН/Дibm_fez
pubsIterable[EstimatorPubLike]Ітерований набір абстрактних PUB-подібних (primitive unified bloc) об'єктів, таких як кортежі (circuit, observables) або (circuit, observables, parameter_values). Дивись Огляд PUB'ів для отримання додаткової інформації. Схеми можуть бути абстрактними (не-ISA).ТакН/Д(circuit, observables, parameter_values)
optionsdictВхідні параметри. Дивись розділ Параметри для отримання деталей.НіДивись розділ Параметри для деталей.{"optimization_level": 3}
instancestrХмарна назва ресурсу (CRN) інстансу для використання у вказаному форматі.НіВибирається випадково, якщо твій акаунт має доступ до кількох інстансів.CRN

Параметри

Структура

Подібно до примітивів Qiskit Runtime, параметри для IBM Circuit function можна вказувати у вигляді вкладеного словника. Часто використовувані параметри, такі як optimization_level та mitigation_level, знаходяться на першому рівні. Інші, більш просунуті параметри згруповано за різними категоріями, наприклад resilience.

Значення за замовчуванням

Якщо ти не вказуєш значення для параметра, використовується значення за замовчуванням, встановлене сервісом.

Рівень пом'якшення

IBM Circuit function також підтримує mitigation_level. Рівень пом'якшення вказує, скільки придушення та пом'якшення помилок застосовувати до завдання. Вищі рівні генерують точніші результати коштом більшого часу обробки. Ступінь зменшення помилок залежить від застосованого методу. Рівень пом'якшення абстрагує детальний вибір методів пом'якшення та придушення помилок, дозволяючи користувачам оцінювати компроміс між вартістю та точністю, прийнятний для їхнього застосунку. У таблиці нижче наведено відповідні методи для кожного рівня.

примітка

Попри схожість назв, mitigation_level застосовує інші техніки, ніж ті, що використовуються resilience_level в Estimator.

Подібно до resilience_level в Qiskit Runtime Estimator, mitigation_level визначає базовий набір відібраних параметрів. Будь-які параметри, які ти вказуєш вручну на додаток до рівня пом'якшення, застосовуються поверх базового набору параметрів, визначеного рівнем пом'якшення. Тому теоретично можна встановити рівень пом'якшення рівним 1, але потім вимкнути пом'якшення вимірювань, хоча це не рекомендується.

Рівень пом'якшенняТехніка
1 [За замовчуванням]Dynamical decoupling + measurement twirling + TREX
2Рівень 1 + gate twirling + ZNE через gate folding
3Рівень 1 + gate twirling + ZNE через PEA

Наступний приклад демонструє встановлення рівня пом'якшення:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

Усі доступні параметри

На додаток до mitigation_level, IBM Circuit function також надає певну кількість розширених параметрів, що дозволяють тонко налаштувати компроміс між вартістю та точністю. У таблиці нижче наведено всі доступні параметри:

ПараметрПідпараметрПід-підпараметрОписЗначенняЗа замовчуванням
default_precisionТочність за замовчуванням для будь-якого PUB або виклику run(),
який не вказує власну.
Кожен вхідний PUB може вказати свою точність. Якщо методу run() передано точність, то це значення використовується для всіх PUB'ів у виклику run(), які не вказали свою.
float > 00.015625
max_execution_timeМаксимальний час виконання в секундах, що базується
на використанні QPU (не на реальному часі). Використання QPU — це
час, протягом якого QPU присвячено обробці твого завдання. Якщо завдання перевищує цей ліміт, воно примусово скасовується.
Ціле число секунд у діапазоні [1, 10800]
mitigation_levelСкільки придушення та пом'якшення помилок застосовувати. Дивись розділ Рівень пом'якшення для отримання додаткової інформації про методи, що використовуються на кожному рівні.1 / 2 / 31
optimization_levelСкільки оптимізації виконувати для схем. Вищі рівні генерують більш оптимізовані схеми коштом більшого часу транспіляції.1 / 2 / 32
dynamical_decouplingenableЧи вмикати dynamical decoupling. Дивись Техніки придушення та пом'якшення помилок для пояснення методу.True/FalseTrue
sequence_typeЯку послідовність dynamical decoupling використовувати.
* XX: використовує послідовність tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: використовує послідовність tau/2 - (+X) - tau - (-X) - tau/2
* XY4: використовує послідовність
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesЧи застосовувати twirling двокубітних Clifford Gate.True/FalseFalse
enable_measureЧи вмикати twirling вимірювань.True/FalseTrue
resiliencemeasure_mitigationЧи вмикати метод пом'якшення помилок вимірювань TREX. Дивись Техніки придушення та пом'якшення помилок для пояснення методу.True/FalseTrue
zne_mitigationЧи вмикати метод пом'якшення помилок Zero Noise Extrapolation. Дивись Техніки придушення та пом'якшення помилок для пояснення методу.True/FalseFalse
zneamplifierЯку техніку використовувати для підсилення шуму. Одна з:
- gate_folding (за замовчуванням) використовує folding двокубітних Gate для підсилення шуму. Якщо коефіцієнт шуму вимагає підсилення лише підмножини Gate, то ці Gate вибираються випадково.

- gate_folding_front використовує folding двокубітних Gate для підсилення шуму. Якщо коефіцієнт шуму вимагає підсилення лише підмножини Gate, то ці Gate вибираються з початку топологічно впорядкованого DAG-схеми.

- gate_folding_back використовує folding двокубітних Gate для підсилення шуму. Якщо коефіцієнт шуму вимагає підсилення лише підмножини Gate, то ці Gate вибираються з кінця топологічно впорядкованого DAG-схеми.

- pea використовує техніку Probabilistic error amplification (PEA) для підсилення шуму. Дивись Техніки придушення та пом'якшення помилок для пояснення методу.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsКоефіцієнти шуму для підсилення шуму.список чисел float; кожне float >= 1(1, 1.5, 2) для PEA, та (1, 3, 5) в інших випадках.
extrapolatorКоефіцієнти шуму для оцінки моделей екстраполяції. Цей параметр жодним чином не впливає на виконання або підгонку моделі; він лише визначає точки, у яких об'єкти extrapolator оцінюються та повертаються у полях даних evs_extrapolated та stds_extrapolated.одне або кілька з exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationЧи вмикати метод пом'якшення помилок Probabilistic Error Cancellation. Дивись Техніки придушення та пом'якшення помилок для пояснення методу.True/FalseFalse
pecmax_overheadМаксимально допустимі накладні витрати на вибірку схем, або None без максимуму.None/ ціле число >1100

У наступному прикладі встановлення рівня пом'якшення рівним 1 спочатку вимикає ZNE-пом'якшення, але встановлення zne_mitigation в True перевизначає відповідні налаштування з mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Вихідні дані

Результатом Circuit function є PrimitiveResult, який містить два поля:

  • Один або більше об'єктів PubResult. Їх можна індексувати безпосередньо з PrimitiveResult.

  • Метадані на рівні завдання.

Кожен PubResult містить поля data та metadata.

  • Поле data містить щонайменше масив очікуваних значень (PubResult.data.evs) та масив стандартних похибок (PubResult.data.stds). Воно також може містити більше даних залежно від використаних параметрів.

  • Поле metadata містить метадані на рівні PUB (PubResult.metadata).

Наступний фрагмент коду описує формат PrimitiveResult (та пов'язаного PubResult).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Отримання повідомлень про помилки

Якщо статус твого завдання — ERROR, використовуй job.result() для отримання повідомлення про помилку, щоб допомогти з налагодженням:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Отримання підтримки

Зверніться до підтримки IBM Quantum та надайте наступну інформацію:

  • Ідентифікатор завдання Qiskit Function (qiskit-ibm-catalog), job.job_id
  • Детальний опис проблеми
  • Будь-які відповідні повідомлення про помилки або коди
  • Кроки для відтворення проблеми

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

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