Швидкий старт з Estimator
Примітив Estimator обчислює очікувані значення для одного або кількох спостережуваних щодо станів, підготовлених квантовими схемами. Схеми можуть бути параметризованими, якщо значення параметрів також надаються як вхідні дані для примітива.
Цей примітив має кілька вбудованих технік пом'якшення та придушення помилок, зокрема динамічне роз'єднання, Pauli-twirling, gate-folding ZNE, PEA та PEC. Він також підтримує опцію resilience_level, яка дозволяє легко налаштовувати компроміс між вартістю та точністю.
Кроки в цій темі описують, як налаштувати Estimator, вивчити доступні опції для його конфігурації та викликати його в програмі.
Нові реалізації інтерфейсів Qiskit SamplerV2 та EstimatorV2 було представлено в qiskit-ibm-runtime v0.50.0. Ці клієнтські примітиви виконують більшу частину попередньої обробки та постобробки на стороні клієнта та делегують виконання примітиву Executor. Виконання на стороні клієнта забезпечує більшу прозорість, швидший зворотний зв'язок під час налагодження та точніший контроль.
Оскільки вони реалізують той самий API, ці клієнтські примітиви значною мірою є прямою заміною застарілих серверних примітивів, з єдиною зміною — оператором імпорту. Докладніше див. у посібнику Міграція з серверних на клієнтські Sampler та Estimator.
Версії пакетів
Код на цій сторінці було розроблено з використанням таких вимог. Рекомендуємо використовувати ці або новіші версії.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
Кроки для використання примітива Estimator
1. Ініціалізація акаунту
Спочатку тобі потрібно ініціалізувати свій акаунт. Потім можна обрати QPU, який хочеш використовувати для обчислення очікуваного значення.
Виконай кроки в темі Налаштування акаунту IBM Cloud, якщо акаунту ще немає.
Щоб використовувати нещодавно підтримані дробові вентилі, встанови use_fractional_gates=True при запиті backend від екземпляра QiskitRuntimeService. Наприклад:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=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
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
print(backend.name)
ibm_fez
2. Створення схеми та спостережуваного
Тобі потрібні щонайменше одна схема та одна спостережувана як вхідні дані для примітива Estimator.
from qiskit.circuit.library import qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp
entanglement = [tuple(edge) for edge in backend.coupling_map.get_edges()]
observable = SparsePauliOp.from_sparse_list(
[("ZZ", [i, j], 0.5) for i, j in entanglement],
num_qubits=backend.num_qubits,
)
circuit = qaoa_ansatz(observable, reps=2)
# The circuit is parametrized, so we will define the parameter values for execution
param_values = [0.1, 0.2, 0.3, 0.4]
Схему та спостережувану потрібно перетворити, щоб використовувати лише інструкції, підтримувані QPU (що називаються схемами instruction set architecture (ISA)). Використовуй транспілятор для цього.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])
3. Ініціалізація IBM Quantum Estimator
При ініціалізації Estimator використовуй параметр mode, щоб вказати режим, в якому хочеш запускати. Можливі значення: об'єкти batch, session або backend для пакетного, сесійного та режиму виконання завдання відповідно. Докладніше див. у Вступ до режимів виконання IBM Quantum Compute Service. Зверни увагу, що користувачі Open Plan не можуть надсилати завдання в режимі Session.
# 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
estimator = Estimator(mode=backend)
4. Виклик Estimator та отримання результатів
Далі викличи метод run() для обчислення очікуваних значень для вхідних схем та спостережуваних. Схема, спостережувана та необов'язкові набори значень параметрів передаються як кортежі primitive unified bloc (PUB).
job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: dab7lfurrl7c7386gjn0
>>> Job Status: QUEUED
result = job.result()
print(f">>> {result}")
print(f" > Expectation value: {result[0].data.evs}")
print(f" > Metadata: {result[0].metadata}")
>>> PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': False, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
> Expectation value: 28.60306448415693
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
Наступні кроки
- Дізнайся, як тестувати локально перед запуском на квантових комп'ютерах.
- Переглянь детальні приклади.
- Попрактикуйся з примітивами, пройшовши урок про функцію витрат у IBM Quantum Learning.
- Дізнайся, як транспілювати локально в розділі Транспіляція.
- Спробуй посібник Порівняння налаштувань транспілятора.
- Дізнайся, як використовувати опції примітивів.
- Перегляни API для опцій Estimator.