の量子シミュレーターの概要 QDK

Microsoft Quantum Development Kit (QDK) には、ローカル コンピューターで量子プログラムを実行する量子シミュレーターが含まれています。 これらのローカル シミュレーターを使用して、Azure Quantum ターゲットに送信する前に、プログラムをテストおよび開発してください。

QDKには、量子プログラムを実行するための 4 つのプライマリ シミュレーターが用意されています。

  • スパース シミュレーター
  • スタビライザーシミュレーター
  • GPU シミュレーター
  • CPU シミュレーター

スパース シミュレーター

スパース シミュレーターは、量子ビットの状態をスパース ベクトルとして表し、スパース 行列代数を使用して、非ゼロ振幅が少ないプログラムをすばやくシミュレートします。 これは、OpenQASM拡張機能のQDKプログラムとQ#プログラム、およびqsharp.run API とopenqasm.runPython API の既定のシミュレーターです。 スパース シミュレーターは、 Q#、 OpenQASM、または Qiskit プログラムの迅速なシミュレーションが必要な場合、またはシミュレーション中にプログラムの量子状態を表示する場合に使用します。

スパース シミュレーターは、Visual Studio Code の VS Code (QDK) 向け拡張機能と QDKPython パッケージの両方で使用できます。 このシミュレーターは、QDK拡張機能で使用できる唯一のシミュレーターであるため、OpenQASMでVS CodeおよびQ#プログラムを実行すると、拡張機能によって自動的に使用されます。 VS Codeでは、Q#DumpMachine関数またはデバッガーを使用して、シミュレーションのさまざまなポイントで量子ビット状態ベクトルを表示します。

VS Code拡張機能とPython パッケージの両方で、Q#プログラムとOpenQASM プログラムのスパース シミュレーション用のノイズ モデルがサポートされています。 Python パッケージのみがQiskit プログラムのスパース シミュレーションをサポートしますが、Qiskit シミュレーションのノイズ モデルはサポートしていません。

QDK 拡張機能でシミュレーションを実行する方法の詳細については、Visual Studio Code の QDK 向け拡張機能で量子シミュレーションを実行する を参照してください。

スタビライザー シミュレーター

スタビライザー シミュレーターは、数千の量子ビットで Clifford支配されたプログラムを迅速かつ効率的にシミュレートします。 Clifford ゲートは、量子誤差補正回路の一般的なコンポーネントです。 Clifford 操作ではスタビライザー分岐の数が増えないので、シミュレーターはワイド回路でも効率的に適用できます。 一般的なClifford操作には次のものがあります:

  • $X$、$Y$、$Z$
  • $S$ と $S^\dagger$
  • $H$、または Hadamard
  • $CX$、$CY$、$CZ$
  • $SWAP$

また、スタビライザー シミュレーターでは、スタビライザー分岐を使用して、限られた数のClifford 以外の操作で回路をシミュレートします。 シミュレーターでは、次の非Clifford操作がサポートされています。

  • $T$ と $T^\dagger$
  • $R_X$、$R_Y$、$R_Z$、$R_{XX}$、$R_{YY}$、および$R_{ZZ}$の任意角度回転

各非Clifford 操作は、スタビライザー分岐の数を増やすことができます。 Clifford以外の操作を追加すると、メモリ使用量とショット実行時間が指数関数的に増加する可能性があります。 大部分が Clifford 操作で、Clifford でない操作の数が少ないワイド回路には、スタビライザー シミュレーターを使用します。 多くの非Clifford 操作を持つ回路には、スパースまたはフルステート シミュレーターを使用します。

スタビライザー シミュレーターは、アダプティブ実行、 Pauli ノイズ、量子ビット損失をサポートします。 Qiskit、QIR、QDK、およびPythonプログラム向けのQ#OpenQASMパッケージで使用できますが、QDK向けのVS Code拡張機能では使用できません。

