次の方法で共有


targetリソース推定器のパラメーターをカスタマイズする

この記事では、使用しているマシンの特性に合わせて Azure Quantum リソース推定器のパラメーターをカスタマイズtargetするtarget方法について説明します。 Resource Estimator はこれらのパラメーターを使用して、量子コンピューターで量子アルゴリズムを実行するために必要なリソースを見積もります。

Note

リソース推定ツールの操作中に問題が発生した場合は、[トラブルシューティング] ページチェックします。

前提条件

  • Python と Pip がインストールされた Python 環境。

  • 最新バージョンの Visual Studio Code または VS Code on the Web を開きます。

  • Azure Quantum Development Kit、PythonJupyter拡張機能がインストールされた VS Code。

  • 最新の Azure Quantum qsharpqsharp-widgets パッケージ。

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

ターゲット パラメーター

Resource Estimator は、量子ビット数や実行時間などのリソースの見積もりを計算します。これは、特定の量子ビット テクノロジを使用し、固定されたアーキテクチャの選択肢を使用して、特定の量子アルゴリズムを実装するために必要になります。

そのため、Resource Estimator は入力セットを受け取り、事前に定義された値を使用して簡単に開始できます。

物理量子ビット パラメーター

リソース推定器は、物理量子ビットの仮定をモデル化するときに、2 つの異なる物理命令セットを使用して量子ビットを操作します。 物理命令セットは、"ゲートベース" または Majorana のどちらかにすることができます。 ゲートベースの命令セットは、単一量子ビット測定、単一量子ビット ゲート ("T ゲート" を含む)、および 2 量子ビット ゲートを提供します。 Majorana の命令セットは、物理 T ゲート、単一量子ビット測定、および 2 量子ビット一括測定演算を提供します。

事前に定義された 6 つの量子ビット パラメーターから選択できます。そのうちの 4 つにはゲートベースの命令セットがあり、2 つには Majorana の命令セットがあります。 これらの量子ビット モデルは、さまざまな演算時間とエラー率を網羅するため、実用的な量子アプリケーションを実現するために必要なリソース コストを十分に活用できます。

量子ビット パラメーター Python API クラス 説明
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" GATE_NS_E3 , GATE_NS_E4 動作時間と忠実度は、将来のバージョンの超電導トランスモン量子ビットまたはスピン量子ビットに対応する可能性があります。これは通常、ナノ秒のレジームで動作時間を持っています。 これらの量子ビットでは、ゲート操作と測定操作はそれぞれ 50 ns と 100 ns を要すると想定されます。 単一量子ビットと 2 量子ビット のゲート エラー レートは、現実的targetな場合は $10^{-3}$、スケールアップ システムではオプティミスティックtargetとして $10^{-4}$ と見なされます。
"qubit_gate_us_e3" , "qubit_gate_us_e4" GATE_US_E3 , GATE_US_E4 操作時間と忠実度は、イオンに基づく量子ビットの将来のバージョンに対応する可能性があり、通常はマイクロ秒レジームの操作時間があります。 イオン量子ビットの典型的な仮定に基づいて、ゲートおよび測定の操作は100μsかかると仮定されます。 単一量子ビットのクリフォード ゲートのエラー率は、現実的な場合は $10^{-3}$ で、オプティミスティックtargetでは $10^{-4}$ ですが、単一量子ビットの非クリフォード ゲート (T ゲート) のエラー率は $10^$ です{-6}。target 2 量子ビット ゲートの場合、誤差率は現実的targetな場合は $10^{-3}$、オプティミスティックtargetでは $10^{-4}$ です。
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" MAJ_NS_E4 , MAJ_NS_E6 操作時間と忠実度は、Majorana 量子ビットの将来の 改善されたバージョンに対応する可能性があります。 これらの量子ビットの場合、ゲートと測定の操作には 100 ns を要すると想定されます。 ハードウェアのトポロジ保護を考慮するために、単一量子ビットと 2 量子ビットの共同測定誤差率 (クリフォード 誤差率) は、現実的targetな場合は $10^{-4}$、オプティミスティックtargetとしては $10^{-6}$ と見なされます。 このアーキテクチャの非クリフォード操作にはトポロジ保護がなく、クリフォード以外の物理 T ゲートのエラー率は 5% です。

Note

