Как запустить квантовую программу: пример Qiskit по шагам
Установка Qiskit, программа для двух кубитов и проверка результата. Воспроизводимый пример локального симулятора с версиями, кодом и объяснением измерений.
Первую квантовую программу удобно запустить на обычном ноутбуке. Потребуются Python и библиотека Qiskit: локальный симулятор, программа для расчёта поведения квантовой системы, выполнит небольшую схему без регистрации в облаке. Разберём, как запустить квантовую программу для двух кубитов, квантовых единиц информации, и проверить результат, прежде чем переходить к реальному квантовому процессору.
Программа выдаст строки 00 и 11. Почему именно их, почему результаты почти поровну и откуда берётся небольшая разница? Ответы на эти вопросы важнее успешной установки пакета. Код ниже содержит проверки, а после запуска мы разберём каждую часть вывода.

Две стеклянные формы на тёмной поверхности.
Что именно мы запускаем
Программа готовит пару Белла, запутанное состояние двух кубитов: состояние пары нельзя разделить на два независимых состояния её частей. Квантовый вентиль означает операцию над кубитом. Вентиль H подготавливает первый кубит так, что при обычном считывании получились бы 0 или 1 с равными вероятностями. Затем управляемый X связывает изменение второго кубита с состоянием первого. В итоге обычное измерение обоих кубитов даёт либо 00, либо 11, с вероятностью по одной второй.
Такая схема подходит для первого упражнения, потому что ожидаемый результат прост и проверяем. При этом совпадение двух битов в одной таблице само по себе не доказывает экспериментальную запутанность. Для такого доказательства нужны дополнительные измерения в других режимах считывания, или базисах, и соответствующий анализ. Здесь мы изучаем программу и идеальную модель.
Вводное руководство IBM использует небольшую схему для знакомства с Qiskit. Мы фиксируем версию библиотеки и добавляем проверку допустимых исходов, чтобы отделить успешный запуск от осмысленного результата.

