你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
集成混合计算
集成混合计算将经典和量子过程结合在一起,允许经典代码在物理量子比特保持活动状态的同时,根据中间线路测量来控制量子运算的执行。 使用常见的编程技术(如嵌套条件、循环和函数调用),单个量子程序可以运行复杂的问题,从而减少所需的拍摄次数。 使用量子比特重用技术,较大的程序可以在使用较少量子比特的计算机上运行。
重要
Visual Studio Code的现代 Quantum Development Kit (新式 QDK) 扩展以及本页示例中的其他组件(如 IQ# 内核、%azure
magic 命令或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# 内核、%azure
magic 命令或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 硬件上运行集成混合作业的成本。
在模拟器上成功运行后:
- 在 Azure Quantum 工作区中,选择“ 作业管理”。
- 选择提交的作业。
- 在“ 作业详细信息 ”弹出窗口中,选择“ 成本估算 ”以查看使用了多少 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 项目
在 VS Code 中,创建名为 CheckGHZ 的新Q#独立控制台应用程序项目。
- 选择“查看>命令托盘>Q#:创建新项目>独立控制台应用程序”
将 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>
将 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; } }
在 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>
提交作业并查看结果。 此运行使用大约 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]
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