他の値を指定しない限り、量子ビット モデルの既定値は "qubit_gate_ns_e3".

定義済みの量子ビット パラメーターのパラメーター

参考までに、定義済みの量子ビット パラメーターは次のとおりです。

{
    "qubitParams": {
        "name": "qubit_gate_ns_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-3
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_ns_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 ns",
        "oneQubitGateTime": "50 ns",
        "twoQubitGateTime": "50 ns",
        "tGateTime": "50 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-4
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e3",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-3,
        "oneQubitGateErrorRate": 1e-3,
        "twoQubitGateErrorRate": 1e-3,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_gate_us_e4",
        "instructionSet": "GateBased",
        "oneQubitMeasurementTime": "100 µs",
        "oneQubitGateTime": "100 µs",
        "twoQubitGateTime": "100 µs",
        "tGateTime": "100 µs",
        "oneQubitMeasurementErrorRate": 1e-4,
        "oneQubitGateErrorRate": 1e-4,
        "twoQubitGateErrorRate": 1e-4,
        "tGateErrorRate": 1e-6
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e4",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-4,
        "twoQubitJointMeasurementErrorRate": 1e-4,
        "tGateErrorRate": 0.05
    }
}

{
    "qubitParams": {
        "name": "qubit_maj_ns_e6",
        "instructionSet": "Majorana",
        "oneQubitMeasurementTime": "100 ns",
        "twoQubitJointMeasurementTime": "100 ns",
        "tGateTime": "100 ns",
        "oneQubitMeasurementErrorRate": 1e-6,
        "twoQubitJointMeasurementErrorRate": 1e-6,
        "tGateErrorRate": 0.01
    }
}

定義済みの量子ビット パラメーターの渡し

定義済みの量子ビット パラメーターをプログラムで指定するには、2 つの方法があります。 実行時qsharp.estimateにクラスの量子ビット モデル名をqubitParams選択できます。 たとえば、量子ビット パラメーターを選択 "qubit_maj_ns_e6" するには、次のように記述します。

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e6"
                    },
                })

を使用してQubitParams、量子ビット パラメーターをクラスEstimatorParams渡すこともできます。 たとえば、量子ビット パラメーターを選択 MAJ_NS_E6 するには、次のように記述します。

from qsharp.estimator import EstimatorParams, QubitParams

params = EstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E6 # qubit_maj_ns_e6 qubit parameter

qsharp.estimate("RunProgram()", params=params)

定義済みの量子ビット パラメーターをカスタマイズする

定義済みの量子ビット パラメーターをカスタマイズするには、名前を指定し、その他の値を更新します。 たとえば、"qubit_maj_ns_e4" の 2 量子ビットジョイント測定の誤差率を下げるには、次のように記述します。

qsharp.estimate("RunProgram()", params=
                {"qubitParams": {
                        "name": "qubit_maj_ns_e4",
                        "twoQubitJointMeasurementErrorRate": 1e-5,
                    },
                })

または、リストの形式で指示を渡すことができます。

from qsharp.estimator import EstimatorParams, QubitParams

params = MicrosoftEstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E4
params.qubit_params.two_qubit_joint_measurement_error_rate = 1e-5

ゲートベースの量子ビットの量子ビット パラメーター

Python 識別子 データの種類 Description
name string 量子ビット モデルの名前
instruction_set "gate_based" 基になる量子ビット テクノロジ
one_qubit_measurement_time time 文字列 単一量子ビット測定 ($t_{\rm meas}$) の操作時間 (ns)
one_qubit_gate_time time 文字列 単一量子ビット ゲート ($t_{\rm gate}$) の操作時間 (ns)
two_qubit_gate_time time 文字列 ns 単位の 2 量子ビット ゲートの動作時間
t_gate_time time 文字列 単一量子ビット非クリフォード ゲートの動作時間 (ns)
one_qubit_measurement_error_rate float 単一量子ビット測定のエラー 率
one_qubit_gate_error_rate float 単一量子ビット クリフォード ゲートのエラー 率 ($p$)
two_qubit_gate_error_rate float 2 量子ビット クリフォード ゲートのエラー 率
t_gate_error_rate float 単一量子ビットの非クリフォード状態を準備するためのエラー率 ($p_T$)
idle_error_rate float アイドリングに対応するエラー率