Схема цепи для пары Белла: подготовка, запутывание и измерение.
Подготовьте отдельную среду
Для приведённой проверки использовались Python 3.12 и Qiskit 2.5.2. Это зафиксированная рабочая конфигурация примера, а не требование установить именно такой Python на любой компьютер. Требования выбранного выпуска Qiskit проверяйте на странице версии 2.5.2 в PyPI.
Создайте отдельную папку и виртуальную среду venv, которая хранит свой набор Python-пакетов. В Linux или macOS выполните:
mkdir quantum-first
cd quantum-first
python3 -m venv .venv
.venv/bin/python -m pip install --only-binary=:all: "qiskit==2.5.2"
В PowerShell на Windows команды для интерпретатора отличаются:
mkdir quantum-first
cd quantum-first
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --only-binary=:all: "qiskit==2.5.2"
Команда py -3.12 предполагает установленный Python 3.12 и доступную программу запуска py. Если ваша установка использует другой путь, укажите соответствующий интерпретатор. Не меняйте политику исполнения PowerShell ради активации среды: в примере мы обращаемся к её Python напрямую.
Параметр --only-binary=:all: разрешает готовые wheel-пакеты, устанавливаемые без сборки из исходного кода. Если для вашей платформы подходящего пакета нет, установка остановится. В таком случае проверьте поддерживаемую архитектуру и версию Python. Не убирайте ограничение автоматически, не разобравшись в причине ошибки.
Среда venv разделяет наборы Python-пакетов. Она не ограничивает доступ запущенной программы к вашим документам или сети. Её назначение и способы прямого вызова интерпретатора описаны в документации Python.
Создайте программу для двух кубитов
Сохраните следующий текст в файл bell_demo.py внутри папки quantum-first:
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
shots = 1024
sampler = StatevectorSampler()
result = sampler.run([circuit], shots=shots).result()[0]
counts = result.data.meas.get_counts()
assert sum(counts.values()) == shots
assert set(counts).issubset({"00", "11"})
print("Число измерений:", shots)
print("Результаты:", dict(sorted(counts.items())))
Здесь QuantumCircuit(2) создаёт схему из двух кубитов. Числа 0 и 1 в вызовах обозначают номера кубитов. В cx(0, 1) первый аргумент задаёт управляющий кубит, второй целевой. measure_all() добавляет измерения и классический регистр с именем meas, к которому обращается последняя часть программы. В строках результата этой схемы правый бит относится к кубиту 0, левый к кубиту 1: таков порядок отображения битов Qiskit. Это станет заметно, когда вы измените только один кубит.
shots=1024 задаёт число повторений измерения. Параметр seed фиксирует начальное состояние генератора псевдослучайных чисел в симуляторе, если его задать. Это помогает повторять пример в той же среде. Фиксированный seed не обещает идентичные числа после произвольного обновления всех библиотек.
Выполните код и проверьте вывод
В Linux или macOS:
.venv/bin/python bell_demo.py
В PowerShell:
.\.venv\Scripts\python.exe bell_demo.py
При локальной проверке получен такой вывод для указанной среды:
Число измерений: 1024
Результаты: {'00': 515, '11': 509}
Сумма частот равна 1024. Оба значения близки к половине выборки, а других исходов нет. Это согласуется с идеальной схемой. Результат относится к классическому симулятору. Квантовый процессор в этой проверке не использовался.
При каждом запуске точные количества будут меняться. Требовать равного числа появлений каждого результата ошибочно: вероятность и частота конечной выборки являются разными величинами. Увеличение числа повторений позволяет исследовать статистическое поведение, но не исправляет неверно составленную схему.
Почему симулятор не является квантовым компьютером
StatevectorSampler рассчитывает вектор состояния, набор комплексных чисел для определения вероятностей, и моделирует результаты измерений на классическом компьютере. В таком исполнении физические кубиты отсутствуют. Документация класса указывает используемое представление и ограничение на измерения внутри схемы.
Для n кубитов полное представление состояния содержит 2^n комплексных амплитуд. Квадрат модуля каждой амплитуды задаёт вероятность соответствующего результата измерения в выбранном базисе. Увеличение n на единицу удваивает их число. Поэтому объём вектора растёт экспоненциально: уже несколько десятков кубитов потребуют гигабайты только для одного вектора, без памяти программы, дополнительных копий и служебных структур. Другие методы симуляции имеют свои условия и компромиссы.
| Вариант исполнения | Где происходит расчёт | Что наблюдаете |
|---|---|---|
| Идеальный локальный симулятор | Обычный компьютер с поддерживаемым процессором | Поведение математической модели |
| Симулятор с моделью шума | Классический компьютер | Поведение выбранной модели ошибок |
| Квантовый процессор в облаке | Физическое устройство провайдера | Результаты конкретного оборудования и его состояния |
Даже реалистичная модель шума не заменяет измерение на устройстве. И наоборот, результат аппаратного запуска не следует сравнивать с идеальным расчётом без учёта схемы, настроек и статистики.
Как перейти к облачному квантовому компьютеру
Переход начинается с выбора доступного устройства и условий доступа. Затем схему адаптируют к поддерживаемым операциям и связям, отправляют задание и сохраняют его идентификатор вместе с результатом. Время ожидания, стоимость и квоты зависят от сервиса и учётной записи.
Для первой практики полезно сохранить локальный пример отдельно. Так вы сравните одну и ту же задачу в двух способах исполнения. При аппаратном запуске запишите имя вычислительного устройства (backend), время выполнения, число измерений и параметры преобразования схемы. Без этой информации таблица результатов быстро теряет контекст.
Не вставляйте API-токен, секретный ключ программного доступа к сервису, в публикуемый файл программы. Используйте способ хранения учётных данных, предусмотренный актуальной документацией провайдера. Само учебное упражнение из этой статьи не требует токена, платной подписки или сетевого доступа после установки библиотек.
Частые вопросы
Почему Python пишет ModuleNotFoundError?
Чаще всего установку и запуск выполняют разными интерпретаторами. Повторите оба действия через путь .venv/bin/python либо .venv\Scripts\python.exe. Проверьте текущую папку и имя файла.
Почему нет ровно 50% каждого результата?
Пятьдесят процентов относится к вероятности в идеальной модели. Программа получает конечную случайную выборку. Разница между частотами в конечной выборке не противоречит этой модели.
Нужна ли видеокарта для первой квантовой программы?
Для схемы из двух кубитов отдельная видеокарта не нужна. Требования к оборудованию растут вместе с размером задачи и выбранным методом симуляции.
Доказывает ли такой пример квантовое преимущество?
Нет. Классический компьютер легко рассчитывает эту небольшую схему. Упражнение знакомит с программированием и проверкой результата, а не демонстрирует преимущество перед классическими алгоритмами.
Следующий шаг после успешного запуска
Измените одну операцию и сначала предскажите результат словами. Затем выполните программу и проверьте ожидание. Например, удалите cx(0, 1) и исследуйте, какие строки остаются возможными. Проверки в коде тоже потребуется изменить под новую схему. Такой подход учит понимать программу, а не только повторять команды установки.