Microsoft Quantum Development Kit (QDK) には、Visual Studio Code (VS Code) 拡張機能と QDKPython ライブラリからアクセスできる量子シミュレーターのセットが含まれています。 これらのシミュレーターを使用すると、実際の量子ハードウェアで量子プログラムを実行する方法をテストできます。 この記事では、シミュレーターをインストールする方法と、Jupyter Notebook および VS Code で基本的なシミュレーションを実行する方法について説明します。
QDKには、次の 4 つの量子シミュレーターが含まれています。
- スパース シミュレーター
- クリフォード シミュレーター
- GPU シミュレーター
- CPU シミュレーター
QDK量子シミュレーターの詳細については、「QDKの量子シミュレーターの概要」を参照してください。
前提条件
この記事の手順に従うには、次のツールをインストールする必要があります。
- Python 環境(バージョン 3.10 以上、Python および Pip を含む)
- Visual Studio Codeの最新バージョン (VS Code)
- VS Code の Python 拡張機能 と Jupyter 拡張機能 の最新バージョン
シミュレーターをインストールする
QDK Python ライブラリでは 4 つのシミュレーターがすべて使用できますが、QDKVS Code 拡張機能ではスパース シミュレーターのみを使用できます。
VS Code拡張機能でスパース シミュレーターを使用するには、QDKのVS Code拡張機能をインストールします。
Python および Jupyter Notebook で量子シミュレーターを使用するには、qdkPython ライブラリの最新バージョンを jupyter 追加でインストールします。
pip install --upgrade "qdk[jupyter]"
jupyter追加機能はシミュレーターを使用する必要はありませんが、qdk.widgets モジュールをインストールします。
widgets モジュールを使用すると、シミュレーション結果から Jupyter Notebook で視覚化を作成できます。
の QDK 拡張機能を使用してシミュレーションを実行する VS Code
QDKのVS Code拡張機能では、スパース シミュレーターのみが提供されます。
VS Codeのスパース シミュレーターでプログラムを実行するには、.qsで Q# (.qasm) または OpenQASM (VS Code) プログラムを開き、ファイルを実行します。
たとえば、次の手順に従って、 QDK 拡張子が付属している Q# サンプル プログラムのいずれかを実行します。
- VS Codeで、[ファイル] メニューを開き、[新しいテキスト ファイル] を選択します。
-
.qs拡張子で終わる名前をファイルに付けます。 - 空のファイルにサンプルを入力 します。 含まれているコード サンプルの一覧が開きます。
- ベル ペア サンプルなどのコード サンプルを選択します。
- スパース シミュレーターでプログラムを実行するには、メイン操作の上にあるコード レンズから [実行] コマンドを選択します。
VS Codeターミナルには、シミュレーションからの出力が表示されます。
Note
QDK拡張機能で Q# プログラムのスパース シミュレーションに制限付きノイズ モデルを追加できます。 詳細については、「VS Codeのスパース シミュレーターにパウリ ノイズを追加する」を参照してください。
QDK Python ライブラリを使用してシミュレーションを実行する
QDK Python ライブラリには、4 つのシミュレーターがすべて用意されています。 シミュレーターを呼び出す方法は、シミュレーターと量子プログラミング フレームワークによって異なります。
スパース シミュレーターを呼び出す
Q#、OpenQASM、および Qiskit プログラムのスパース シミュレーターを呼び出すことができます。 次の表は、サポートされている各量子プログラミング フレームワークで、 qdk ライブラリからスパース シミュレーターを 10 ショット呼び出す方法を示しています。
| プログラミング フレームワーク | Python API | 呼び出しの例 |
|---|---|---|
| Q# | qsharp.run |
qsharp.run("MyQsharpProgram()", shots=10) |
| OpenQASM | openqasm.run |
openqasm.run(my_qasm_program, shots=10) |
| Qiskit | qiskit.QSharpBackend |
QSharpBackend().run(my_qiskit_program, shots=10) |
Note
Q# および OpenQASM プログラムの noise パラメーターを使用してスパース シミュレーターにノイズ モデルを追加できますが、Qiskit プログラムのノイズ モデルを追加することはできません。
たとえば、次の手順に従って、JupyterのVS Code ノートブックでベル ペア Q# プログラムを実行します。
VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。
「新規作成」と入力します 。 空のノートブック ファイルが新しいタブで開きます。最初のセルで、
qsharpライブラリからqdkモジュールをインポートします。from qdk import qsharp新しいセルで、
%%qsharpマジック コマンドを使用して Q# コードを記述します。%%qsharp operation Main() : (Result, Result) { use (q1, q2) = (Qubit(), Qubit()); PrepareBellPair(q1, q2); (MResetZ(q1), MResetZ(q2)) } operation PrepareBellPair(q1 : Qubit, q2 : Qubit) : Unit { H(q1); CNOT(q1, q2); }新しいセルを作成します。 スパース シミュレーターで Q# プログラムを実行するには、
runモジュールからqsharp関数を呼び出し、ショットの数を指定します。qsharp.run("Main()", shots=10)
クリフォード シミュレーターを呼び出す
Q#、OpenQASM、Qiskit、および QIR プログラムのクリフォード シミュレーターを呼び出すことができます。 次の表は、サポートされている各量子プログラミング フレームワークで、 qdk ライブラリからクリフォード シミュレーターを 10 ショット呼び出す方法を示しています。
| プログラミング フレームワーク | Python API | 呼び出しの例 |
|---|---|---|
| Q# | qsharp.run |
qsharp.run("MyQsharpProgram()", type='clifford', shots=10) |
| OpenQASM | openqasm.run |
openqasm.run(my_qasm_program, type='clifford', shots=10) |
| Qiskit | simulation.NeutralAtomBackend |
simulation.NeutralAtomBackend().run(my_qiskit_program, simulator_type='clifford', shots=10) |
| QIR | simulation.NeutralAtomDevice |
simulation.NeutralAtomDevice().simulate(my_qir, type='clifford', shots=10) |
| QIR | simulation.run_qir |
simulation.run_qir(my_qir, type='clifford', shots=10) |
Note
NeutralAtomDeviceおよびNeutralAtomBackend API は、特に中性原子量子コンピューターでのシミュレーション用です。 詳細については、「 ニュートラルアトム デバイス シミュレーターの概要」を参照してください。
たとえば、次のPython コードは、単純な OpenQASM プログラムを作成し、クリフォード シミュレーターでプログラムを実行します。
from qdk.openqasm import run
qasm_code = """
include "stdgates.inc";
qubit[2] q;
reset q;
h q[0];
cx q[0], q[1];
bit c = measure q[1];
"""
run(qasm_code, type='clifford', shots=10)
GPU シミュレーターと CPU シミュレーターを呼び出す
Qiskit および QIR プログラムの GPU および CPU シミュレーターを呼び出すことができます。 次の表は、サポートされている各量子プログラミング フレームワークで、 qdk ライブラリから 10 ショットの GPU シミュレーターを呼び出す方法を示しています。 CPU シミュレーターを呼び出すには、 'gpu' をシミュレーターの型パラメーターの 'cpu' に置き換えます。
| プログラミング フレームワーク | Python API | 呼び出しの例 |
|---|---|---|
| Qiskit | simulation.NeutralAtomBackend |
simulation.NeutralAtomBackend().run(my_qiskit_program, simulator_type='gpu', shots=10) |
| QIR | simulation.NeutralAtomDevice |
simulation.NeutralAtomDevice().simulate(my_qir, type='gpu', shots=10) |
| QIR | simulation.run_qir |
simulation.run_qir(my_qir, type='gpu', shots=10) |
たとえば、次の Python コードは、単純な OpenQASM プログラムを QIR に変換し、GPU シミュレーターで QIR を実行します。
from qdk.openqasm import compile#, ProgramType
from qdk.simulation import run_qir
qasm_code = """
include "stdgates.inc";
qubit[2] q;
reset q;
h q[0];
cx q[0], q[1];
bit c = measure q[1];
"""
qir = compile(qasm_code)
run_qir(qir, type='gpu', shots=10)