次のコードは、ゲート ベースの命令セットにカスタム量子ビット パラメーターを指定する方法を示しています。

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "gate_based"
params.qubit_params.t_gate_error_rate = 0.03
params.qubit_params.t_gate_time = "10 ns"
params.qubit_params.idle_error_rate = 0.02

Note

指定しない場合、値の既定値は two_qubit_gate_time 〗、既定値one_qubit_gate_timetwo_qubit_gate_error_ratet_gate_error_rate 〗、既定値one_qubit_measurement_error_rateidle_error_rateone_qubit_gate_error_rateは .t_gate_time

Majorana 量子ビットの量子ビット パラメーター

Python 識別子 データの種類 Description
name string 量子ビット モデルの名前
instruction_set "majorana" 基になる量子ビット テクノロジ
one_qubit_measurement_time time 文字列 単一量子ビット測定 ($t_{\rm meas}$) の操作時間 (ns)
two-qubit_joint_measurement_time time 文字列 ns での 2 量子ビット測定の動作時間
t_gate_time time 文字列 単一量子ビット非クリフォード ゲートの動作時間 (ns)
one_qubit_measurement_error_rate float 単一量子ビット測定のエラー 率
two_qubit_joint_measurement_error_rate float 2 量子ビット測定のエラー 率
t_gate_error_rate float 単一量子ビットの非クリフォード状態を準備するためのエラー率 ($p_T$)
idle_error_rate float アイドリングに対応するエラー率

必要なすべての値を持つ Majorana ベースの命令セットの最小テンプレートは次のとおりです。

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()

params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "majorana"
params.qubit_params.one_qubit_measurement_time = "10 ns"
params.qubit_params.one_qubit_measurement_error_rate = 0.01

Note

指定しない場合、値の既定値は two_qubitJointMeasurementTime 〗、既定値one_qubit_measurement_timetwo_qubit_joint_measurement_error_ratet_gate_error_rate 〗、既定値one_qubit_measurement_error_rateidle_error_rateone_qubit_measurement_error_rateは .t_gate_time

に対 one_qubit_measurement_error_rate して、測定読み出し two_qubit_joint_measurement_error_rateに対応する誤差率、 readoutおよび測定処理 processを指定できます。 これらの値には、数値または数値のペアを <double> 指定できます。 次に例を示します。

params.qubit_params.two_qubit_joint_measurement_error_rate = \
    MeasurementErrorRate(process=0.00005, readout=0.00007)

Note

Majorana 量子ビット測定で単一量子ビットと 2 量子ビットの誤差率に 1 つの数値を指定した場合、読み取り出力エラー率とプロセス エラー レートの両方が等しい場合があります。

重要

指定されていない値はすべて既定値になります。たとえば、 "qubit": {"oneQubitGateTime":"200 ns"} 2 量子ビット ゲート時間と 1 量子ビット ゲート時間の両方が 200 ns であるゲートベースの量子ビットをモデル化します。 単位の場合は、倍精度浮動小数点数の時刻文字列を指定する必要があります。その後に、そのような値のスペースと時間単位を指定する必要があります。可能な時間サフィックスは ns、( µs または us) ms、および s.

量子エラー訂正のスキーム

実用的なスケールの量子アプリケーションを実行するには、量子操作のエラー率が低い必要があります。 通常、これらのエラー レート targets は生の物理量子ビットの機能を超えています。 この制限を克服するために、量子エラー修正 (QEC) とフォールト トレラント計算は、大規模な量子コンピューターの構成要素を形成する 2 つの重要な手法です。 まず、QEC を使用すると、エラーが発生しやすい複数の物理量子ビットを作成し、基になる物理量子ビットよりも量子情報をより適切に保持する、より信頼性の高い論理量子ビットを構築できます。

リソース推定器は、指数モデルを使用して論理誤差率をモデル化するために次の式を使用します。

$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$

ここで、$a$ は交差するプリファクター、$d$ はコード距離、$p$ は物理エラー率、$p^*$ は量子エラー修正しきい値です。 交差前因子$a$ は、シミュレーションのために数値で抽出できます。

