target自訂資源估算器的參數
本文說明如何自定義 target Azure Quantum 資源估算器的參數,以符合您目標的計算機特性。 資源估算器會使用這些參數來估計在量子計算機上執行量子演算法所需的資源。
注意
如果您在使用資源估算器時遇到任何問題,請參閱 疑難解答頁面。
必要條件
已安裝 Python 和 Pip 的 Python 環境。
最新版的 Visual Studio Code 或開啟 Web上的 VS Code。
已安裝 Azure Quantum Development Kit、 Python 和 Jupyter 擴充功能的 VS Code。
最新的 Azure Quantum
qsharp
和qsharp-widgets
套件。python -m pip install --upgrade qsharp qsharp-widgets
Target 參數
資源估算器會計算資源的估計,例如量子位數目和運行時間,這需要使用指定的量子位技術以及一組固定的架構選擇來實作指定的量子演算法。
因此,資源估算器會採用一組輸入,並具有預先定義的值,讓您輕鬆開始使用:
- 實體量子位模型,定義基礎實體量子位的屬性。
- 量子錯誤修正 (QEC) 配置,這是假設的量子誤差修正配置。
- 錯誤 預算,這是整體允許的錯誤,也就是說,允許程式取消輸入次數。
- 元件層級的條件約束 ,也就是邏輯迴圈數目和 T Factory 複本數目。
- 用來指定 T Factory 釀酒演算法的釀酒單位 。
- Pareto 前沿估計 ,針對相同的演算法執行多個量子位和運行時間估計。
提示
如果您已經知道作業的一些預先計算估計值,您也可以合併這些估計值,並將資源估算器的執行優化。 如需詳細資訊,請參閱 如何搭配資源估算器使用已知的估計值。
實體量子位參數
當資源估算器建立實體量子位假設模型時,它會使用兩個不同的實體指令集來操作量子位。 實體指令集可以是 閘道型 或 Majorana。 閘道型指令集提供單一量子位元量值、單一量子位元閘道 (包括 T 閘道) 和雙量子位元閘道。 Majorana 指令集提供實體 T 閘道、單一量子位測量和雙量子位聯合測量作業。
您可以選擇六個預先定義的量子位參數,其中四個具有閘道型指令集,兩個具有Majorana指令集。 這些量子位模型涵蓋一系列作業時間和錯誤率,能夠充分探索啟用實際量子應用程式所需的資源成本。
Qubit 參數 | Python API 類別 | 描述 |
---|---|---|
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" |
GATE_NS_E3 , GATE_NS_E4 |
運行時間和精確度可能對應到未來版本的超導 Transmon 量子位,或微調量子位,這些量子位通常具有納米秒的運行時間。 針對這些量子位,閘道和測量作業會分別採用 50 ns 和 100 ns。 單一量子位和雙量子位網關錯誤率假設為 $10^{-3}$ 作為現實 target,而 $10^{-4}$ 是相應增加系統的樂觀 target 。 |
"qubit_gate_us_e3" , "qubit_gate_us_e4" |
GATE_US_E3 , GATE_US_E4 |
運行時間和精確度可能對應到以離子為基礎的量子位的未來版本,這些量子位通常具有微秒政權的運行時間。 根據離子量子位的典型假設,網關和測量作業假設採用100個100個單位。 單一量子位 Clifford 閘道的錯誤率是 $10^{-3}$ 作為現實 target ,而 $10^{-4}$ 作為開放式 target,而單一量子位非 Clifford 閘關的錯誤率為 $10^{-6}$。 對於兩個量子位網關,錯誤率是 $10^{-3}$ 作為現實 target ,而 $10^{-4}$ 作為開放式 target。 |
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" |
MAJ_NS_E4 , MAJ_NS_E6 |
作業時間和精確度可能對應到未來改善的 Majorana 量子位版本。 針對這些量子位,假設網關和測量作業需要 100 n 秒。 為了考慮硬體中的拓撲保護,單一量子位和雙量子位聯合測量誤差率(Clifford 誤差率)假設為 $10^$ 作為現實,而 $10^{-4}{-6}$ 作為樂觀。targettarget 此架構中的非 Clifford 作業沒有拓撲保護,非 Clifford 實體 T 閘道的錯誤率為 5%。 |
注意
除非指定其他值,否則量子位模型的預設值為 "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
}
}
傳遞預先定義的量子位參數
有兩種方式可以透過程序設計方式指定預先定義的量子位參數。 執行 時qsharp.estimate
,您可以選取 類別的qubitParams
量子位模型名稱。 例如,若要選取 "qubit_maj_ns_e6"
量子位參數,請寫入:
qsharp.estimate("RunProgram()", params=
{"qubitParams": {
"name": "qubit_maj_ns_e6"
},
})
您也可以使用 將量子位參數傳遞至 EstimatorParams
類別。QubitParams
例如,若要選取 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」 中雙量子位聯合測量的錯誤率,請寫入:
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 識別碼 | 資料類型 | 描述 |
---|---|---|
name |
字串 | 量子位模型的名稱 |
instruction_set |
“gate_based” | 基礎量子位技術 |
one_qubit_measurement_time |
時間字串 | ns 中單一量子位測量的作業時間($t_{\rm meas}$) |
one_qubit_gate_time |
時間字串 | ns 中單一量子位網關的作業時間($t_{\rm gate}$) |
two_qubit_gate_time |
時間字串 | ns 中雙量子位網關的作業時間 |
t_gate_time |
時間字串 | ns 中單一量子位非 Clifford 閘道的作業時間 |
one_qubit_measurement_error_rate |
float | 單一量子位測量的錯誤率 |
one_qubit_gate_error_rate |
float | 單一量子位 Clifford 閘道的錯誤率 ($p$) |
two_qubit_gate_error_rate |
float | 雙量子位 Clifford 閘道的錯誤率 |
t_gate_error_rate |
float | 準備單一量子位非 Clifford 狀態的錯誤率($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
注意
若未指定,和的值會預設為one_qubit_gate_time
、two_qubit_gate_error_rate
和 t_gate_error_rate
的值預設為 one_qubit_gate_error_rate
,以及預設值為one_qubit_measurement_error_rate
的值idle_error_rate
。two_qubit_gate_time
t_gate_time
Majorana 量子位的量子位參數
Python 識別碼 | 資料類型 | 描述 |
---|---|---|
name |
字串 | 量子位模型的名稱 |
instruction_set |
“majorana” | 基礎量子位技術 |
one_qubit_measurement_time |
時間字串 | ns 中單一量子位測量的作業時間($t_{\rm meas}$) |
two-qubit_joint_measurement_time |
時間字串 | ns 中雙量子位測量的作業時間 |
t_gate_time |
時間字串 | ns 中單一量子位非 Clifford 閘道的作業時間 |
one_qubit_measurement_error_rate |
float | 單一量子位測量的錯誤率 |
two_qubit_joint_measurement_error_rate |
float | 雙量子位測量的錯誤率 |
t_gate_error_rate |
float | 準備單一量子位非 Clifford 狀態的錯誤率($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
注意
若未指定,和的值會預設為one_qubit_measurement_time
、two_qubit_joint_measurement_error_rate
和 t_gate_error_rate
的值預設為 one_qubit_measurement_error_rate
,以及預設值為one_qubit_measurement_error_rate
的值idle_error_rate
。two_qubitJointMeasurementTime
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)
注意
如果您在Majorana量子位測量中指定單一量子位和雙量子位誤差率的單一數值,則讀取和處理錯誤率都可能相等。
重要
未指定的所有值都會採用預設值,例如,指定 "qubit": {"oneQubitGateTime":"200 ns"}
會建立網關型量子位的模型,其中兩個量子位網關時間和一個量子位網關時間都是 200 ns。 針對單位,您必須指定時間字串,也就是雙精確度浮點數,後面接著空格和這類值的時間單位,可能的時間後綴為 ns
、 µs
(或 us
)、 ms
和 s
。
量子錯誤更正配置
若要執行實際規模的量子應用程式,量子作業應該具有低誤差率。 這些錯誤率 targets 通常超出原始實體量子位的功能。 為了克服這項限制,量子誤差修正 (QEC) 和容錯計算是構成大規模量子計算機建置組塊的兩個重要技術。 首先,QEC 可讓我們撰寫多個容易出錯的實體量子位,並建置更可靠的邏輯量子位,以比基礎實體量子位更好的保留量子位。
資源估算器會使用下列公式,以使用指數模型建立邏輯錯誤率的模型,
$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$
其中 $a$ 是交叉前置因數,$d$ 是代碼距離,$p$ 是實體誤差率,而 $p^*$ 是量子誤差修正閾值。 交叉前置因數$a$ 可以數值方式擷取模擬。
程式代碼距離 $d$ 是一個參數,可控制可更正的錯誤數目。 因此,程式代碼距離會定義邏輯量子位的錯誤率,以及編碼所需的實體量子位數目。 精確度和實體量子位數目都會隨著程式代碼距離而增加。 QEC 配置的目標是尋找可達到特定應用程式所需錯誤率的最小程式代碼距離。
實體錯誤率 $p$ 會從量子位參數擷取為裝置中執行之任何實體 Clifford 作業的最差情況錯誤率。 特別是,針對具有網關型指令集的量子位參數,$p = {}$ max(one_qubit_measurement_error_rate
, two_qubit_gate_error_rate
one_qubit_gate_error_rate
、 ) ,而使用 Majorana 指令集的量子位參數$p = {}$ max(one_qubit_measurement_error_rate
, two_qubit_joint_measurement_error_rate
) 。 QEC 配置通常會有錯誤率臨界值$p^*$,而錯誤修正會抑制錯誤。
Azure Quantum Resource Estimator 支援兩個預先定義的 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量子位。 floquet 程式代碼是以arXiv:2202.11829為基礎。 |
注意
除非指定其他值,否則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 配置。 執行 時qsharp.estimate
,您可以選取 類別的 "qecScheme"
QEC 模型名稱。 例如,若要選取 floquet 程式代碼,請撰寫:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code"
}
})
您也可以使用 類別,將估計參數清單傳遞至 EstimatorParams
類別。QECScheme
例如,若要選取 floquet 程式代碼,請撰寫:
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,
}
})
注意
若未指定,和的值會預設為 "oneQubitMeasurementTime"
、"errorCorrectionThreshold"
0.01
預設值為的值,以及預設值為 0.03
的值"crossingPrefactor"
。"logicalCycleTime"
"physicalQubitsPerLogicalQubit"
自訂QEC配置
資源估算器可以藉由提供 $a$ 和 "errorCorrectionThreshold"
$p^*$ 的值"crossingPrefactor"
,根據上述公式來擷取自定義的 QEC 配置。 此外,您必須指定 "logicalCycleTime"
,也就是執行單一邏輯作業的時間,這取決於程式代碼距離和基礎實體量子位的實體作業時間假設。 最後,第二個公式會 "physicalQubitsPerLogicalQubit"
計算 ,也就是根據程式代碼距離編碼一個邏輯量子位所需的實體量子位數目。
您可以使用下列程式代碼作為 QEC 設定的樣本:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"crossingPrefactor": <double>,
"errorCorrectionThreshold": <double>,
"logicalCycleTime": <formula string>,
"physicalQubitsPerLogicalQubit": <formula string>
}
})
在公式內,您可以使用變數 、、 和 ,其值取自實體量子位參數的對應欄位,以及根據實體量子位屬性、錯誤更正閾值和交叉前置要素計算之程式代碼距離的變數。two_qubit_gate_time
two_qubit_joint_measurement_time
one_qubit_measurement_time
one_qubit_gate_time
eccDistance
時間變數 和 eccDistance
可用來描述 logicalCycleTime
公式。 針對公式 physicalQubitsPerLogicalQubit
,只能 eccDistance
使用 。
錯誤預算
總錯誤預算 $\epsilon$ 會設定演算法的整體容許錯誤,也就是演演算法允許的失敗機率。 其全域值必須介於 0 到 1 之間,預設值為 0.001,對應至 0.1%。 換句話說,允許演算法在1000次執行中最多失敗一次。 此參數是高度特定的應用程式。
例如,如果您正在執行 Shor 的整數分解演算法,可能會容許錯誤預算的大值,因為您可以檢查輸出是否確實是輸入的主要因素。 另一方面,演算法可能需要較小的錯誤預算來解決解決方案的問題,但無法有效率地驗證。
錯誤預算對應於三個部分的總和:
$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$
邏輯錯誤 $\epsilon_{\log}$ 是實作邏輯量子位的錯誤,T 狀態錯誤 $\epsilon_{\rm dis}$ 是透過釀酒產生 T 狀態的錯誤,而旋轉網關錯誤 $\epsilon_{\rm syn}$ 是使用任意角度合成旋轉網關的錯誤。
注意
除非指定其他值,否則錯誤預算 $\epsilon$ 會統一分散在邏輯錯誤、T 狀態錯誤和旋轉網關錯誤之間。
請注意,針對釀酒和旋轉合成,個別的錯誤預算 $\epsilon_{\rm dis}$ 和 $\epsilon_{\rm syn}$ 會分別分散在所有必要的 T 狀態和所有必要的旋轉網關之間。 如果輸入演算法中沒有輪替閘道,錯誤預算會統一散發到邏輯錯誤和 T 狀態錯誤。
傳遞錯誤預算
設定介於 0 到 1 之間的數位,有兩種方式可以指定錯誤預算。 執行 時 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 狀態或旋轉,則和 rotations
的值t_states
可能分別為 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 Factory 元件層級上套用條件約束。 藉由調整條件約束,您可以將估算最佳化,以減少量子位元數目或減少執行時間。
參數 | 資料類型 | 描述 |
---|---|---|
logical_depth_factor |
float | 控制運行時間。 如果其值大於 1,則邏輯週期的初始數目也稱為 邏輯深度,會乘以這個數位。 藉由減少 logical_depth_factor ,您可以在指定時間內增加 T 處理站的調用數目,進而減少產生相同數目 T 狀態所需的 T Factory 複本。 當您減少 T Factory 複本數目時,演算法運行時間會隨之增加。 總運行時間的縮放比例可能會較大,因為必要的邏輯錯誤率會因為週期數目增加而增加。 |
max_t_factories |
整數 | T Factory 複本的數目上限。 資源估算器會藉由選取最佳 T Factory 複本數目來決定所需的資源,以將所使用的實體量子位數目降到最低,而不考慮時間額外負荷。 參數 max_t_factories 會限制複製數目上限,因此會據以調整邏輯週期數目。 如需詳細資訊,請參閱 T Factory 實體估計。 |
max_duration |
時間字串 | 演算法的最大運行時間。 資源估算器目前只接受其中一個 或 max_physical_qubits 條件約束,max_duration 但不接受兩個條件約束。 如果 max_duration 指定了 ,則資源估算器會嘗試在所指定最大數位所限制的解決方案中尋找最佳估計 max_physical_qubits 值。 |
max_physical_qubits |
整數 | 演演算法的實體量子位數目上限。 資源估算器目前只接受其中一個 或 max_physical_qubits 條件約束,max_duration 但不接受兩個條件約束。 如果 max_physical_qubits 指定了 ,則資源估算器會嘗試在所指定最大數位所限制的解決方案中尋找最佳估計 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
注意
如果提供給 max_duration
或 max_physical_qubits
的值太小而無法找到可行的解決方案,資源估算器會傳回錯誤。 max_duration
如果未指定 和 max_physical_qubits
條件約束,資源估算器的目標是尋找最短時間的解決方案。
提示
您可以使用 max_duration
和 max_physical_qubits
來影響解決方案空間,可能會尋找運行時間較長的解決方案,但相較於沒有這些條件約束的解決方案,量子位數目較少。 運行時間與量子位數目之間存在取捨,而某些演算法可以有效率地管理這種取捨,對不同演算法有不同的影響。 [arXiv:2211.07629] 中的表格 IV 說明量子位數目與量子動態演算法運行時間之間的取捨有效使用率。 如需詳細資訊,請參閱 使用時間或量子位條件約束 數目的量子資源估計範例。
擷取單位
您可以使用 類別來提供 T Factory 釀酒演演算法的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
指定如何在輸出結果中顯示釀酒單位。
下列程式代碼示範如何使用 類別和 ProtocolSpecificDistillationUnitSpecification
類別來指定量子演算法DistillationUnitSpecification
的釀酒單位參數。
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
和 output_error_rate_formula
的failure_probability_formula
公式是具有基本算術運算、常數和只有三個參數的自定義公式:
clifford_error_rate
,也表示為c
。readout_error_rate
,也表示為r
。input_error_rate
,也表示為z
。
請參閱下列使用long和short表示法的自定義公式範例。 這些範例說明標準實作內預設使用的公式。
參數 | 長公式 | 簡短公式 |
---|---|---|
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” |
至少應提供其中一個參數 physical_qubit_specification
或 logical_qubit_specification
。 如果只提供前者,則釀酒單位可以套用至實體量子位。 如果只提供後者,則釀酒單位可以套用至邏輯量子位。 如果兩者都提供,則釀酒單位可以套用至這兩種類型的量子位。
只有在指定 時logical_qubit_specification
,才能提供 參數logical_qubit_specification_first_round_override
。 如果是的話,它會覆寫 的值 logical_qubit_specification
,以防在第一輪釀酒時套用。 所需的logical_qubit_specification_first_round_override
值<protocol specific parameters>
應該遵循 配置:
{
"numUnitQubits": <int>,
"durationInQubitCycleTime": <double>
}
帕雷托邊境估計
評估演算法的資源時,請務必考慮實體量子位數目與演算法運行時間之間的取捨。 您可以考慮盡可能配置盡可能多的實體量子位,以減少演算法的運行時間。 不過,實體量子位的數目會受限於量子硬體中可用的實體量子位數目。 瞭解運行時間與系統規模之間的取捨是資源估計最重要的層面之一。
Pareto 前沿估計會針對相同的演算法提供多個估計值,每個估計值都會顯示量子位數目與運行時間之間的取捨。
注意
如果您使用 :計算資源估計選項在 Visual Studio Code Q#中執行資源估算器,則預設會啟用 Pareto 邊界估計。
如果您在 Python 中執行資源估算器,則必須將 參數指定 "estimateType"
為 "frontier"
。
result = qsharp.estimate("RunProgram()", params=
{"qubitParams": { "name": "qubit_maj_ns_e4" },
"qecScheme": { "name": "surface_code" },
"estimateType": "frontier", # Pareto frontier estimation
}
)
如果您想要將 Pareto 邊界估計的結果可視化,您可以使用 函式 EstimatesOverview
。 此函式會顯示數據表和時空圖表中邊界估計的結果。 如需詳細資訊,請參閱 時空圖表。
from qsharp_widgets import EstimatesOverview
EstimatesOverview(result)
注意
如果您在使用資源估算器時遇到任何問題,請參閱 疑難解答頁面,或連絡 AzureQuantumInfo@microsoft.com。