练习 - Azure Quantum 资源估算器入门

已完成

在上一单元中,你了解到 Azure Quantum 资源估算器采用三个主要输入参数:物理量子比特参数、量子误差更正(QEC)方案和错误预算。

现在,让我们使用资源估算器进行一些练习。 在本单元中,你将使用资源估算器来估算简单量子程序的物理资源要求。

安装必需包

若要使用资源估算器,请从 Azure Quantum 开发工具包(QDK)安装最新的 qsharpqsharp-widgets Python 包。

python -m pip install --upgrade qsharp qsharp-widgets

如果尚未安装适用于 Visual Studio Code 的 QDK 扩展(VS Code),请参阅 “安装 QDK 扩展”。

在 Jupyter 笔记本中创建量子算法

让我们在 Jupyter 笔记本中编写量子算法。 若要在 VS Code 中使用 QDK 创建 Jupyter 笔记本,请执行以下步骤:

  1. 打开 VS Code。

  2. 打开 “视图 ”菜单,然后选择 “命令面板”。 此时会显示一个输入框。

  3. 在输入框中,输入并选择“ 创建:新建 Jupyter Notebook”。

  4. 在笔记本的第一个单元格中,导入 qsharp 包和 EstimateDetails 函数:

    import qsharp
    from qsharp_widgets import EstimateDetails
    
  5. 选择“ + 代码 ”按钮以添加新单元格。

  6. 将以下 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,用于错误预算

若要运行资源估算器,请执行以下步骤:

  1. 添加新单元格并将以下代码复制到该单元格:

    result = qsharp.estimate("RandomBit()")
    
    EstimateDetails(result)
    

    qsharp.estimate 函数创建一个结果对象,该对象包含资源估算器中的信息。 我们将result传递给EstimateDetails函数,该函数在下拉列表中显示一组包含资源估算器输出的表。

  2. 展开第一个名为“物理资源估计”的表。 此表显示运行时、每秒可靠的量子作以及运行算法所需的量子比特数。

    物理资源估计
    运行时 2 微秒
    rQOPS 3.00M
    物理量子比特 300

    RandomBit 作需要 300 个物理量子位,需要两微秒才能运行。

  3. 再次选择 “物理资源评估” 下拉列表来收起表格。

  4. 若要检查其他表,请选择一个下拉列表以展开相应的表。 例如,选择 “逻辑量子比特参数 ”下拉列表。 此表显示代码距离为 5,每个逻辑量子比特有 50 个物理量子比特。

    逻辑量子比特参数
    QEC 方案 surface_code
    码距 5
    物理量子比特 50
    逻辑周期时间 2 微秒
    逻辑量子比特错误率 3.00e-5
    交叉前因子 0.03
    错误更正阈值 0.01
    逻辑周期时间公式 (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance
    物理量子比特公式 2 * codeDistance * codeDistance
  5. 使用 jobParams 字段访问可以传递给作业的所有目标参数,并检查未指定的参数的默认值。 创建新单元格并将以下代码复制到该单元格:

    result['jobParams']
    
  6. 运行新单元格并检查输出:

    {'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 算法。