コード距離 $d$ は、修正できるエラーの数を制御するパラメーターです。 したがって、コード距離は、論理量子ビットの誤差率と、それらをエンコードするために必要な物理量子ビットの数を定義します。 コード距離に合わせて、精度と物理量子ビットの数の両方が増加します。 QEC スキームの目的は、特定のアプリケーションに対して設定された必要なエラー レートを実現できる最小コード距離を見つけることです。

物理エラー率 $p$ は、デバイスで実行される物理的なクリフォード操作の最悪の場合のエラー 率として、量子ビット パラメーターから抽出されます。 特に、ゲートベースの命令セットを持つ量子ビット パラメーターの場合は $p = {}$ max(one_qubit_measurement_error_rate, one_qubit_gate_error_rate, two_qubit_gate_error_rate)、Majorana 命令セットの量子ビット パラメーターの場合は $p = {}$ max(one_qubit_measurement_error_rate, two_qubit_joint_measurement_error_rate) です。 QEC スキームには、通常、エラー修正によってエラーが抑制されるエラー レートしきい値$p^*$ があります。

Azure Quantum Resource Estimator では、2 つの定義済みの QEC スキーム (サーフェス コードとフローケ コード) がサポートされています。

QEC プロトコル Python API クラス 説明
"surface_code" SURFACE_CODE ゲート ベースのサーフェス コードは、arXiv:1208.0928 と arXiv:1009.3686 に基づいています。 Majorana サーフェス コードは、arXiv:1909.03002 と arXiv:2007.00307 に基づいています。
"floquet_code" FLOQUET_CODE Majorana 量子ビットの場合のみ。 フローケ コードは arXiv:2202.11829 に基づいています

Note

他の値を指定しない限り、QEC スキームの既定値は "surface_code" です。

定義済みの QEC スキームのパラメーター

定義済みの各 QEC スキームの正確なパラメーターは次のとおりです。

{
    "qubitParams": {
        "instructionSet": "GateBased",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.03,
        "logicalCycleTime": "(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "surface_code",
        "errorCorrectionThreshold": 0.0015,
        "crossingPrefactor": 0.08,
        "logicalCycleTime": "20 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
    }
}

{
    "qubitParams": {
        "instructionSet": "Majorana",
    }
    "qecScheme": {
        "name": "floquet_code",
        "errorCorrectionThreshold": 0.01,
        "crossingPrefactor": 0.07,
        "logicalCycleTime": "3 * oneQubitMeasurementTime * codeDistance",
        "physicalQubitsPerLogicalQubit": "4 * codeDistance * codeDistance + 8 * (codeDistance - 1)"
    }
}

定義済みの QEC スキームを渡す

定義済みの QEC スキームを指定するには、2 つの方法があります。 実行時qsharp.estimateにクラスの QEC モデル名を"qecScheme"選択できます。 たとえば、フローケ コードを選択するには、次のように記述します。

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code"
                    }
                })

クラスを使用して、推定パラメーターの一覧をクラスEstimatorParamsQECScheme渡すこともできます。 たとえば、フローケ コードを選択するには、次のように記述します。

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.qec_scheme.name = QECScheme.FLOQUET_CODE # floquet code QEC scheme

qsharp.estimate("RunProgram()", params=params)

定義済みの QEC スキームをカスタマイズする

定義済みの QEC スキームをカスタマイズするには、名前を指定し、その他の値を更新します。 たとえば、フローケ コードの交差のプリファクターを増やすには、次のように記述します。

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "name": "floquet_code",
                        "crossingPrefactor": 0.07,
                    }
                })

Note

指定しない場合は、既定値の"logicalCycleTime"値、"physicalQubitsPerLogicalQubit"既定値"oneQubitMeasurementTime"の値"errorCorrectionThreshold"は .、既定値0.01の場合"crossingPrefactor"0.03は .

QEC スキームをカスタマイズする

Resource Estimator は、$a$ と $p^*$ の "crossingPrefactor" 値を指定することで、上記の数式に基づいてカスタマイズされた QEC スキームを "errorCorrectionThreshold" 抽象化できます。 さらに、1 つの論理演算を実行する時間を指定 "logicalCycleTime"する必要があります。これは、基になる物理量子ビットのコード距離と物理操作時間の想定に依存します。 最後に、2 番目の数式は、コード距離に "physicalQubitsPerLogicalQubit"基づいて 1 つの論理量子ビットをエンコードするために必要な物理量子ビットの数を計算します。

