Перехід від хмарних симуляторів до локальних
У квантових обчисленнях вибір між симуляторами та квантовим залізом відіграє ключову роль для прогресу в цій галузі. Хоча симулятори корисні для тестування й налагодження, в епоху квантової корисності розвиток квантових технологій та промисловості потребує реального заліза. У рамках переходу до квантової корисності хмарні симулятори IBM Quantum® було виведено з експлуатації 15 травня 2024 року. Цей посібник детально пояснює причини виведення та описує, як перейти від хмарних симуляторів (наприклад, ibmq_qasm_simulator) до локальних.
Чому хмарні симулятори виводяться з експлуатації?
Хмарні симулятори виводяться з експлуатації з кількох причин:
Симулят ори мають обмеження
Симулятори можуть бути корисними, але вони надто обмежені для досліджень або експериментів:
-
Симулятори цінні для розуміння QPU (квантових процесорів) невеликого масштабу, однак їхня корисність вичерпується приблизно на 50 кубітах — навіть за наявності високопродуктивних суперкомп'ютерів. Цю стелю зумовлює експоненційне зростання обчислювальних ресурсів, необхідних для симуляції більших квантових комп'ютерів (докладне пояснення дивись у статті Massively parallel quantum computer simulator, eleven years later). Дослідження квантових комп'ютерів на 100 кубітів і більше потребує реального заліза.
-
Хоча деякі симулятори пропонують моделі шуму, вловити всю динаміку реального QPU — надзвичайно складна задача. Квантове залізо дає дослідникам можливість безпосередньо зіткнутися з викликами, притаманними квантовим комп'ютерам: шумом, помилками та декогеренцією — у реалістичному тестовому середовищі.
Робота з квантовим залізом розвиває унікальні навички
Взаємодія з квантовим залізом формує навички та досвід, недосяжні лише при роботі з симуляторами:
-
Безпосередня взаємодія з квантовим залізом розвиває навички, оскільки для надійних обчислень потрібно реалізовувати або застосовувати техніки пом'якшення чи придушення помилок.
-
Практичний досвід роботи з квантовим залізом формує глибше розуміння квантових явищ і того, як адаптувати алгоритми до характеристик квантових процесорів.
-
Робота з квантовим залізом дає практичне розуміння викликів і можливостей квантових обчислень, підвищуючи здатність розробників стимулювати інновації в галузі.
Алгоритми слід адаптувати для квантового заліза
Успішні квантові алгоритми потрібно адаптувати, щоб використати можливості квантового заліза, оптимізуючи продуктивність і ефективність.
-
Квантове залізо забезпечує точніше відображення реальних QPU порівняно з симуляторами.
-
Тонке налаштування алгоритмів для квантового заліза передбачає коригування анзацу, реалізацій Circuit, параметрів і конфігурації для максимальної продуктивності. Цей процес найкраще здійснювати через безпосередні експерименти з квантовим залізом.
Коли варто використовувати симулятори?
Квантові симулятори варто використовувати для розробки та тестування програм перед їх тонким налаштуванням і запуском на квантовому залізі. Локальні симулятори справляються з цим завданням з хорошою продуктивністю та ефективністю. Схеми Кліффорда можна симулювати дуже ефективно, а результати — верифікувати, що є корисним способом підвищити довіру до експерименту.
Локальний режим тестування не має вбудованого придушення або пом'якшення помилок. Натомість ці параметри потрібно вказувати явно. Детальніше дивись у Налаштування пом'якшення помилок для Qiskit Runtime.
Перехід до локальних симуляторів
З версії qiskit-ibm-runtime 0.22.0 і пізніших можна використовувати локальний режим тестування замість хмарних симуляторів. Залежно від потреб, є кілька способів застосування локального режиму тестування. Для початку вкажи один із фейкових Backend у qiskit_ibm_runtime.fake_provider або вкажи Backend Qiskit Aer під час ініціалізації примітива чи сесії.
Рекомендації щодо вибору симулятора
Використовуй таблицю нижче, щоб вибрати симулятор.
| Симулятор | Fake Backends | AerSimulator | Симуляція Кліффорда |
|---|---|---|---|
| Призначення | Імітує конкретні QPU IBM® за допомогою знімків | Симуляція загального призначення з високою продуктивністю | Ефективна симуляція для Circuit Кліффорда |
| Модель шуму | Автоматично застосовує модель шуму зі знімків QPU | Довільна або на основі калібрувальних даних реального QPU | Ідеальна для симуляцій без шуму |
| Розмір Circuit | Обмежений можливостями імітованого QPU | Може обробляти більші схеми | Підходить для дуже великих схем (сотні кубітів) |
| Результати | Помірний час виконання для тестів конкретного QPU | Менший час виконання для широкого діапазону симуляцій | Надзвичайно швидко, підходить для стабілізаторних схем |
| Сценарій використання | Тестування Transpiler та поведінки конкретного QPU | Загальна розробка, довільні моделі шуму | Великі стабілізаторні Circuit, виправлення помилок |
Для більшості користувачів AerSimulator є хорошим вибором завдяки своїй гнучкості та продуктивності. Однак якщо твоя робота орієнтована на конкретний QPU, фейковий Backend може бути кращим варіантом.
Fake backends
Фейкові backends імітують поведінку QPU IBM за допомогою знімків. Знімки містять важливу інформацію про QPU: карту зв'язків, базові Gate та властивості кубітів — що корисно для тестування Transpiler і виконання шумних симуляцій QPU. Модель шуму зі знімка застосовується автоматично під час симуляції.
Приклад:
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# 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
Можна використовувати локальний режим тестування з симуляторами Qiskit Aer, який забезпечує більш продуктивну симуляцію, що здатна обробляти більші схеми та довільні моделі шуму. Він також підтримує режим симуляції Кліффорда, який може ефективно симулювати Circuit Кліффорда з великою кількістю кубітів.
Приклад із сесіями, без шуму:
Наступний блок коду поверне помилку для користувачів плану Open Plan, оскільки він використовує сесії. Навантаження на плані Open Plan можуть виконуватися лише в режимі завдань або пакетному режимі.
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# 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()
result = sampler.run([isa_qc]).result()
Щоб симулювати з шумом, вкажи QPU (квантове залізо) і передай його в Aer. Aer будує модель шуму на основі калібрувальних даних цього QPU та ініціалізує Backend Aer з цією моделлю. За бажанням, ти можеш побудувати модель шуму самостійно.
Приклад із шумом:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Specify a QPU to use for the noise model
real_backend = service.backend("ibm_brisbane")
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 Кліффорда можна симулювати ефективно з верифікованими результатами, симуляція Кліффорда є дуже корисним інструментом. Докладний приклад дивись у Ефективна симуляція стабілізаторних схем за допомогою примітивів Qiskit Aer.
Приклад:
import numpy as np
from qiskit.circuit.library import EfficientSU2
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = EfficientSU2(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_circuit = pm.run(circuit)
sampler = Sampler(mode=aer_sim)
result = sampler.run([(isa_circuit, params)]).result()