你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

集成混合计算

集成混合计算将经典和量子过程结合在一起,允许经典代码在物理量子比特保持活动状态的同时,根据中间线路测量来控制量子运算的执行。 使用常见的编程技术(如嵌套条件、循环和函数调用),单个量子程序可以运行复杂的问题,从而减少所需的拍摄次数。 使用量子比特重用技术,较大的程序可以在使用较少量子比特的计算机上运行。

重要

Visual Studio Code的现代 Quantum Development Kit (新式 QDK) 扩展以及本页示例中的其他组件(如 IQ# 内核、%azuremagic 命令或qsharp.azure模块)目前不支持集成混合量子计算。 若要运行集成的混合作业,请使用 Microsoft Quantum Development Kit (经典 QDK) 。 有关详细信息,请参阅 继续在经典 QDK 中工作

有关更多讨论,请参阅:

集成混合量子计算

已支持 targets

目前, Quantinuumtargets 支持 Azure Quantum 中的集成混合计算模型。

Quantinuum

支持的功能 备注
经典循环 仅限有界循环
任意控制流 使用 if/else 分支
中间线路测量 利用经典寄存器资源
量子位重用 不可用
实时经典计算 32 位无符号整数算术
利用经典寄存器资源

入门

若要开始探索集成的混合编程,建议浏览本文中的 示例 ,或浏览 Azure Quantum 门户的示例库中的 “混合量子计算 ”选项卡。

提交集成的混合作业

提交集成混合作业时,需要在指定 target后添加target功能参数。 除此之外,Azure Quantum 上的集成混合程序与常规量子作业一样运行和管理。 每个作业都有一个作业 ID,结果为单个直方图。

重要

Visual Studio Code的现代 Quantum Development Kit (新式 QDK) 扩展以及本页示例中的其他组件(如 IQ# 内核、%azuremagic 命令或qsharp.azure模块)目前不支持集成混合量子计算。 若要运行集成的混合作业,请使用 Microsoft Quantum Development Kit (经典 QDK) 。 有关详细信息,请参阅 继续在经典 QDK 中工作

我Q#

在Jupyter Notebook中使用 IQ# 内核时,请使用 %azure。target具有 参数的 -capability magic 命令。AdaptiveExecution

%azure.target quantinuum.sim.h1-1e
%azure.target-capability AdaptiveExecution

Python + Q#

使用 qsharp Python 包时,请将 函数与 参数一 qsharp.azure.target_capability 起使用 AdaptiveExecution

qsharp.azure.target("quantinuum.sim.h1-1e")
qsharp.azure.target_capability("AdaptiveExecution")

Azure CLI

使用 Azure CLI 提交作业时,请添加 --target-capability 值为 AdaptiveExecution的参数。

az quantum job submit \
    --target-capability AdaptiveExecution \
    --target-id quantinuum.sim.h1-1e \
    --job-name IterativePhaseEstimation \
    --shots 100 \
    --output table

在会话中提交集成的混合作业

可以使用 和 Python 在会话Q#中合并多个集成的混合作业。 提交会话时,添加 targetCapability 值为 AdaptiveExecution的输入参数。

with target.open_session(name="Q# session") as session:
    target.submit(input_data=QuantumOperation, name="Job 1", input_params={"count":100, "targetCapability":"AdaptiveExecution"}) # First job submission
    target.submit(input_data=QuantumOperation, name="Job 2", input_params={"count":200, "targetCapability":"AdaptiveExecution"}) # Second job submission
    target.submit(input_data=QuantumOperation, name="Job 3", input_params={"count":300, "targetCapability":"AdaptiveExecution"}) # Third job submission

有关详细信息,请参阅 会话入门

注意

尽管会话适用于所有量子计算硬件提供程序,但请注意,Quantinuum targets上当前支持集成的混合量子计算作业。

估算集成混合作业的成本

可以通过先在模拟器上运行 Quantinuum 硬件来估算在 Quantinuum 硬件上运行集成混合作业的成本。

在模拟器上成功运行后:

  1. 在 Azure Quantum 工作区中,选择“ 作业管理”。
  2. 选择提交的作业。
  3. 在“ 作业详细信息 ”弹出窗口中,选择“ 成本估算 ”以查看使用了多少 eHQC (Quantinuum 仿真器信用) 。 此数字直接转换为在 Quantinuum 硬件上运行作业所需的 HQC 数 (Quantinuum 量子信用) 。

成本估算

注意

Quantinuum 将展开整个线路并计算所有代码路径的成本,无论这些路径是否按条件执行。

集成混合示例

以下示例演示集成混合计算的当前功能集。

  • 验证纠缠 GHZ 状态
  • 三量子比特重复
  • 迭代相位估计

先决条件

  • 如果不熟悉 Azure Quantum,则需要 Azure 订阅和 Azure Quantum 工作区才能针对量子硬件运行示例。 有关详细信息,请参阅创建 Azure Quantum 工作区
  • VS Code 和 Quantum Development Kit 本地环境中的 设置。 有关详细信息,请参阅 设置 Quantum Development Kit
  • 确保 VS Code 具有最新版本的 Quantum Development Kit (0.27.258160) 。
    • 在 VS Code 中,选择 Ctrl + Shift + X 并搜索“Microsoft Quantum Development Kit”。

本文中的示例设置为在 Visual Studio (VS) Code 上运行,并使用内置的 Azure 命令行接口 (CLI) 将作业提交到 Azure Quantum。 若要运行这些示例和其他示例的Jupyter Notebook版本,请登录到Azure 门户工作区,并从“示例”库中的“混合量子计算”选项卡查看示例。 可以在云中运行笔记本,也可以下载笔记本并在本地运行。

若要排查集成混合程序的问题,请参阅 集成混合疑难解答

在此示例中,你将了解如何在同一程序中混合经典指令和量子指令,所有这些指令都由量子计算后端完全处理。

有关此示例需要注意的功能:

  • 当量子比特保持一致时,将进行循环和量子比特测量。
  • 例程混合使用经典计算操作和量子计算操作。
  • 无需了解如何为 QPU ((如 FPGA) )旁运行的专用高性能硬件进行编程。
  • 在没有集成混合功能的情况下运行等效程序需要返回每个中间度量结果,然后对数据运行后处理。

创建 VS Code 项目

  1. 在 VS Code 中,创建名为 CheckGHZ 的新Q#独立控制台应用程序项目。

    1. 选择“查看>命令托盘>Q#:创建新项目>独立控制台应用程序
  2. CheckGHZ.csproj 中的配置替换为以下内容:

    <Project Sdk="Microsoft.Quantum.Sdk/0.27.258160">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ExecutionTarget>quantinuum</ExecutionTarget>
        <TargetCapability>AdaptiveExecution</TargetCapability>
      </PropertyGroup>
    </Project>
    
  3. Program.qs 中的代码替换为以下内容:

    namespace Microsoft.Quantum.Samples {
    
        open Microsoft.Quantum.Measurement;
        open Microsoft.Quantum.Intrinsic;
    
        /// # Summary
        /// Counts the number of times measurements of a prepared GHZ state did not match the expected correlations.
        @EntryPoint() // The EntryPoint attribute is used to mark that this operation is where a quantum program will start running.
        operation CheckGHZ() : Int {
            use q = Qubit[3];
            mutable mismatch = 0;
            for _ in 1..10 {
                // Prepare the GHZ state.
                H(q[0]);
                CNOT(q[0], q[1]);
                CNOT(q[1], q[2]);
    
                // Measures and resets the 3 qubits
                let (r0, r1, r2) = (MResetZ(q[0]), MResetZ(q[1]), MResetZ(q[2]));
    
                // Adjusts classical value based on qubit measurement results
                if not (r0 == r1 and r1 == r2) {
                    set mismatch += 1;
                }
            }
            return mismatch;
        }
    }
    
  4. 在 VS Code 的终端窗口中,连接到 Azure Quantum 工作区并设置默认资源。

    az login
    

    注意

    通过运行 az quantum workspace list 登录后,可以在终端窗口中列出 Azure 订阅 ID资源组工作区名称。 或者,可以在 Azure Quantum 工作区的“概述”页上的Azure 门户中找到它们。

    az account set --subscription <MySubscriptionID>
    
    az quantum workspace set --resource-group <MyResourceGroup> --workspace <MyWorkspace> --location <MyLocation>
    
  5. 提交作业并查看结果。 此运行使用大约 10.65 个 eHQC (Quantinuum 模拟器计费单位)

    az quantum job submit \
      --target-id quantinuum.sim.h1-1e \
      --job-name CheckGHZ \
      --target-capability AdaptiveExecution \
      --shots 50
    
    az quantum job output \
      -o table \
      --job-id [job-id]
    

GHZ 输出

后续步骤

分布式混合计算