target自訂資源估算器的參數
本文說明如何自定義 targetAzure Quantum Resource Estimator 的參數,以符合您 target所使用的機器特性。 資源估算器會使用這些參數來估計在量子計算機上執行量子演算法所需的資源。
注意
如果您在使用資源估算器時遇到任何問題,請參閱 疑難解答頁面。
必要條件
已安裝 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
目標參數
資源估算器會計算資源的估計,例如量子位數目和運行時間,這是使用指定量子位技術實作指定量子演算法的必要條件,並使用固定的架構選擇集。
因此,資源估算器會採用一組輸入,其中包含預先定義的值,讓您輕鬆開始使用:
- 實體量子位模型,定義基礎實體量子位的屬性。
- 量子錯誤修正 (QEC) 配置,這是假設的量子錯誤修正配置。
- 錯誤預算,也就是整體允許的錯誤,也就是允許程式無法取得的次數。
- 元件層級的條件約束,也就是邏輯迴圈數目和 T Factory 複本數目。
- 用來 指定 T Factory 擷取演算法的擷取單位。
- Pareto 前方估計 ,以針對相同演算法執行多個量子位和運行時間的估計。
實體量子位參數
當資源估算器建立實體量子位假設模型時,它會使用兩個不同的實體指令集來操作量子位。 實體指令集可以是 閘道型 或 Majorana。 閘道型指令集提供單一量子位元量值、單一量子位元閘道 (包括 T 閘道) 和雙量子位元閘道。 Majorana 指令集提供實體 T 閘道、單一量子位測量和雙量子位聯合測量作業。
您可以選擇六個預先定義的量子位參數,其中四個具有閘道型指令集,以及兩個具有Majorana 指令集。 這些量子位模型涵蓋一系列作業時間和錯誤率,讓您能夠充分探索啟用實際量子應用程式所需的資源成本。
量子位參數 | Python API 類別 | Description |
---|---|---|
"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個單位。 單一量子位網關的錯誤率是 $10^$,而 $10^{-3}{-4}$ 做為開放式target,而單一量子位非多位網關的錯誤率則 (T 網關) 為 $10^${-6}。target 針對兩個量子位網關,錯誤率是 $10^{-3}$ 作為實際 target ,而 $10^{-4}$ 作為開放式 target。 |
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" |
MAJ_NS_E4 , MAJ_NS_E6 |
作業時間和精確度可能會對應到 未來改善的 Majorana 量子位版本。 針對這些量子位,會假設網關和測量作業需要 100 n 秒。 若要考慮硬體中的拓撲保護,單一量子位和兩個量子位聯合測量錯誤率 (一般錯誤率) 假設為 $10^$ 作為實際 ,而 $10^{-4}{-6}$ 作為開放式 。targettarget 此架構中的非 Topord 作業沒有拓撲保護,非實體 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"
},
})
您也可以使用 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」 中雙量子位聯合測量的錯誤率,請寫入:
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 中單一量子位非網關的作業時間 |
one_qubit_measurement_error_rate |
float | 單一量子位測量的錯誤率 |
one_qubit_gate_error_rate |
float | 單一量子位 ($p$) 的錯誤率 |
two_qubit_gate_error_rate |
float | 雙量子位網關的錯誤率 |
t_gate_error_rate |
float | 準備單一量子位非狀態 ($p_T$) 的錯誤率 |
idle_error_rate |
float | 對應至idling的錯誤率 |
下列程式代碼示範如何指定閘道型指令集的自訂量子位參數:
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
注意
未指定時,和的值預設為 、和 t_gate_error_rate
的值two_qubit_gate_error_rate
預設為 one_qubit_gate_error_rate
,預設值為 idle_error_rate
。one_qubit_gate_time
two_qubit_gate_time
t_gate_time
one_qubit_measurement_error_rate
Majorana 量子位的量子位參數
Python 識別碼 | 資料類型 | 描述 |
---|---|---|
name |
字串 | 量子位模型的名稱 |
instruction_set |
“majorana” | 基礎量子位技術 |
one_qubit_measurement_time |
時間字串 | ns 中單一量子位測量的作業時間 ($t_{\rm meas}$) |
two-qubit_joint_measurement_time |
時間字串 | ns 中雙量子位測量的作業時間 |
t_gate_time |
時間字串 | ns 中單一量子位非網關的作業時間 |
one_qubit_measurement_error_rate |
float | 單一量子位測量的錯誤率 |
two_qubit_joint_measurement_error_rate |
float | 雙量子位測量的錯誤率 |
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
注意
未指定時,和的值預設為 、和t_gate_error_rate
的值two_qubit_joint_measurement_error_rate
預設為 ,預設值idle_error_rate
為 one_qubit_measurement_error_rate
。one_qubit_measurement_time
two_qubitJointMeasurementTime
t_gate_time
one_qubit_measurement_error_rate
針對 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}} $$
其中 $d$ 是程式代碼距離,$p$ 是實體錯誤率,而 $p^*$ 是量子誤差校正閾值。 實體錯誤率 $p$ 會從量子位參數擷取,作為裝置中任何實體 以最差的錯誤率擷取。
特別是,$p = {}$ max (one_qubit_measurement_error_rate
、、 one_qubit_gate_error_rate
具有 two_qubit_gate_error_rate
閘道型指令集的量子位參數) ,以及$p = {}$ max (one_qubit_measurement_error_rate
, two_qubit_joint_measurement_error_rate
) 具有 Majorana 指令集的量子位參數。 QEC 配置通常會有錯誤率閾值,$p^*$ 以下的錯誤修正會隱藏錯誤。
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 配置確切參數 (包括跨前置因素$a$,可針對模擬以數值方式擷取,) 如下。
{
"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"
}
})
您也可以使用 QECScheme
類別,將估計參數清單傳遞至 EstimatorParams
類別。 例如,若要選取 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 配置。 例如,若要增加 floquet 程式代碼中的交叉前置因數,請撰寫:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code",
"crossingPrefactor": 0.07,
}
})
注意
未指定時,和的值預設為 、0.01
預設值為 ,預設值為 。預設值"crossingPrefactor"
為 0.03
"oneQubitMeasurementTime"
"logicalCycleTime"
"physicalQubitsPerLogicalQubit"
"errorCorrectionThreshold"
自訂QEC配置
資源估算器可以藉由提供 $a$ 和 "errorCorrectionThreshold"
$p^*$ 的值"crossingPrefactor"
,根據上述公式來抽象化自定義的 QEC 配置。 此外,您需要指定 "logicalCycleTime"
,也就是執行單一邏輯作業的時間,這取決於程式代碼距離和基礎實體量子位的實體作業時間假設。 最後,第二個公式會 "physicalQubitsPerLogicalQubit"
計算 ,也就是根據程式代碼距離編碼一個邏輯量子位所需的實體量子位數目。
您可以使用下列程式代碼作為 QEC 設定的樣本:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"crossingPrefactor": <double>,
"errorCorrectionThreshold": <double>,
"logicalCycleTime": <formula string>,
"physicalQubitsPerLogicalQubit": <formula string>
}
})
在公式內,您可以使用變數 one_qubit_gate_time
、 two_qubit_gate_time
、 one_qubit_measurement_time
和 two_qubit_joint_measurement_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$ 會統一散發,並套用至錯誤 $\epsilon_{\log}$ 以實作邏輯量子位、錯誤預算 $\epsilon_{\rm dis}$ 透過擷取產生 T 狀態,以及錯誤預算 $\epsilon_{\rm syn}$ 以使用任意角度合成旋轉網關。
請注意,針對擷取和旋轉合成,個別的錯誤預算分別為 $\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 Factory 的呼叫數目,因而產生產生相同 T 狀態數目所需的 T Factory 複本數目。 當您減少 T Factory 複本數目時,演算法運行時間會隨之增加。 總運行時間的縮放比例可能會較大,因為必要的邏輯錯誤率會因為額外的週期數目而增加。 |
max_t_factories |
整數 | T Factory 複本的數目上限。 資源估算器會藉由選取最佳 T Factory 複本數目來決定所需的資源,以將所使用的實體量子位數目降到最低,而不考慮時間額外負荷。 參數 max_t_factories 會限制複本數目上限,因此會據以調整邏輯週期數目。 如需詳細資訊,請參閱 T Factory 實體估計。 |
max_duration |
時間字串 | 演算法的最大運行時間。 資源估算器一次只接受其中 max_duration 一個 或 max_physical_qubits 條件約束,但不會接受兩個條件約束。 如果 max_duration 已指定,資源估算器會嘗試找出受指定最大值限制之解決方案之間的最佳估計 max_physical_qubits 值。 |
max_physical_qubits |
整數 | 演演算法的實體量子位數目上限。 資源估算器一次只接受其中 max_duration 一個 或 max_physical_qubits 條件約束,但不會接受兩個條件約束。 如果 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
指定如何在輸出結果中顯示擷取單位。
下列程式代碼示範如何使用 類別和 類別來指定量子演算法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
和 output_error_rate_formula
的failure_probability_formula
公式是具有基本算術運算、常數和只有三個參數的自定義公式:
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” |
至少應提供其中一個參數 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 新領域估計
在估計演算法的資源時,請務必考慮實體量子位數目與演算法運行時間之間的取捨。 您可以考慮盡可能配置多個實體量子位,以減少演算法的運行時間。 不過,實體量子位的數目受限於量子硬體中可用的實體量子位數目。 瞭解運行時間和系統規模之間的取捨是資源估計的其中一個重要層面。
Pareto 新領域估計會提供相同演算法的多個估計值,每一個都會顯示量子位數目與運行時間之間的取捨。
注意
如果您使用 :[計算資源估計值] 選項在Q# Visual Studio Code 中執行資源估算器,則預設會啟用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。
下一步
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應