练习 - Azure Quantum 资源估算器入门
在上一单元中,你了解到 Azure Quantum 资源估算器采用三个主要输入参数:物理量子比特参数、量子误差更正(QEC)方案和错误预算。
现在,让我们使用资源估算器进行一些练习。 在本单元中,你将使用资源估算器来估算简单量子程序的物理资源要求。
安装必需包
若要使用资源估算器,请从 Azure Quantum 开发工具包(QDK)安装最新的 qsharp 和 qsharp-widgets Python 包。
python -m pip install --upgrade qsharp qsharp-widgets
如果尚未安装适用于 Visual Studio Code 的 QDK 扩展(VS Code),请参阅 “安装 QDK 扩展”。
在 Jupyter 笔记本中创建量子算法
让我们在 Jupyter 笔记本中编写量子算法。 若要在 VS Code 中使用 QDK 创建 Jupyter 笔记本,请执行以下步骤:
打开 VS Code。
打开 “视图 ”菜单,然后选择 “命令面板”。 此时会显示一个输入框。
在输入框中,输入并选择“ 创建:新建 Jupyter Notebook”。
在笔记本的第一个单元格中,导入
qsharp包和EstimateDetails函数:import qsharp from qsharp_widgets import EstimateDetails选择“ + 代码 ”按钮以添加新单元格。
将以下
RandomBit代码复制到新单元格:%%qsharp /// # Sample /// Random Bit /// /// # Description /// This Q# program generates a random bit by setting a qubit in a superposition /// of the computational basis states |0〉 and |1〉, and returning the measurement /// result. operation RandomBit() : Result { // Qubits are only accessible for the duration of the scope where they // are allocated and are automatically released at the end of the scope. use qubit = Qubit(); // Set the qubit in superposition by applying a Hadamard transformation. H(qubit); // Measure the qubit. There is a 50% probability of measuring either // `Zero` or `One`. let result = M(qubit); // Reset the qubit so it can be safely released. Reset(qubit); return result; }
估计量子算法的资源
运行资源估算器来估算运行 RandomBit 作所需的物理资源。 如果未指定任何参数,则资源估算器使用以下默认参数值:
-
qubit_gate_ns_e3,用于量子比特模型 -
surface_code,用于错误纠正代码 - 0.001,用于错误预算
若要运行资源估算器,请执行以下步骤:
添加新单元格并将以下代码复制到该单元格:
result = qsharp.estimate("RandomBit()") EstimateDetails(result)该
qsharp.estimate函数创建一个结果对象,该对象包含资源估算器中的信息。 我们将result传递给EstimateDetails函数,该函数在下拉列表中显示一组包含资源估算器输出的表。展开第一个名为“物理资源估计”的表。 此表显示运行时、每秒可靠的量子作以及运行算法所需的量子比特数。
物理资源估计 值 运行时 2 微秒 rQOPS 3.00M 物理量子比特 300 该
RandomBit作需要 300 个物理量子位,需要两微秒才能运行。再次选择 “物理资源评估” 下拉列表来收起表格。
若要检查其他表,请选择一个下拉列表以展开相应的表。 例如,选择 “逻辑量子比特参数 ”下拉列表。 此表显示代码距离为 5,每个逻辑量子比特有 50 个物理量子比特。
逻辑量子比特参数 值 QEC 方案 surface_code码距 5 物理量子比特 50 逻辑周期时间 2 微秒 逻辑量子比特错误率 3.00e-5 交叉前因子 0.03 错误更正阈值 0.01 逻辑周期时间公式 (4 * twoQubitGateTime+ 2 *oneQubitMeasurementTime) *codeDistance物理量子比特公式 2 * codeDistance*codeDistance使用
jobParams字段访问可以传递给作业的所有目标参数,并检查未指定的参数的默认值。 创建新单元格并将以下代码复制到该单元格:result['jobParams']运行新单元格并检查输出:
{'qecScheme': {'name': 'surface_code', 'errorCorrectionThreshold': 0.01, 'crossingPrefactor': 0.03, 'distanceCoefficientPower': 0, 'logicalCycleTime': '(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance', 'physicalQubitsPerLogicalQubit': '2 * codeDistance * codeDistance', 'maxCodeDistance': 50}, 'errorBudget': 0.001, 'qubitParams': {'instructionSet': 'GateBased', 'name': 'qubit_gate_ns_e3', 'oneQubitMeasurementTime': '100 ns', 'oneQubitGateTime': '50 ns', 'twoQubitGateTime': '50 ns', 'tGateTime': '50 ns', 'oneQubitMeasurementErrorRate': 0.001, 'oneQubitGateErrorRate': 0.001, 'twoQubitGateErrorRate': 0.001, 'tGateErrorRate': 0.001, 'idleErrorRate': 0.001}, 'constraints': {'maxDistillationRounds': 3}, 'estimateType': 'singlePoint'}
对于此算法,资源估算器使用 qubit_gate_ns_e3 量子比特模型、surface_code 纠错码以及 0.001 的错误预算。 这些参数是默认值,因为在调用资源估算器时未指定这些参数的值。
更改默认值并再次估算资源
若要使用默认值以外的参数值运行估算器,请在调用资源估算器时为参数指定其他值。 让我们更改量子比特模型、QEC 方案和错误预算。
更改量子比特模型
估算在 Majorana 计算机上运行相同算法的成本。 要做到这一点,请在调用资源估算器时传递qubitParams参数,并将name字段设置为qubit_maj_ns_e6。
在新单元格中,复制并运行以下代码:
result_maj = qsharp.estimate("RandomBit()", params={
"qubitParams": {
"name": "qubit_maj_ns_e6"
}})
EstimateDetails(result_maj)
展开输出中的下拉列表,了解与基于入口的计算机相比,Majorana 计算机的资源成本有何差异。
更改 QEC 方案
接下来,使用 Floquet QEC 方案估算 Majorana 计算机上相同算法的成本。 要做到这一点,请在调用资源估算器时传递qecScheme参数,并将name字段设置为floquet_code。
在新单元格中,复制并运行以下代码:
result_maj = qsharp.estimate("RandomBit()", params={
"qubitParams": {
"name": "qubit_maj_ns_e6"
},
"qecScheme": {
"name": "floquet_code"
}})
EstimateDetails(result_maj)
展开输出中的下拉列表,了解 Floquet QEC 方案的资源成本与图面代码方案相比有何差异。
更改错误预算
最后,估算与先前估计相同的参数的成本,但将错误预算增加到 10%。 为此,调用资源估算器时,将值设置为 0.1 的参数传递 errorBudget 。
在新单元格中,复制并运行以下代码:
result_maj = qsharp.estimate("RandomBit()", params={
"qubitParams": {
"name": "qubit_maj_ns_e6"
},
"qecScheme": {
"name": "floquet_code"
},
"errorBudget": 0.1})
EstimateDetails(result_maj)
祝贺! 你已成功使用资源估算器来估算运行简单量子算法所需的物理资源。 还自定义了参数,以查看它们如何影响资源估算值。
在下一个单元中,你将估计更复杂的量子程序所需的资源:Shor 算法。