演習 - Azure Quantum Resource Estimator の使用を開始する

完了

Azure Quantum Resource Estimator を使って練習してみましょう。 次の例では、Shor のアルゴリズム サンプルの物理リソースを見積もります。

qsharp と qsharp-widgets をインストールする

まず、Azure Quantum の最新パッケージである qsharpqsharp-widgets をインストールします。

python -m pip install --upgrade qsharp qsharp-widgets 

量子アルゴリズムを作成する

  1. VS Code で、[表示] > [コマンド パレット] を選択して、[作成: 新しい Jupyter Notebook] を選択します。

  2. ノートブックの最初のセルで、qsharp パッケージをインポートします。

    import qsharp
    from qsharp_widgets import EstimateDetails
    
  3. 新しいセルを追加して次のコードをコピーします。

    %%qsharp
    /// # Sample
    /// Random Bit
    ///
    /// # Description
    /// This Q# program generates a random bit by setting a qubit in a superposition
    /// of the computational basis states |0〉 and |1〉, and returning the measurement
    /// result.
    
        operation RandomBit() : Result {
            // Qubits are only accesible for the duration of the scope where they
            // are allocated and are automatically released at the end of the scope.
            use qubit = Qubit();
    
            // Set the qubit in superposition by applying a Hadamard transformation.
            H(qubit);
    
            // Measure the qubit. There is a 50% probability of measuring either 
            // `Zero` or `One`.
            let result = M(qubit);
    
            // Reset the qubit so it can be safely released.
            Reset(qubit);
            return result;
        }
    

量子アルゴリズムを見積もる

  1. 次に、既定の前提条件を使用して RandomBit 操作の物理リソースを推定します。 新しいセルを追加して次のコードをコピーします。

    result = qsharp.estimate("RandomBit()")
    result
    

    qsharp.estimate 関数は結果オブジェクトを作成し、これは全体的な物理リソースの総数を含むテーブルを表示するために使用できます。 最初の表は、主な物理リソースの見積もりを示しています。 RandomBit 操作は 300 個の量子ビットを必要とし、量子コンピューターで実行するには 2 マイクロ秒かかります。

    物理リソースの見積もり Value
    Runtime 2 マイクロ秒
    rQOPS 3.00M
    物理量子ビット 300
  2. 詳しい情報が含まれているグループを折りたたんで、コストの詳細を確認できます。 たとえば、論理量子ビット パラメーター グループを折りたたんで、符号距離が 5 で、論理量子ビットあたりの物理量子ビット数が 50 であることを確認します。

    論理量子ビット パラメーター Value
    QEC スキーム surface_code
    コード距離 5
    物理量子ビット 50
    論理サイクル時間 2 マイクロ秒
    論理量子ビット エラー率 3.00E-5
    交差の前因子 0.03
    エラー訂正のしきい値 0.01
    論理サイクル時間の数式 (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance
    物理量子ビットの数式 2 * codeDistance * codeDistance
  3. 次のように jobParams フィールドを使用して、ジョブの実行に渡すことができるすべてのターゲット パラメーターにアクセスし、想定されていた既定値を確認できます。

    result['jobParams']
    
    {'errorBudget': 0.001,
     'qecScheme': {'crossingPrefactor': 0.03,
      'errorCorrectionThreshold': 0.01,
      'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance',
      'name': 'surface_code',
      'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance'},
     'qubitParams': {'instructionSet': 'GateBased',
      'name': 'qubit_gate_ns_e3',
      'oneQubitGateErrorRate': 0.001,
      'oneQubitGateTime': '50 ns',
      'oneQubitMeasurementErrorRate': 0.001,
      'oneQubitMeasurementTime': '100 ns',
      'tGateErrorRate': 0.001,
      'tGateTime': '50 ns',
      'twoQubitGateErrorRate': 0.001,
      'twoQubitGateTime': '50 ns'}}
    

    Resource Estimator は、見積もりの既定値として、qubit_gate_ns_e3 量子ビット モデル、surface_code 誤り訂正符号、および 0.001 のエラー バジェットを使用することがわかります。

既定値を変更し、アルゴリズムの見積もりを行う

プログラムのリソース見積もり要求を送信する際には、いくつかのオプションのパラメーターを指定できます。 カスタマイズできるターゲット パラメーターを以下に示します。

  • errorBudget - アルゴリズムで許容される合計のエラー バジェット
  • qecScheme - 量子誤り訂正 (QEC) スキーム
  • qubitParams - 物理量子ビット パラメーター
  • constraints - コンポーネント レベルの制約
  • distillationUnitSpecifications - T ファクトリ蒸留アルゴリズムに対する指定
  • estimateType - シングルまたはフロンティア

量子ビット モデルを変更する

Majorana ベースの量子ビット パラメーター (qubitParams) "qubit_maj_ns_e6" を使用して、同じアルゴリズムのコストを見積もることができます。

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                }})
EstimateDetails(result_maj)

量子誤り訂正スキームを変更する

floqued QEC スキーム qecScheme を使用して、Majorana ベースの量子ビット パラメーターで同じ例のリソース見積もりジョブを再実行できます。

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                }})
EstimateDetails(result_maj)

エラー バジェットを変更する

次に、10% の errorBudget で同じ量子回路を再実行します。

result_maj = qsharp.estimate("RandomBit()", params={
                "qubitParams": {
                    "name": "qubit_maj_ns_e6"
                },
                "qecScheme": {
                    "name": "floquet_code"
                },
                "errorBudget": 0.1})
EstimateDetails(result_maj)