Начало работы с исправлением ошибок в QDK

QDK(Microsoft Quantum Development Kit) включает Python средства для разработки и тестирования протоколов исправления квантовых ошибок (QEC). Используйте модуль qdk.ec для анализа кодов исправления ошибок, построения исполняемых протоколов, проверки объявлений протокола и изучения неисправностей схем. Используйте qdk.simulation для запуска логических программ через эти протоколы.

Понимание QDK средств исправления ошибок

Рабочий процесс QDK исправления ошибок использует следующие пакеты и модули:

Component Используйте его для
qodec Определите и сохраните коды, наборы инструкций, гаджеты, слои и полные протоколы QEC.
qdk.ec Анализируйте коды и гаджеты, создавайте базовые qodecs, выводите уравнения и проверяйте объявления протокола.
qdk.simulation Запустите Quantum Intermediate Representation (QIR) программы через qodec и примените декодатор.
qdk.simulation.decoders Выберите встроенный декодировщик синдрома, отслеживание кадров или подключитесь к необязательному deq декодатору.
qdk.qre Оцените пространственные, временные и связанные с ошибками затраты моделей QEC для оценки ресурсов для отказоустойчивых вычислений.

A qodec — это официальное описание исполняемого протокола QEC. Он подключает логические инструкции к физическим цепям через один или несколько уровней. Пакет qodec определяет эту модель данных и её YAML представление. Модуль qdk.ec выводит факты из модели и проверяет, соответствуют ли его объявления его схемам.

Дополнительные сведения см. в qodec обзоре.

Модуль qdk.qre имеет другую цель. Он моделирует затраты ресурсов схемы исправления ошибок. Он не определяет, проверяет или запускает qodec гаджеты. Дополнительные сведения об оценке квантовых ресурсов см. в QDKразделе Что такое средство оценки ресурсов Microsoft Quantum?

Изучите компоненты протокола qodec

Следующие компоненты определяют qodec протокол и поддерживают его выполнение.

Component Description
Code Статический набор стабилизаторов и логических операторов, определяющий пространство кода.
Набор инструкций Логические или физические операции, поддерживаемые слоем qodec .
Приспособление Схема, реализующая инструкцию с помощью операций в следующем нижнем слое.
Слой Сопоставление одного набора инструкций набору инструкций более низкого уровня.
Кодирование Соединение между логическими блоками и кубитами схемы на границе гаджета.
Проверьте Уравнение четности, которое должно быть равно нулю, когда объявленное соотношение выполняется.
Показание Уравнение, которое сопоставляет результаты схемы и знаки кадра с логическим результатом или флагом.
Flag Именованный индикатор, указывающий, соответствует ли инструкция условию приемки.
Дешифратор Компонент, использующий данные синдрома для вывода исправлений и логических результатов.

qodec может содержать несколько слоев. Верхний слой может определять логические операции над закодированными блоками. Гаджеты верхнего слоя могут вызывать инструкции в следующем нижнем слое. Нижний слой содержит физические операции, выполняемые симулятором.

Пример рабочего процесса для протокола

Типичный рабочий процесс состоит из шести шагов. В следующих шагах используются функции и классы из qdk.ec модуля.

  1. Задайте код. Создайте qodec.Code со стабилизаторами и логическими Pauli операторами.
  2. Проанализируйте код. Используйте класс CodeProfile для проверки логических операторов, вычисления синдромов и кодового расстояния.
  3. Создайте или загрузите qodec. Используйте функцию build_qodec для создания базового протокола или загрузки существующего qodec из YAML.
  4. Завершите и провалидируйте протокол. Используйте функцию filled для получения поддерживаемых уравнений проверки и считывания. Используйте функцию audit для поиска противоречивых или неполных объявлений.
  5. Анализировать неисправности цепи. Используйте класс GadgetProfile для проверки логических действий, эффектов сбоя и расстояния гаджета.
  6. Запустите логические цепочки. Скомпилируйте код Q# или OpenQASM в QIR. Передайте QIR и qodec в qdk.simulation.run_qir, затем выберите декодировщик и модель шума.

Следующий код показывает основные объекты в этом рабочем процессе:

import qodec
from qdk import ec
from qdk.simulation import run_qir

code = qodec.Code(
    "C4",
    stabilizers=["X_0 X_1 X_2 X_3", "Z_0 Z_1 Z_2 Z_3"],
    x=["X_0 X_1", "X_0 X_2"],
    z=["Z_0 Z_2", "Z_0 Z_1"],
)

code_profile = ec.CodeProfile(code)
print("Code distance:", code_profile.distance())

protocol = ec.build_qodec(code, strategy="bare-css/v1", strict=False)
print(ec.audit(protocol))

# Compile a logical program to QIR before you call run_qir.
# results = run_qir(qir, qodec=protocol, shots=100)

Стратегия bare-css/v1 в этом примере создает простой базовый протокол без кубитов флагов. Он помогает проверить рабочий процесс, но не гарантирует отказоустойчивость гаджетов. Используйте анализ расстояния между гаджетами перед выбором реализации протокола.

Отделить проверку протокола от анализа ошибок

Аудиты протокола и анализ расстояния оценивают различные аспекты протокола QEC.

  • Аудит протокола проверяет, соответствует ли объявленный протокол своим схемам и уравнениям, если ошибки не возникают.
  • Анализ расстояния определяет минимальное количество разрешенных ошибок или неисправностей схемы, которые могут вызвать необнаруженный логический отказ.

Используйте audit функцию для проверки согласованности без шума. Аудит проверяет алгебру кода, объявления инструкций, операции гаджета, проверки, считывания, флаги, отношения кадров и ссылки между qodec объектами.

Аудит, который не выявляет проблем, не гарантирует отказоустойчивость. Схема может реализовать правильное логическое действие без сбоев и по-прежнему завершаться сбоем после одного физического отказа. Используйте метод CodeProfile.distance для анализа кода и метод GadgetProfile.distance для анализа каждой реализации схемы.

Прежде чем использовать протокол для шумного моделирования, выполните аудит протокола и проанализируйте расстояния кода и гаджетов.

Выберите стратегию строительства

Функция build_qodec поддерживает две базовые CSS стратегии построения.

Strategy Description
flagged-css/v1 Использует помеченную CSS конструкцию и выбирает количество флагов по расстоянию кода. Эта стратегия используется по умолчанию.
bare-css/v1 Не использует флаговые кубиты и пропускает вычисление расстояния, используемое для выбора числа флагов. Используйте его для проверки и на ранних этапах разработки.

Обе стратегии пытаются создать следующие логические инструкции:

  • prepare_z_all
  • prepare_x_all
  • syndrome
  • measure_z_all
  • measure_x_all
  • h_all
  • cx_all

Не каждый код поддерживает все варианты. При настройке по умолчанию strict=True, build_qodec выдает ошибку, когда не может создать инструкцию и проверить ее. С build_qodecstrict=False сохраняет поддерживаемые инструкции и записывает каждую пропущенную инструкцию в метаданных qodec.

Выберите следующую задачу

Полный блокнот, соответствующий полному рабочему процессу, см. в репозитории QDKРазработка и тестирование протокола QEC.