QEC スキームのテンプレートとして、次のコードを使用できます。

qsharp.estimate("RunProgram()", params=
                {"qecScheme": {
                        "crossingPrefactor": <double>,
                        "errorCorrectionThreshold": <double>,
                        "logicalCycleTime": <formula string>,
                        "physicalQubitsPerLogicalQubit": <formula string>
                    }
                })                

数式内では、物理量子ビットのプロパティ、two_qubit_gate_timeone_qubit_measurement_timeエラー修正しきい値、およびtwo_qubit_joint_measurement_time交差プリファクターに基づいて、論理量子ビットに対して計算されたコード距離の変数と、物理量子ビット パラメーターから対応するフィールドから値が取得される変数eccDistance、、を使用one_qubit_gate_timeできます。 時間変数。 eccDistance 数式を記述 logicalCycleTime するために使用できます。 数式 physicalQubitsPerLogicalQubit の場合のみ eccDistance 使用できます。

エラー予算

合計誤差予算 $\epsilon$ は、アルゴリズムの全体的な許容誤差、つまりアルゴリズムの許容故障確率を設定します。 グローバル値は 0 ~ 1 で、既定値は 0.001 で、0.1% に対応します。 言い換えると、アルゴリズムは 1000 回の実行で最大 1 回失敗できます。 このパラメーターは、アプリケーション固有のものです。

たとえば、整数を考慮して Shor のアルゴリズムを実行している場合、エラー予算の大きな値が許容される可能性があります。これは、出力が実際に入力の主要な要因であることをチェックできます。 一方、ソリューションの問題を解決するアルゴリズムでは、効果的な検証ができないため、エラー予算を少なくしなければならない場合があります。

エラー予算は、次の 3 つの部分の合計に対応します。

$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$

論理エラー $\epsilon_{\log}$ は論理量子ビットを実装するエラー、T 状態エラー $\epsilon_{\rm dis}$ は蒸留による T 状態の生成エラー、回転ゲート エラー $\epsilon_{\rm syn}$ は任意の角度で回転ゲートを合成するエラーです。

Note

他の値を指定しない限り、エラーバジェット $\epsilon$ は論理誤差、T 状態誤差、回転ゲート誤差の間で均一に分散されます。

蒸留と回転の合成では、それぞれのエラー予算 $\epsilon_{\rm dis}$ と $\epsilon_{\rm syn}$ が、必要なすべての T 状態とすべての必要な回転ゲートに均等に分散されることに注意してください。 入力アルゴリズムに回転ゲートがない場合、エラー予算は論理エラーと T 状態エラーに一様に分散されます。

エラー予算の受け渡し

エラー予算を指定するには、0 ~ 1 の数値を設定する方法が 2 つあります。 実行時 qsharp.estimateにエラー予算を渡すことができます。 たとえば、1/3 のエラー予算を選択するには、次のように記述します。

qsharp.estimate("RunProgram()", params=
                {'errorBudget': 0.333
                })

エラー予算パラメーターをクラスEstimatorParams渡すこともできます。

from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,

params = EstimatorParams()
params.items.error_budget = 0.333 # error budget of 1/3

qsharp.estimate("RunProgram()", params=params)

また、エラー予算の各コンポーネントを個別に指定することもできます。 すべての値の合計はエラー予算の合計であり、0 から 1 の間である必要があります。 量子アルゴリズムに T 状態または回転が含まれていない場合、t_statesrotations値はそれぞれ 0 になります。

次のコードは、T 状態とローテーションでエラー予算パラメーターを指定する方法を示しています。

from qsharp.estimator import EstimatorParams, QubitParams,

params = EstimatorParams()
params.error_budget.logical = 0.01
params.error_budget.t_states = 0.02
params.error_budget.rotations = 0.03

制約

このクラスを"constraints"使用して、T ファクトリ コンポーネント レベルに制約を適用できます。 制約を調整することで、量子ビットの数を減らす、または実行時間を減らして、見積もりを最適化できます。

