Azure Quantum での QIR target プロファイルの種類

この記事では、Azure Quantum の量子コンピューティング プロバイダーで使用できるさまざまな種類の QIR target プロファイルについて説明します。 QIR target プロファイルの種類は、Q# プログラムで target できる量子デバイスの機能を定義するために使用されます。

ターゲット プロファイルとその制限事項

量子デバイスはまだ新しいテクノロジであり、そのすべてがすべての Q# プログラムを実行できるわけではありません。 そのため、さまざまな targets用のプログラムを開発するときは、いくつかの制限に留意する必要があります。 現在、Azure Quantum と QDK では、次の 3 つの異なる target プロファイルが管理されています。

  • Unrestricted: このプロファイルは、シミュレーターのメモリの制限内、または物理量子コンピューターの量子ビット数の範囲内で任意の QIR プログラムを実行できます。
  • QIR base: このプロファイルでは、量子ビット測定の結果を使用してプログラム フローを制御する必要のない Q# プログラムを実行できます。 この種の QPU に対して targetされた Q# プログラム内では、 Result 型の値は等価比較をサポートしていません。
  • QIR Adaptive RI: このプロファイルには、量子ビット測定の結果を使用してプログラム フローを制御する機能が限られています。 この種の QPU に対して target Q# プログラム内で、操作のステートメント内の条件の一部として型 Result の値 if 比較し、中間回路の測定を可能にすることができます。

Unrestrictedtarget プロファイルのアプリケーションを作成して実行する

Unrestrictedtarget プロファイルは任意のプログラムを実行できます。つまり、機能制限なしで Q# プログラムを記述できます。 Azure Quantum では、このプロファイルに target は提供されません。 ただし、QDK によって提供 Unrestricted シミュレーターで Q# プログラムを実行できます。

Unrestrictedtarget プロファイルの構成

Visual Studio Code:

  1. View -> コマンド パレットを選択しQ#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
  2. [ Unrestricted を選択します。

Python では、qsharp.init メソッドを使用してtarget プロファイルを設定できます。

qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted) 

QIR Basetarget プロファイルのアプリケーションを作成して実行する

QIR Basetarget プロファイルは、量子ビット測定の結果を使用してプログラム フローを制御できないという制約を持つ、さまざまな Q# アプリケーションを実行できます。 具体的には、 Result 型の値は等価比較をサポートしていません。

たとえば、この操作QIR Basetargetで実行することはできません。

    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

QIR Basetargetに対してこの操作を実行しようとすると、ifステートメントで計算フローを制御するために、測定結果 (M(q) == Zero) を使用して比較が行われるため、操作は失敗します。 elifステートメントやelse ステートメントなど、conditional branching の種類にも同じ方法が適用されます。

QIR Basetarget プロファイルの構成

Visual Studio Code:

  1. View -> コマンド パレットを選択しQ#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
  2. [QIR ベース 選択

Python では、qsharp.init メソッドを使用してtarget プロファイルを設定できます。

qsharp.init(target_profile=qsharp.TargetProfile.Base) 

targets をサポートするようになりました

現時点では、次の QIR Basetargets は Azure Quantum で使用できます。

QIR Adaptive RI プロファイルのアプリケーションを作成して実行するtargets

QIR Adaptive RI プロファイル targets では、さまざまな Q# アプリケーションを実行できますが、いくつかの制約があります。 このプロファイルの種類は、 QIR Base プロファイルに対する改善を想定していますが、いくつかの制限が引き続き適用されます。

QIR Adaptive RI プロファイル targets 測定ベースの条件付き操作と mid-circuit測定が可能です量子ビットは量子プログラムの最終ステートメント以外のポイントで選択的に測定でき、測定の出力は他の操作で使用できます。 中間回路測定により、量子プログラム全体の任意の時点で複数の測定が可能になります。 測定された量子ビットの量子情報は古典的な状態 (ゼロまたは 1) に折りたたまれますが、非測定量子ビットは量子状態のままです。

Q# では、量子ビットを測定するときに、 Result 型の値が返されます。 この結果を条件ステートメントで使用する場合は、条件ステートメントで直接比較する必要があります。 対応する条件ブロックに、return または set ステートメントを含めることはできません。

たとえば、次の Q# コードは、 QIR Adaptive RItargetで許可されます。

operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

QIR Adaptive RItarget プロファイルの構成

Visual Studio Code:

  1. View -> コマンド パレットを選択しQ#: Azure Quantum QIR target プロファイルを設定します」 と入力します。 Enter キーを押します。
  2. [QIR Adaptive RI] を選択します。

Python では、qsharp.init メソッドを使用してtarget プロファイルを設定できます。

qsharp.init(target_profile=qsharp.TargetProfile.Adaptive_RI) 

targets をサポートするようになりました

現時点では、次の QIR Adaptive RItargets は Azure Quantum で使用できます。