QDK量子シミュレーターをインストールして実行する方法

Microsoft Quantum Development Kit (QDK) には、Visual Studio Code (VS Code) 拡張機能と QDKPython ライブラリからアクセスできる量子シミュレーターのセットが含まれています。 これらのシミュレーターを使用すると、実際の量子ハードウェアで量子プログラムを実行する方法をテストできます。 この記事では、シミュレーターをインストールする方法と、Jupyter Notebook および VS Code で基本的なシミュレーションを実行する方法について説明します。

QDKには、次の 4 つの量子シミュレーターが含まれています。

  • スパース シミュレーター
  • クリフォード シミュレーター
  • GPU シミュレーター
  • CPU シミュレーター

QDK量子シミュレーターの詳細については、「QDKの量子シミュレーターの概要」を参照してください。

前提条件

この記事の手順に従うには、次のツールをインストールする必要があります。

シミュレーターをインストールする

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# サンプル プログラムのいずれかを実行します。

  1. VS Codeで、[ファイル] メニューを開き、[新しいテキスト ファイル] を選択します。
  2. .qs拡張子で終わる名前をファイルに付けます。
  3. 空のファイルにサンプルを入力 します。 含まれているコード サンプルの一覧が開きます。
  4. ベル ペア サンプルなどのコード サンプルを選択します。
  5. スパース シミュレーターでプログラムを実行するには、メイン操作の上にあるコード レンズから [実行] コマンドを選択します。

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# プログラムを実行します。

  1. VS Codeで、[表示] メニューを開き、[コマンド パレット] を選択します。

  2. 「新規作成」と入力します。 空のノートブック ファイルが新しいタブで開きます。

  3. 最初のセルで、qsharp ライブラリから qdk モジュールをインポートします。

    from qdk import qsharp
    
  4. 新しいセルで、 %%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);
    }
    
  5. 新しいセルを作成します。 スパース シミュレーターで 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)