パラメーター データ型 説明
logical_depth_factor float 実行時間を制御します。 値が 1 より大きい場合、論理サイクルの初期数 (論理深度とも呼ばれます) にこの数が乗算されます。 この値を logical_depth_factor小さくすると、特定の時間内に T ファクトリの呼び出しの数を増やすことができます。その結果、同じ数の T 状態を生成するために必要な T ファクトリ のコピーが少なくなります。 T ファクトリ のコピーの数を減らすと、それに応じてアルゴリズム ランタイムが増加します。 必要な論理エラー率が増加するのはサイクル数が増えるため、合計ランタイムのスケーリング 係数が大きくなる可能性があります。
max_t_factories integer T ファクトリのコピーの最大数。 リソース推定機能は、時間オーバーヘッドを考慮せずに、使用される物理量子ビットの数を最小限に抑える T ファクトリ コピーの最適な数を選択することによって必要なリソースを決定します。 このパラメーターは max_t_factories 、コピーの最大数を制限するため、それに応じて論理サイクルの数を調整します。 詳細については、T ファクトリの物理見積もりを参照してください
max_duration time 文字列 アルゴリズムの最大ランタイム。 Resource Estimator は、一度に 1 つまたはmax_physical_qubits制約max_durationのみを受け入れますが、2 つは受け入れません。 指定した場合 max_duration 、Resource Estimator は、指定された最大数によって制約されるソリューション間で最適な見積もり max_physical_qubits を検索しようとします。
max_physical_qubits integer アルゴリズムの物理量子ビットの最大数。 Resource Estimator は、一度に 1 つまたはmax_physical_qubits制約max_durationのみを受け入れますが、2 つは受け入れません。 指定した場合 max_physical_qubits 、Resource Estimator は、指定された最大数によって制約されるソリューション間で最適な見積もり max_duration を検索しようとします。

次のコードは、量子アルゴリズムの制約を指定する方法を示しています。

from qsharp.estimator import EstimatorParams

params = EstimatorParams()

params.constraints.max_duration = "1 s"
params.constraints.logical_depth_factor = 1.5
params.constraints.max_t_factories = 10

Note

指定された max_duration 値または max_physical_qubits 小さすぎて実現可能なソリューションが見つからない場合、リソース推定ツールはエラーを返します。 制約もmax_physical_qubits指定されていないmax_duration場合、Resource Estimator は最短の時間でソリューションを検索することを目的としています。

ヒント

ソリューション空間を使用 max_duration して max_physical_qubits 影響を与えることができます。これらの制約のないソリューションと比較して、より長いランタイムで、量子ビットの数が少ないソリューションを見つける可能性があります。 ランタイムと量子ビットの数の間にはトレードオフが存在します。このトレードオフは、一部のアルゴリズムで効率的に管理でき、さまざまなアルゴリズムに対してさまざまな影響を与えます。 [arXiv:2211.07629] の表 IV は、量子ビット数と量子ダイナミクス アルゴリズムのランタイムの間のトレードオフの効果的な使用を示しています。 詳細については、「時間または量子ビット数制約を使用した量子リソースの推定」サンプルを参照してください

蒸留ユニット

クラスで T ファクトリ蒸留アルゴリズムの仕様をDistillationUnitSpecification指定できます。 この仕様は、事前定義済みまたはカスタムのどちらかです。 蒸留ユニット名 15-1 RM または 15-1 space-efficient を選ぶことで、事前定義済みの仕様を指定できます。

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.name = "15-1 RM" # predefined distillation unit

params.distillation_unit_specifications.append(unit)

どちらの場合も、表記 15-1 は 15 個の入力 T 状態と 1 個の出力 T 状態を表します。 15-1 space-efficient 蒸留ユニットでは、使用する量子ビットが 15-1 RM よりも少なくなりますが、より多くの実行時間が必要です。 詳しくは、「表 VI」をご覧ください。

ヒント

定義済みの蒸留ユニットを使用すると、カスタムの蒸留ユニットと比較してパフォーマンスが向上します。

蒸留ユニットをカスタマイズする

独自の蒸留ユニットをカスタマイズできます。 蒸留ユニットの正確なパラメーターは次のとおりです。

qsharp.estimate("RunProgram()", params=
                    {"distillationUnitSpecifications": {
                        "displayName": <string>, 
                        "numInputTs": <int>,
                        "numOutputTs": <int>,
                        "failureProbabilityFormula": <string>,
                        "outputErrorRateFormula": <string>,
                        "physicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecification": <protocol specific parameters>, 
                        "logicalQubitSpecificationFirstRoundOverride": <protocol specific parameters>, # Only if "logicalQubitSpecification"
                        }
                })

