你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
target自定义资源估算器的参数
本文介绍如何自定义 target Azure Quantum 资源估算器的参数,以匹配你target正在使用的计算机特征。 资源估算器使用这些参数来估计在量子计算机上运行量子算法所需的资源。
注意
如果在使用资源估算器时遇到任何问题,请查看 “故障排除”页。
先决条件
安装了 Python 和 Pip 的 Python 环境。
最新版本的 Visual Studio Code 或打开网页版 VS Code。
最新的 Azure Quantum
qsharp
和qsharp-widgets
包。python -m pip install --upgrade qsharp qsharp-widgets
目标参数
资源估算器计算资源的估计,例如量子比特数和运行时,需要使用给定量子比特技术以及一组固定的体系结构选择来实现给定量子算法。
因此,资源估算器采用一组输入,其中包含预定义的值,以便轻松入门:
- 物理 量子比特模型,用于定义基础物理量子比特的属性。
- 量子误差更正 (QEC) 方案,这是假定的量子误差更正方案。
- 错误 预算,即允许的总体错误,即允许程序取消访问的次数。
- 组件级别的约束 ,即逻辑周期数和 T 工厂副本数。
- 用于指定 T 工厂酿酒算法的提取单位 。
- Pareto 边界估计 用于为同一算法运行多个量子比特数和运行时的估计。
提示
如果已经知道某个操作的一些预先计算的估计值,还可以合并这些估算器并优化资源估算器的执行。 有关详细信息,请参阅 如何将已知估计值与资源估算器一起使用。
物理量子比特参数
当资源估算器为物理量子比特假设建模时,它使用两个不同的物理指令集来操作量子比特。 物理指令集可以是基于门的指令集,也可以是 Majorana 指令集。 基于门的指令集提供单量子比特度量、单量子比特门(包括 T 门)和双量子比特门。 Majorana 指令集提供物理 T 门、单量子比特度量和双量子比特联合度量运算。
可以从六个预定义的量子比特参数中进行选择,其中四个参数使用基于门的指令集,另外两个使用 Majorana 指令集。 这些量子比特模型涵盖一系列运算时间和错误率,可用于充分探索实现实际量子应用所需的资源成本。
量子比特参数 | Python API 类 | 说明 |
---|---|---|
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" |
GATE_NS_E3 , GATE_NS_E4 |
操作时间和保真度可能与未来版本的 超导 transmon 量子比特或 旋转量子比特相对应,这些量子比特通常具有纳米秒政权中的操作时间。 对于这些量子比特,假设入口和测量操作分别采用 50 ns 和 100 ns。 单量子比特和双量子比特门误差率假定为实际 target$10^{-3}$,而 10^{-4}$ 作为纵向扩展系统的乐观target。 |
"qubit_gate_us_e3" , "qubit_gate_us_e4" |
GATE_US_E3 , GATE_US_E4 |
操作时间和保真度可能与基于 离子的量子比特的未来版本相对应,后者通常具有微秒政权中的运算时间。 根据离子量子比特的典型假设,假设门和测量操作采用 100μs。 单量子比特克利福德门的错误率是 10^{-3}$ 作为现实 target 的,10^{-4}$ 作为乐观 target值,而单量子比特非克利福德门(T 门)的错误率为 $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 误差率)假定为实际 target$10^{-4}$ ,而 $10^{-6}$ 作为乐观target。 此体系结构中的非 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 |
string | 量子比特模型的名称 |
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
注意
如果未指定,则默认值two_qubit_gate_time
t_gate_time
one_qubit_gate_time
、默认值two_qubit_gate_error_rate
one_qubit_gate_error_rate
t_gate_error_rate
和默认值以及默认值one_qubit_measurement_error_rate
的值。idle_error_rate
Majorana 量子比特的量子比特参数
Python 标识符 | 数据类型 | 说明 |
---|---|---|
name |
string | 量子比特模型的名称 |
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 | 与 idling 对应的错误率 |
基于 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
注意
如果未指定,则默认值two_qubitJointMeasurementTime
t_gate_time
one_qubit_measurement_time
、默认值two_qubit_joint_measurement_error_rate
one_qubit_measurement_error_rate
t_gate_error_rate
和默认值以及默认值one_qubit_measurement_error_rate
的值。idle_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 n 秒。 对于单位,需要指定时间字符串,即双精度浮点数,后跟空格和此类值的时间单位,如果可能的时间后缀为 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
, 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 资源估算器支持两个预定义的 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。 |
注意
除非指定其他值,否则 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 模型名称。 例如,若要选择软体代码,请编写:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code"
}
})
还可以使用类将估计参数列表传递给EstimatorParams
类。QECScheme
例如,若要选择软体代码,请编写:
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,
}
})
注意
如果未指定,则默认值"logicalCycleTime"
"oneQubitMeasurementTime"
"errorCorrectionThreshold"
"physicalQubitsPerLogicalQubit"
和默认值、默认值0.01
和默认值0.03
的值。"crossingPrefactor"
自定义 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
one_qubit_measurement_time
two_qubit_gate_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_{\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 状态或旋转,则其值t_states
rotations
可能分别为 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 |
时间字符串 | 算法的最大运行时。 资源估算器目前只接受其中一个或max_physical_qubits 约束,但不接受两个max_duration 约束。 如果 max_duration 指定了,则资源估算器会尝试查找受指定最大数字约束的解决方案中的最佳估计 max_physical_qubits 值。 |
max_physical_qubits |
integer | 算法的最大物理量子比特数。 资源估算器目前只接受其中一个或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 工厂提取算法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 RM
相比,15-1 space-efficient
蒸馏单位使用的量子比特更少,但需要更多运行时。 有关详细信息,请参阅表 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
公式是具有基本算术运算、常量和仅三个参数的自定义公式:
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 边界估计为同一算法提供了多个估计值,每个估计都显示了量子比特数与运行时之间的权衡。
注意
如果使用“计算资源估算”选项在 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。