シミュレーター セレクターを備えた Python API では、"stabilizer" または "clifford" を使用してスタビライザー シミュレーターを選択します。

GPU シミュレーター

GPU シミュレーターは、コンピューターのGPUを使用して量子プログラムの多くのショットを並列で実行するフルステート シミュレーターです。 シミュレーターは、すべてのゲートの種類をサポートしますが、大量の計算リソースが必要です。 シミュレーターは、最大 27 量子ビットをモデル化できます。 マシンの GPU のパワーによってパフォーマンスが決まりますが、パフォーマンスは約 20 量子ビットと大量のショットを持つプログラムに最適です。

GPU シミュレーターは、特定の QIRQiskit パッケージ API を介して入力として QDK または Python を受け取ります。 VS Code拡張機能は、GPU シミュレーターをサポートしていません。 また、あらゆる種類の量子ゲートまたは操作に対するノイズ モデルも豊富にサポートされています。

CPU シミュレーター

GPU シミュレーターと同様に、CPU シミュレーターは、任意の種類の量子ゲートを使用するプログラムを実行するフルステート シミュレーターです。 ただし、複数のショットを並列で実行できないため、低速になります。 このシミュレーターは約 25 量子ビットまでスケールアップしますが、メモリの問題により、より多くの量子ビットで指数関数的に遅くなります。 CPU シミュレーターは、コンピューターにGPUがない場合、またはプログラムに量子ビットが少なく、多くのショットを必要としない場合に使用します。

CPU シミュレーターは、QIRまたはQiskit入力を受け入れます。 特定の QDKPython パッケージ API を介して使用できますが、 VS Code 拡張機能では使用できません。 また、あらゆる種類の量子ゲートまたは操作に対するノイズ モデルも豊富にサポートされています。

どのシミュレーターを使用する必要がありますか?

シミュレーターを選択するときは、次の要因を考慮してください。

  • 開発環境 (VS Code または Python)
  • あなたが使用する量子プログラミングフレームワーク
  • プログラムの複雑さとショットの数
  • ローカル コンピューターのハードウェア機能
  • Azure Quantum ターゲットまたは、プログラムを実行するための他の量子ハードウェア
  • 構築したいノイズモデル

次の表は、各 QDK シミュレーターの可用性とサポートされている量子プログラミング フレームワークをまとめたものです。

シミュレーター 可用性 サポートされているフレームワーク
スパース VS Code 拡張機能と Python パッケージ Q#、 OpenQASM、 Qiskit
Stabilizer Python パッケージ Q#、OpenQASM、Qiskit、QIR
GPU Python パッケージ Qiskit、QIR
CPU Python パッケージ Qiskit、QIR

VS Code の QDK 拡張機能でのシミュレーション

VS CodeのQDK拡張機能では、スパース シミュレーターのみがサポートされます。 スパース シミュレーターを使用するには、VS Code または Q# ファイルを OpenQASM で実行します。 Pauliノイズ モデルは、VS CodeのQ# プログラムのスパース シミュレーションに追加できますが、OpenQASMプログラムには追加できません。

QDK Python パッケージ内のシミュレーション

QDK Python パッケージは、複数の量子プログラミング フレームワークと 4 つのすべての QDK シミュレーターをサポートします。 互換性は、フレームワークと API によって異なります。

次の表に、各 Python API がサポートするシミュレーターとプログラミング フレームワークを示します。

Python API (アプリケーション・プログラミング・インターフェース) スパース Stabilizer GPU CPU プログラミング フレームワーク
qsharp.run Supported Supported サポートしていません サポートしていません Q#
openqasm.run Supported Supported サポートしていません サポートしていません OpenQASM
qiskit.QSharpBackend Supported サポートしていません サポートしていません サポートしていません Qiskit
simulation.NeutralAtomDevice サポートしていません Supported Supported Supported QIR
qiskit.NeutralAtomBackend サポートしていません Supported Supported Supported Qiskit
simulation.run_qir サポートしていません Supported Supported Supported QIR