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

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

Note

リソース推定ツールの使用中に問題が発生した場合は、「 トラブルシューティング」ページを参照してください

前提条件

ターゲット パラメーター

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 操作時間と忠実度は、通常はマイクロ秒単位の操作時間を持つ ionsに基づく量子ビットの将来のバージョンに対応する可能性があります。 イオン量子ビットの典型的な仮定に基づいて、ゲートおよび測定の操作は100μsかかると仮定されます。 単一量子ビットのクリフォード ゲートのエラー率は、現実的なtargetとして $10^{-3}$ で、オプティミスティック targetとして $10^{-4}$ ですが、単一量子ビットの非クリフォード ゲート (T ゲート) のエラー率は $10^{-6}$ です。 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_timet_gate_time の値は既定で one_qubit_gate_timetwo_qubit_gate_error_ratet_gate_error_rate の値は既定で one_qubit_gate_error_rateidle_error_rate の値は既定で one_qubit_measurement_error_rateされます。

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_qubitJointMeasurementTimet_gate_time の値は既定で one_qubit_measurement_timetwo_qubit_joint_measurement_error_ratet_gate_error_rate の値は既定で one_qubit_measurement_error_rateidle_error_rate の値は既定で one_qubit_measurement_error_rateされます。

one_qubit_measurement_error_ratetwo_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の実行時に、"qecScheme" クラスの QEC モデル名を選択できます。 たとえば、フローケ コードを選択するには、次のように記述します。

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

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

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

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

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

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

エラー予算

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

ヒント

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

蒸留ユニット

DistillationUnitSpecification クラスを使用して、T ファクトリ蒸留アルゴリズムの仕様を指定できます。 この仕様は、事前定義済みまたはカスタムのどちらかです。 蒸留ユニット名 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は、蒸留ユニットを出力結果に表示する方法を指定します。

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

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

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

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にお問い合わせください。

次のステップ