すべての数値パラメーターは正である必要があります。 出力 displayName 結果に蒸留ユニットを表示する方法を指定します。

次のコードは、クラスとクラスを使用して量子アルゴリズムの蒸留単位パラメーターを指定する方法をDistillationUnitSpecificationProtocolSpecificDistillationUnitSpecification示しています。

from qsharp.estimator import EstimatorParams, DistillationUnitSpecification, ProtocolSpecificDistillationUnitSpecification

params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.display_name = "T"
unit.failure_probability_formula = "c"
unit.output_error_rate_formula = "r"
unit.num_input_ts = 1
unit.num_output_ts = 2

physical_qubit_specification = ProtocolSpecificDistillationUnitSpecification()
physical_qubit_specification.num_unit_qubits = 1
physical_qubit_specification.duration_in_qubit_cycle_time = 2
unit.physical_qubit_specification = physical_qubit_specification

数式 failure_probability_formula は、基本的な算術演算、 output_error_rate_formula 定数、および 3 つのパラメーターのみを含むカスタム数式です。

  • clifford_error_rateは、〘とも c表されます。
  • readout_error_rateは、〘とも r表されます。
  • input_error_rateは、〘とも z表されます。

長い表記と短い表記を使用したカスタム数式の次の例を参照してください。 これらの例は、標準実装内で既定で使用される数式を示しています。

パラメーター 長い数式 短い数式
failure_probability_formula "15.0 * input_error_rate + 356.0 * clifford_error_rate" "15.0 * z + 356.0 * c"
output_error_rate_formula "35.0 * input_error_rate ^ 3 + 7.1 * clifford_error_rate" "35.0 * z ^ 3 + 7.1 * c"

少なくとも 1 つのパラメーター physical_qubit_specification を指定するか、指定 logical_qubit_specification する必要があります。 前者のみを提供する場合、蒸留ユニットは物理量子ビットに適用できます。 後者のみを指定する場合は、蒸留ユニットを論理量子ビットに適用できます。 両方が提供される場合、蒸留単位は両方のタイプの量子ビットに適用することができる。

パラメーター logical_qubit_specification_first_round_override は、指定されている場合 logical_qubit_specification にのみ指定できます。 その場合は、蒸留の最初の logical_qubit_specification ラウンドで適用された場合の値をオーバーライドします。 必要なlogical_qubit_specification_first_round_override<protocol specific parameters> は、スキームに従う必要があります。

{
    "numUnitQubits": <int>,
    "durationInQubitCycleTime": <double>
}

パレートフロンティア推定

アルゴリズムのリソースを推定するときは、物理量子ビットの数とアルゴリズムのランタイムとのトレードオフを考慮することが重要です。 アルゴリズムの実行時間を短縮するために、可能な限り多くの物理量子ビットの割り当てを検討できます。 ただし、物理量子ビットの数は、量子ハードウェアで使用可能な物理量子ビットの数によって制限されます。 ランタイムとシステムスケールのトレードオフを理解することは、リソース推定の最も重要な側面の 1 つです。

パレートフロンティア推定は、同じアルゴリズムに対して複数の推定値を提供し、それぞれが量子ビット数とランタイムの間のトレードオフを示します。

Note

Visual Studio Code で [リソース見積もりの計算] Q#オプションを使用してリソース推定 を実行すると、Pareto フロンティア推定が既定で有効になります。

Python で Resource Estimator を実行する場合は、パラメーター"frontier""estimateType" .

result = qsharp.estimate("RunProgram()", params=
                    {"qubitParams": { "name": "qubit_maj_ns_e4" },
                    "qecScheme": { "name": "surface_code" },
                    "estimateType": "frontier", # Pareto frontier estimation
                    }
                )

パレートフロンティア推定の結果を視覚化する場合は、この関数を EstimatesOverview 使用できます。 この関数は、フロンティア推定の結果を表と時空間図に表示します。 詳細については、時空間図を参照してください

from qsharp_widgets import EstimatesOverview

EstimatesOverview(result)

Note

リソース推定ツールの使用中に問題が発生した場合は、[トラブルシューティング] ページチェックするか、お問い合わせくださいAzureQuantumInfo@microsoft.com

次のステップ