QDK を使用してエラー修正を始める

Microsoft Quantum Development Kit (QDK) には、量子エラー修正 (QEC) プロトコルを開発およびテストするためのPython ツールが含まれています。 qdk.ec モジュールを使用して、エラー修正コードの分析、実行可能なプロトコルの構築、プロトコル宣言の検証、回路障害の調査を行います。 qdk.simulationを使用して、これらのプロトコルを介して論理プログラムを実行します。

QDKエラー修正ツールを理解する

QDKエラー修正ワークフローでは、次のパッケージとモジュールが使用されます。

コンポーネント この用途:
qodec コード、命令セット、ガジェット、レイヤー、および完全な QEC プロトコルを定義して保存します。
qdk.ec コードとガジェットの分析、ベースライン コーデックの構築、式の導出、プロトコル宣言の監査を行います。
qdk.simulation Quantum Intermediate Representation (QIR) プログラムを qodec を介して実行し、デコーダーを適用します。
qdk.simulation.decoders 組み込みの症候群デコーダーを選択するか、フレームを追跡するか、オプションの deq デコーダーに接続します。
qdk.qre フォールト トレラント なリソース推定のために、QEC モデルの領域、時間、およびエラー コストを見積もります。

qodecは、実行可能な QEC プロトコルの形式的記述です。 1 つ以上の層を介して論理命令を物理回路に接続します。 qodec パッケージは、このデータ モデルとそのYAML表現を定義します。 qdk.ec モジュールは、モデルからファクトを導出し、その宣言がその回線と一致するかどうかを確認します。

詳細については、「qodec 概要」に関するページを参照してください。

qdk.qre モジュールは目的が異なります。 エラー修正スキームのリソース コストをモデル化します。 qodec ガジェットを定義、監査、または実行しません。 QDKでの量子リソース推定の詳細については、「Microsoft Quantum リソース推定機能とは?」を参照してください。

qodec プロトコル コンポーネントを理解する

次のコンポーネントは、 qodec プロトコルを定義し、その実行をサポートします。

コンポーネント Description
Code コード空間を定義するスタビライザーと論理演算子の静的なセット。
命令セット qodec 層がサポートする論理操作または物理操作。
ガジェット 次の下位レイヤーの操作を通じて命令を実装する回路。
レイヤー 1 つの命令セットから下位レベルの命令セットへのマッピング。
Encoding ガジェット境界での論理ブロックと回路量子ビット間の接続。
チェック 宣言されたリレーションが保持されている場合に 0 に等しくなければならないパリティ方程式。
読み出し 回路の結果とフレームの符号を論理結果またはフラグにマップする数式。
Flag 命令が受け入れ条件を満たしているかどうかを報告する名前付き読み出し。
デコーダ シンドローム情報を使用して、修正と論理的な結果を推測するコンポーネント。

qodecは複数のレイヤーを含むことができます。 最上位レイヤーでは、エンコードされたブロックに対する論理操作を定義できます。 最上位レイヤーのガジェットは、次の下位レイヤーの命令を呼び出すことができます。 下部のレイヤーには、シミュレーターが実行する物理操作が含まれています。

プロトコルのワークフロー例

一般的なワークフローには、6 つの手順があります。 次の手順では、 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 オブジェクト間のコード代数、命令宣言、ガジェットアクション、チェック、読み出し、フラグ、フレーム関係、および参照がチェックされます。

問題がないと報告する監査では、フォールト トレランスは保証されません。 回路は、障害なしで正しい論理動作を実装できても、1 つの物理故障が発生すると故障する可能性があります。 CodeProfile.distanceメソッドを使用してコードを分析し、GadgetProfile.distanceメソッドを使用して各回路の実装を分析します。

ノイズの多いシミュレーションにプロトコルを使用する前に、プロトコル監査を実行し、コードとガジェットの距離を分析してください。

建設戦略を選択する

build_qodec関数は、2 つのベースライン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 は命令をビルドして検証できない場合にエラーを発生させます。 strict=Falseでは、build_qodecはサポートされている命令を保持し、スキップされた各命令をqodecメタデータに記録します。

次のタスクを選択する

完全なワークフローに従う完全なノートブックについては、 リポジトリの QDK を参照してください。