Квантовые вычисления
Qiskit: программирование квантовых компьютеров
Цели урока
- Установить Qiskit и понять структуру его пакетов
- Строить квантовые схемы с однокубитными и двухкубитными гейтами
- Запускать схемы на AerSimulator и StatevectorSimulator
- Отправлять задачи на реальные IBM квантовые процессоры
Квантовые алгоритмы на бумаге прекрасны. Как их запустить? Qiskit превратил квантовое программирование из академической экзотики в доступный инструмент: несколько строк Python - и схема летит на реальный квантовый процессор в IBM Cloud.
- **Фармацевтика:** Pfizer использует IBM Quantum для симуляции молекул
- **Финансы:** JPMorgan исследует квантовые алгоритмы оптимизации портфеля через Qiskit
- **Исследования:** 400+ научных статей в год используют Qiskit как основной инструмент
- **Образование:** более 500 университетов включили Qiskit в курсы квантовых вычислений
Qiskit: основы и архитектура
В 2017 году IBM открыла облачный доступ к реальным квантовым процессорам и выпустила **Qiskit** - Python-библиотеку с открытым исходным кодом. Сегодня это самый популярный инструмент для квантового программирования.
Qiskit разбит на пакеты. Ядро - `qiskit-terra`: схемы, гейты и компиляция. Поверх него работают симуляторы (`qiskit-aer`) и доступ к реальному железу (`qiskit-ibm-runtime`).
Qiskit 1.0 (2024) - стабильный релиз с гарантией совместимости API. Старые туториалы до 1.0 могут использовать устаревшие `execute()` и `Aer.get_backend()` - в новых версиях API изменился.
За что отвечает пакет qiskit-terra?
Quantum Circuits в Qiskit
`QuantumCircuit` - центральный объект Qiskit. Это последовательность гейтов, применяемых к кубитам. Схема описывает алгоритм абстрактно - без привязки к конкретному железу.
Параметризованные схемы (с `Parameter`) нужны для вариационных алгоритмов VQE и QAOA - параметры подставляются перед каждым запуском оптимизатором.
Зачем нужен qc.barrier() в Qiskit?
Симуляторы: Aer и StatevectorSimulator
Реальный квантовый процессор - дефицитный и шумный ресурс. Для разработки и отладки используют **Qiskit Aer** - пакет высокопроизводительных симуляторов на CPU и GPU.
Два главных симулятора: `AerSimulator` считает распределение измерений при заданном числе shots; `StatevectorSimulator` хранит полный вектор состояния - идеальный квантовый компьютер, но требует 2^n комплексных чисел памяти.
Aer умеет эмулировать шум реального железа. Модель шума загружают с конкретного IBM-устройства через `FakeBackend`, и симуляция воспроизводит его реальное поведение.
При n=30 кубитах StatevectorSimulator требует 2^30 = 10^9 комплексных чисел - около 16 GB памяти. При n=40 это уже 16 TB. Для больших схем используют MPS-симулятор (матричное произведение состояний).
StatevectorSimulator хранит 2^n комплексных чисел (float64, 16 байт). Для n=20 это примерно:
IBM Quantum Experience и запуск на железе
IBM предоставляет бесплатный облачный доступ к реальным квантовым процессорам. Бесплатный тариф - 10 минут QPU-времени в месяц, достаточно для экспериментов. Процессоры от 5 до 127 кубитов.
**Транспиляция** обязательна: реальные устройства поддерживают ограниченный набор нативных гейтов (CX, RZ, X, SX) и ограниченную связность кубитов. `transpile()` добавляет SWAP-гейты для физически несвязанных пар.
Бесплатная очередь на IBM Quantum может ждать часы. Используйте `FakeBackend` для отладки и отправляйте на реальное железо только финальные эксперименты.
Зачем вызывать transpile() перед отправкой схемы на реальное IBM-устройство?
Qiskit
- qiskit-terra - ядро: схемы, гейты, транспиляция
- qiskit-aer - симуляторы: AerSimulator (shots) и StatevectorSimulator (амплитуды)
- QuantumCircuit - основной объект, описывает последовательность гейтов
- Параметризованные схемы (Parameter) нужны для VQE и QAOA
- transpile() конвертирует схему под физическое устройство
- IBM Quantum: 10 мин/мес бесплатно, выбор через service.least_busy()
Связанные темы
Qiskit - инструмент для реализации квантовых алгоритмов из предыдущих уроков.
- Квантовые гейты — Строительные блоки Qiskit-схем
- Алгоритм Гровера — Классический пример реализации в Qiskit
- Cirq и другие фреймворки — Альтернативы Qiskit
Вопросы для размышления
- Почему транспиляция с optimization_level=3 может ухудшить результат на зашумлённом железе?
- В каких случаях StatevectorSimulator предпочтительнее AerSimulator?
- Как выбор маппинга кубитов влияет на количество SWAP-гейтов и качество результата?