你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
什么是 Q# 量子开发工具包?
量子开发工具包 (QDK) 是与 Azure Quantum 服务进行交互所需的 SDK。 它内置于 Azure Quantum 门户,可在其中使用免费托管的 Jupyter Notebook 开发程序。 还可以在计算机上本地安装 QDK,以使用自己的本地开发环境,并使用 Azure Quantum 服务联机和脱机工作。 借助 Quantum 开发工具包,可以生成在量子硬件上运行的程序,或制定在 Azure Quantum 中量子衍生优化求解器上运行的问题。
QDK 包括量子编程语言 Q#,这是一种高级 开源 编程语言,可用于将工作重点放在算法和应用程序级别以创建量子程序。
QDK 支持 Q#、 Qiskit 和 Cirq 进行量子计算,因此,如果你已经在使用其他开发语言,还可以在 Azure Quantum 上运行线路。
QDK 包含独立于 Azure Quantum 服务的独立使用的组件:
- Q# 语言 和 量子库,全部开源。
- 模拟当前和未来量子计算机的量子模拟器,以便可以运行和调试用 Q#编写的量子算法。
- Visual Studio 2022 和 Visual Studio Code的扩展,并与 Jupyter Notebook 集成。
量子开发工具包入门 Q# 和
若要立即开始,可以在 Azure Quantum 门户中浏览 Q#,而无需进行任何安装。 有关详细信息,请参阅 Q# 和 Azure Quantum 笔记本入门。
有关其他开发环境选项,请参阅 设置 Quantum 开发工具包。
量子编程语言 Q#
Q# 是一种 开源的高级编程语言,用于开发和运行量子算法。 它是量子开发工具包 (QDK) 的一部分,设计为与硬件无关,可扩展到各种量子应用程序,并优化执行。 有关 Q# 语言开发项目的详细信息,请参阅 GitHub 上的 Q# 和核心库设计存储库。
作为一种编程语言,Q# 从 Python、C# 和 F# 中汲取了熟悉的元素,并支持使用循环、if/then 语句和常用数据类型编写程序的基本过程模型。 它还引入了新的量子特定数据结构和操作,例如 repeat-until-success 和自适应相位估计,这些结构和操作允许量子和经典计算的集成。 例如,经典程序的流控制可以基于量子测量的结果。
量子和经典计算的集成
Q# 是一种提供高级抽象的独立语言。 没有量子态或线路的概念;相反,Q# 在语句和表达式方面实现程序,与经典的编程语言非常类似。 不同的量子功能(例如支持函子和控制流构造)可帮助表示相位估计和量子化学算法等内容。
Q# 语言支持集成丰富的经典计算和量子计算。 这样可以支持随机游走相位估计等自适应算法的简洁表达式,这些算法难以直接在固定量子门序列的线路模型中表达。
Q# 支持算法执行过程中的常规经典控制流。 特别是,经典流控制以量子测量结果为依据,这样可以更轻松地编写依赖于中间测量结果的东西。 例如,可以轻松地用 Q# 表示概率算法(如 Grover 搜索)所需的循环,而不必返回到经典驱动程序来测试结果是否满足 oracle 并在不满足时重新运行。
量子比特作为不透明引用
在 Q# 中,量子比特这种资源在需要时通过运行时请求,当不再使用时返回。 这与经典语言处理堆内存的方式类似。
在 Q# 中,量子比特被建模为不透明的数据类型,该类型表示对特定的双态量子系统的引用,无论是物理还是逻辑系统(已纠错),均可对其执行量子操作。 这是量子比特的操作视图:即,量子比特由可对其执行的操作定义的。
运行时决定从程序中的量子比特变量到实际逻辑或物理量子比特的映射,该映射可能会延迟到知道目标设备的拓扑和其他详细信息之后。 运行时负责确定允许算法执行的映射,包括执行期间所需的所有量子比特状态传输和重新映射。
在 Q# 中使用的表示形式具有一个有趣的含义:所有实际的量子计算都是通过副作用来完成的。 无法直接与计算机的量子态交互;它根本不具备软件表示形式, 而是对具有修改量子态的副作用的量子比特实体执行操作。 实际上,计算机的量子态是一个不透明的全局变量,除非通过一小组取值函数基元(度量值),否则无法访问它。这些取值函数也会对量子态产生副作用,因此实际上是“包含结果的赋值函数”,而不是比真正的取值函数。
遵守物理定律
量子程序需要遵守物理定律。 例如,在 Q# 中无法复制量子比特的状态或直接访问量子比特状态。
因此,Q# 无法直接内省到量子比特的状态或量子力学的其他属性,这就保证了可在任何量子计算机上实际执行 Q# 程序。 相反,Q# 程序能够调用操作和函数,例如 DumpOperation operation,以从量子比特中提取允许验证和状态检查以便于使用模拟器进行调试的经典信息。 有关详细信息,请参阅测试和调试。
与硬件无关
Q# 与硬件无关,这意味着它提供了用于一种方法来表达和利用功能强大的量子计算概念,而与硬件未来的发展方式无关。 为了可以在各种应用程序中使用,Q# 支持生成可重用的组件和抽象层。 为了通过不断增长的量子硬件大小实现性能,Q# 量子编程语言可确保应用程序和开发工作的可伸缩性。 尽管此类计算的完整复杂性要求进行进一步的硬件开发,但 Q# 程序可旨在 Azure Quantum 中的各种量子硬件后端上运行。
执行高效
Q# 语言侧重于表达信息,以优化量子组件的执行,该执行独立于从中调用这些组件的上下文。 Q# 使开发人员能够传达其计算知识,以便编译器能够就如何将计算知识转换为指令做出明智的决策,同时利用开发人员无法获取的端到端应用程序相关信息。
若要详细了解 QDK 功能和适合 Q# 程序的常规部分,请参阅 Q# 量子编程语言用户指南。
使用 QDK 的量子开发工作流
编译并运行量子程序时,QDK 会创建量子模拟器的实例,并将 Q# 代码传递给它。 该模拟器使用 Q# 代码创建量子比特(量子粒子的模拟)并应用转换来修改其状态。 然后将模拟器中的量子操作结果返回到程序。 在模拟器中隔离 Q# 代码可确保算法遵循量子物理学定律,还确保这些算法可在量子计算机上正确运行。
编写和运行 Q# 程序所需的一切(包括 Q# 编译器、Q# 库和量子模拟器)都预先部署到了 Azure 门户的托管 Jupyter Notebook 中。 QDK 也可从本地计算机安装和运行,因此你可以在本地使用首选的 IDE 和语言,并将作业提交到 Azure Quantum 上的量子硬件或基于云的模拟器,或者使用本地模拟器。 有关详细信息,请参阅配置量子开发环境。
下图显示了量子程序从构思到在 Azure Quantum 上完成实现的阶段,以及每个阶段 QDK 提供的工具。
注意
可以对工作流的所有步骤使用相同的 Q# 代码。 简而言之,可能必须调整代码的某些部分,以适应当前硬件的限制。 但从长远来看,你将能够在各种模拟器和硬件提供商之间进行切换,而无需修改任何代码。
编写量子程序
Q# 程序可编译为独立的应用程序,在 Jupyter Notebook 中运行,或者可由使用 Python 或 .NET 语言编写的主机程序调用。
如果想要开始练习和编写 Q# 程序而不想安装其他软件,可使用 Azure 门户的 Azure Quantum 工作区中提供的托管 Jupyter Notebook。 示例库包含许多带批注的笔记本示例,你可选择想要了解的示例,然后在基于云的模拟器或真实的量子计算机上运行它。
如果你更喜欢本地开发环境,可使用带 IQ# 内核的 Jupyter Notebook 或适用于 Visual Studio Code 和 Visual Studio 2022 的 QDK 扩展来创建 Q# 程序,然后在量子硬件或基于云的模拟器或本地模拟器上运行它们。
无论你更喜欢哪种环境,都可以按照 Q# 教程开始编写量子程序来探索量子概念,例如叠加、纠缠、Grover 量子算法和其他量子现象。
如果想要试用 Q#,但没有 Azure 帐户,又不想在本地安装 QDK,则可以在联机 Jupyter Notebooks 中使用 Binder 运行 Q# 示例。
探索特定于域的库
Q# 库 将帮助你保持代码的高级别,从而使你能够运行复杂的量子操作,而无需设计低级别的操作序列。 新的 Q# 项目自动包含 Q#标准库,该标准库提供了一组非常有用的基本函数和操作,可将其用于在 Q# 中编写量子程序。
除了标准库之外,QDK 还包括量子化学库(用于在量子计算机上模拟量子动力学和电子结构问题)、量子机器学习库(它提供了顺序分类器的实现,这些分类器利用量子计算来运行混合量子/经典机器学习试验)和量子数值库(它可为广泛的数字功能提供支持)。
在模拟器中运行程序
编写程序后,QDK 会提供一组量子模拟器(用于模拟量子系统行为的经典程序),以便运行程序的一个小实例,并查看它的功能,而无需访问实际的硬件。 可在全态量子模拟器、有限范围的 Toffoli 模拟器、稀疏模拟器(针对量子比特数目较多的系统)上运行量子程序,甚至可以使用噪声模拟器来模拟受噪声影响的 Q# 程序。
请参阅量子模拟器的完整列表。
估算资源
运行量子硬件之前,需要确定程序是否可以在现有硬件上运行,以及将会消耗多少资源。 可以使用 跟踪模拟器 来估计所需的量子比特和量子门数,并调试属于量子程序的经典代码。
还可以将量子程序提交到 Azure 门户 中的 Azure Quantum 资源估算器目标。 Azure Quantum 资源估算器通过考虑量子比特参数、量子纠错代码和错误预算的假设来计算布局后的物理资源估算。 它是免费的,需要 Azure 帐户。
将作业提交到 Azure Quantum 服务
Azure Quantum 是 Azure 的一项云量子计算服务,其中包含一组的多样化的量子解决方案和技术。 Azure Quantum 可确保提供一条开放、灵活且经得起未来考验的量子计算路径,使你能够在量子硬件上运行程序。 你可以在多个量子系统上运行 Qiskit、Cirq 和 Q# 程序。 有关受支持的硬件提供程序的当前列表,请参阅量子计算提供程序。
提示
首次用户将自动获得 500 美元 (美元的免费) Azure Quantum 额度 ,以便与每个参与的量子硬件提供商一起使用。 如果你已用完所有额度,且需要更多额度,可以申请 Azure Quantum 额度计划。
创建 Azure Quantum 工作区后,就可以通过首选的开发环境(本地或联机)向 Azure Quantum 提交 Q# 程序(也称为作业)。 有关详细信息,请参阅如何提交 Q# 作业。 还可运行和提交用 Qiskit 或 Cirq 编写的量子线路。
下图显示提交作业后的基本工作流:
Azure Quantum 提供了业界领先公司当前提供的一些最引人注目、最多样化的量子资源。 利用 Azure Quantum 和 QDK,你可以编写量子计算和量子衍生优化程序,并将其提交到 Azure Quantum,以在量子硬件和优化求解器上运行。
后续步骤
如果想要了解详细信息,Quantum Katas 详细地介绍了有关量子计算概念(例如常见的量子操作)和量子比特操作方法的信息。