Microsoft Quantum Development Kit (QDK) には、ローカル コンピューターで量子プログラムを実行できる量子シミュレーターのセットが含まれています。 ローカル シミュレーターを使用してプログラムを反復処理してから、Azure Quantum ターゲットで実行するように送信します。
QDKには、次の 4 つのシミュレーターがあります。
- スパース シミュレーター
- Clifford シミュレーター
- GPU シミュレーター
- CPU シミュレーター
スパース シミュレーター
スパース シミュレーターは、 QDKの既定のシミュレーターです。 このシミュレーターは、量子ビット状態をスパース ベクトルとして表し、特に多くの重ね合わせ状態を生成しないプログラムでは、高速シミュレーションにスパース 行列代数を利用します。 スパース シミュレーターは、 Q#、 OpenQASM、または Qiskit プログラムの迅速なシミュレーションが必要な場合、またはシミュレーション中にプログラムの量子状態を表示する場合に使用します。
スパース シミュレーターは、Visual Studio Code (VS Code) 用の QDK 拡張機能と、QDKPython ライブラリの両方で使用できます。 このシミュレーターは、 QDK 拡張機能で使用可能な唯一のシミュレーターであるため、VS Code で Q# および OpenQASM プログラムを実行すると、コンパイラによってスパース シミュレーターが自動的に呼び出されます。 VS Code のスパース シミュレーターを使用すると、 Q#DumpMachine 関数またはデバッガーを使用して、シミュレーションのさまざまなポイントで量子ビット状態ベクトルを表示できます。
VS Code 拡張機能と Python ライブラリの両方で、Q# および OpenQASM プログラムのスパース シミュレーションのノイズ モデルがサポートされています。 Python ライブラリのみが、Qiskit プログラムのスパース シミュレーションをサポートしますが、ノイズ モデルはサポートしません。
スパース シミュレーターの詳細については、「ス パース シミュレーター」を参照してください。
Clifford シミュレーター
Clifford シミュレーターは、最大数千の量子ビットを持つプログラムでは高速かつ効率的ですが、Clifford ゲートのみを含むプログラムのみをシミュレートできます。 Clifford ゲートは、エラー修正回路の一般的なコンポーネントです。 Clifford ゲートのセットは、H、S、CX のゲートと、これら 3 つのゲートから構築できるすべてのゲートで構成されます。 次の Clifford ゲートは、量子回路の一般的なコンポーネントです。
- $X$、$Y$、$Z$
- $S$ と $S^\dagger$
- $H$、または Hadamard
- $CX$、$CY$、$CZ$
- SWAP と iSWAP
Clifford シミュレーターは、QDK、Python、Q#、および OpenQASM プログラム用の QiskitQIR ライブラリで使用できますが、VS Code の QDK 拡張機能では使用できません。
GPU シミュレーター
GPU シミュレーターは、コンピューターのGPUを使用して量子プログラムの多くのショットを並列で実行するフルステート シミュレーターです。 このシミュレーターは、任意の種類のゲートを含むプログラムを実行できますが、実行にコストがかかります。 シミュレーターは、最大 27 量子ビットをモデル化できます。 マシンの GPU のパワーによってパフォーマンスが決まりますが、パフォーマンスは約 20 量子ビットと大量のショットを持つプログラムに最適です。
GPU シミュレーターは、入力として QIR または Qiskit を受け取り、VS Code 拡張機能ではなく、特定の QDKPython ライブラリ API を介して使用できます。 また、あらゆる種類の量子ゲートまたは操作に対するノイズ モデルも豊富にサポートされています。
CPU シミュレーター
GPU シミュレーターと同様に、CPU シミュレーターは、任意の種類の量子ゲートを含むプログラムを実行できるフルステート シミュレーターです。 ただし、複数のショットを並列で実行できないため、 CPU シミュレーターの速度は低下します。 このシミュレーターは約 25 量子ビットまでスケールアップしますが、メモリの問題により、より多くの量子ビットで指数関数的に遅くなります。 CPU シミュレーターは、コンピューターにGPUがない場合、またはプログラムに量子ビットが少なく、大量のショットが実行されていない場合に使用します。
CPU シミュレーターは、入力として QIR または Qiskit を受け取り、VS Code 拡張機能ではなく、特定の QDKPython ライブラリ API を介して使用できます。 また、あらゆる種類の量子ゲートまたは操作に対するノイズ モデルも豊富にサポートされています。
どのシミュレーターを使用する必要がありますか?
使用するのに最適なシミュレーターは、次のようないくつかの要因によって異なります。
- 開発環境 (VS Code または Python)
- で開発している量子プログラミング フレームワーク
- プログラムの複雑さとショットの数
- ローカル コンピューターのハードウェア機能
- Azure Quantum ターゲットまたは、プログラムを実行するための他の量子ハードウェア
- 構築したいノイズモデル
次の表は、各シミュレーターで使用できる QDK オプションと量子プログラミング フレームワークをまとめたものです。
| シミュレーター | 可用性 | サポートされているフレームワーク |
|---|---|---|
| スパース | VS Code 拡張機能と Python ライブラリ | Q#、 OpenQASM、 Qiskit |
| Clifford | Python ライブラリ | Q#、OpenQASM、Qiskit、QIR |
| GPU | Python ライブラリ | Qiskit、QIR |
| CPU | Python ライブラリ | Qiskit、QIR |
VS Code の QDK 拡張機能でのシミュレーション
スパース シミュレーターは、VS Code の QDK 拡張機能で使用できる唯一のシミュレーターです。 スパース シミュレーターを使用するには、VS Code で Q# または OpenQASM ファイルを実行します。 VS Code の Q# プログラムのスパース シミュレーターには制限付きノイズ モデルを追加できますが、 OpenQASM プログラムには追加できません。
QDK Python ライブラリのシミュレーション
QDK Python 開発環境では、複数の量子フレームワークと 4 つの QDK シミュレーターがすべてサポートされていますが、すべてのシミュレーターがすべてのフレームワークと API と互換性があるわけではありません。
次の表は、Python シミュレーターを呼び出す各QDK API に使用できるシミュレーターと、各 API がサポートするプログラミング フレームワークを示しています。
| Python API (アプリケーション・プログラミング・インターフェース) | スパース | Clifford | GPU | CPU | プログラミング フレームワーク |
|---|---|---|---|---|---|
qsharp.run |
✅ | ✅ | Q# | ||
openqasm.run |
✅ | ✅ | OpenQASM | ||
qiskit.QSharpBackend |
✅ | Qiskit | |||
simulation.NeutralAtomDevice |
✅ | ✅ | ✅ | QIR | |
simulation.NeutralAtomBackend |
✅ | ✅ | ✅ | Qiskit | |
simulation.run_qir |
✅ | ✅ | ✅ | QIR |