Локальний режим тестування
Версії пакетів
Код на цій сторінці розроблено з використанням наступних залежностей. Рекомендуємо використовувати ці або новіші версії.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
qiskit-aer~=0.17
Використовуй локальний режим тестування (доступний у qiskit-ibm-runtime v0.22.0 або новіших версіях), щоб тестувати програми перед їх налаштуванням і відправкою на справжнє квантове обладнання. Після того як ти перевіриш свою програму в локальному режимі тестування, достатньо лише змінити назву Backend, щоб запустити її на QPU.
Підтримку локального режиму для примітива Executor було запроваджено в qiskit-ibm-runtime v0.50.0.
Щоб скористатися локальним режимом тестування, вкажи один із фейкових Backend з qiskit_ibm_runtime.fake_provider або вкажи Backend Qiskit Aer під час створення примітиву IBM Quantum® або сесії.
-
Фейкові Backend: Фейкові Backend у
qiskit_ibm_runtime.fake_providerімітують поведінку QPU IBM® за допомогою знімків QPU. Знімки QPU містять важливу інформацію про QPU: карту зв'язності, базисні Gate та властивості кубітів — усе це корисно для тестування Transpiler та виконання зашумлених симуляцій QPU. Модель шуму зі знімку застосовується автоматично під час симуляції. -
Симулятор Aer: Симулятори з Qiskit Aer забезпечують більш продуктивну симуляцію, яка може обробляти більші Circuit та власні моделі шуму. Перелік доступних методів симуляції можна переглянути при використанні
AerSimulatorу локальному режимі тестування. Дивись приклад режиму симуляції Кліффорда, який демонструє ефективну симуляцію Circuit Кліффорда з великою кількістю кубітів.Перелік методів симуляції, доступних у Qiskit Aer
Докладніше дивись у документації
AerSimulator.-
"automatic": Метод симуляції за замовчуванням. Автоматично обирає метод симуляції залежно від Circuit та моделі шуму. -
"statevector": Симуляція щільного вектора стану, яка може генерувати вибірки результатів вимірювань з ідеальних Circuit з усіма вимірюваннями в кінці Circuit. Для зашумлених симуляцій кожен shot бере випадково згенерований зашумлений Circuit із моделі шуму. -
"density_matrix": Симуляція матриці густини, яка може генерувати вибірки результатів вимірювань із зашумлених Circuit з усіма вимірюваннями в кінці Circuit. -
"stabilizer": Ефективний симулятор стану стабілізатора Кліффорда, який може симулювати зашумлені Circuit Кліффорда, якщо всі помилки в моделі шуму також є помилками Кліффорда. -
"extended_stabilizer": Наближений симулятор для Circuit Кліффорда + T, що базується на розкладанні стану у ранжований стан стабілізатора. Кількість доданків зростає зі збільшенням кількості non-Clifford (T) Gate. -
"matrix_product_state": Симулятор вектора стану на основі тензорних мереж, що використовує представлення Matrix Product State (MPS) для стану. Це можна робити як із обрізанням, так і без обрізання вимірностей зв'язку MPS залежно від параметрів симулятора. За замовчуванням обрізання не застосовується. -
"unitary": Симуляція щільної унітарної матриці ідеального Circuit. Симулює унітарну матрицю самого Circuit, а не еволюцію початкового квантового стану. Цей метод може симулювати лише Gate; він не підтримує вимірювання, скидання або шум. -
"superop": Симуляція щільної матриці супероператора ідеального або зашумленого Circuit. Симулює матрицю супероператора самого Circuit, а не еволюцію початкового квантового стану. Цей метод може симулювати ідеальні та зашумлені Gate і скидання, але не підтримує вимірювання. -
"tensor_network": Симуляція на основі тензорних мереж, що підтримує як вектор стану, так і матрицю густини. Наразі доступно лише для GPU і прискорюється за допомогою API cuQuantumcuTensorNet.
-
- У локальному режимі тестування можна вказати всі параметри IBM Quantum Compute. З клієнтськими
SamplerіEstimator(запроваджені вqiskit-ibm-runtimev0.50.0) параметри пригнічення та пом'якшення похибок реалізовано локально, тож можна протестувати різні методи пом'якшення похибок локально, перш ніж витрачати час QPU. Приклад дивись у розділі Локальне тестування пом'якшення похибок.
Раніше локальні симулятори з застарілими (серверними) примітивами ігнорували всі параметри, крім shots, оскільки ця обробка відбувалася лише на сервері.
- Рекомендується встановити Qiskit Aer перед використанням фейкових бекендів або симуляторів Aer, виконавши
pip install qiskit-aer. Фейкові бекенди непомітно для користувача використовують симулятори Aer за наявності, щоб скористатися їхньою продуктивністю.
Приклад із фейковими Backend
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_aer": "qiskit-aer", "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.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
# You can use a fixed seed to get fixed results.
options = {"simulator": {"seed_simulator": 42}}
sampler = Sampler(mode=fake_manila, options=options)
result = sampler.run([isa_qc]).result()
Приклади AerSimulator
Приклад із сесіями, без шуму:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import Session
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using AerSimulator.
# Session syntax is supported but ignored because local mode doesn't support sessions.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()
Щоб симулювати з шумом, вкажи QPU (квантове обладнання) і відправ його до Aer. Aer будує модель шуму на основі калібрувальних даних цього QPU та створює Backend Aer з цією моделлю. За бажанням ти можеш побудувати модель шуму самостійно.
QPU може зазнавати впливу різних видів шуму. Модель шуму Qiskit Aer, що використовується тут, симулює лише деякі з них, тому вона, ймовірно, моделює слабший шум, ніж на справжньому QPU.
Докладніше про те, які помилки включаються при ініціалізації моделі шуму з QPU, дивись у довіднику API Aer NoiseModel.
Приклад із шумом:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
service = QiskitRuntimeService()
# Specify a QPU to use for the noise model
real_backend = service.least_busy(operational=True, simulator=False)
aer = AerSimulator.from_backend(real_backend)
# Run the Sampler job locally using AerSimulator.
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc]).result()
Симуляція Кліффорда
Оскільки Circuit Кліффорда можна ефективно симулювати, а результати — перевірити, симуляція Кліффорда є дуже корисним інструментом. Для детального прикладу дивись Ефективна симуляція стабілізаторних Circuit за допомогою примітивів Qiskit Aer.
Приклад:
import numpy as np
from qiskit.circuit.library import efficient_su2
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = efficient_su2(n_qubits)
circuit.measure_all()
rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)
# Tell Aer to use the stabilizer (Clifford) simulation method
aer_sim = AerSimulator(method="stabilizer")
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer_sim)
result = sampler.run([isa_qc]).result()
Локальне тестування пом'якшення похибок
З клієнтськими Sampler і Estimator (запроваджені в qiskit-ibm-runtime v0.50.0) пригнічення та пом'якшення похибок відбуваються на клієнті, а не на сервері. Як наслідок, ці параметри тепер діють у локальному режимі тестування, тож ти можеш експериментувати з різними методами пом'якшення похибок на фейковому бекенді, перш ніж витрачати час QPU.
З застарілими серверними примітивами встановлення такого параметра, як resilience.measure_mitigation, на локальному симуляторі не мало жодного ефекту, оскільки обробка пом'якшення виконувалася лише на сервері. Клієнтські примітиви застосовують цю обробку локально.
Вартість локальної симуляції із шумом зростає експоненційно зі збільшенням кількості кубітів, і більшість ноутбуків не можуть симулювати понад приблизно 32 кубіти. Оскільки методи пригнічення та пом'якшення похибок тепер виконуються локально, вони додають ще більше накладних витрат пам'яті та часу виконання поверх базової симуляції. Щоб зберегти локальне тестування керованим, скористайся одним із таких варіантів:
-
Невеликий фейковий бекенд (наприклад,
FakeManilaV2, використаний нижче). -
Симулятор без шуму.
-
Симуляція Кліффорда, яка масштабується до великої кількості кубітів.
Наступний приклад вмикає пом'якшення похибок вимірювання з Estimator і запускає його на фейковому бекенді. Параметр measure_mitigation = True тепер застосовується до твоїх схем локально.
from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler import generate_preset_pass_manager
# Legacy server-side primitive before qiskit-ibm-runtime v0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime v0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
observable = SparsePauliOp("ZZ")
# Transpile the circuit and observable for the fake backend
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
isa_observable = observable.apply_layout(isa_qc.layout)
# Run the Estimator job locally using FakeManilaV2
estimator = Estimator(mode=fake_manila)
# With the client-side Estimator, this option takes effect locally
estimator.options.resilience.measure_mitigation = True
result = estimator.run([(isa_qc, isa_observable)]).result()
Подальші кроки
- Використовуй клас
Neatдля аналізу впливу шуму на навантаження Estimator. - Переглянь детальні приклади використання Sampler.
- Переглянь детальні приклади використання Estimator.
- Попрактикуйся з примітивами, опрацювавши урок про функцію вартості у IBM Quantum Learning.
- Дізнайся, як виконувати транспіляцію локально, у розділі Transpile.
- Спробуй навчальний посібник Порівняння налаштувань Transpiler.