在过去的十年里,量子计算从学术实验室跃入主流。初创公司和大型公司都在加大努力构建更好的量子计算机。虽然我们还不清楚还有多久才可以利用量子优势处理常见问题,但很明显,现在是时候构建有价值的量子应用所需要的工具了。
首先,我们需要在理解量子算法方面取得进展。去年,NVIDIA 宣布推出 cuQuantum,这是一款用于加速量子计算模拟的软件开发套件 (SDK)。在 GPU 上使用 cuQuantum 模拟量子电路,使算法研究的性能和规模远远超过了目前在量子处理单元 (QPU) 上可以实现的性能和规模。这为理解如何充分利用量子计算机取得突破性进展铺平了道路。
除了改进量子算法之外,我们还需要充分利用 QPU 以及经典计算资源:CPU 和 GPU。7 月 13 日,NVIDIA 宣布推出量子优化设备架构 (QODA),这是一个混合量子-经典计算平台,其使命是实现这一效用。
随着量子计算的发展,所有有价值的量子应用都将采用混合形式,量子计算机将与高性能经典计算协同工作。GPU 纯粹为图形而打造,并已转变为高性能计算 (HPC) 的必备硬件。这需要使用新软件来实现功能强大且直接的编程。量子计算机从科学实验向实用加速器的转变也需要新的软件。
量子软件的新时代将助力实现高性能混合计算,并为更广泛的科学家和创新者增加量子计算机的可访问性。
NVIDIA QODA 是率先用于混合量子-经典计算的平台,其应用涵盖药物研发、化学、天气、金融、物流等领域
量子编程概况
在过去五年中,针对小规模、噪声量子计算架构的量子编程方法得到了发展。这一发展对算法开发者来说意义重大,并使标准量子算法以及混合变分方法的早期原型化成为可能。
由于缺乏量子资源和硬件实施的实用性不足,大多数编程方法都处于纯 Python 级别,支持基于云的远程执行模型。
随着量子架构的改进,以及算法开发者开始考虑现有经典异构计算的真正量子加速,一个问题出现了:我们应该如何在传统的高性能计算环境中支持量子协同处理?
在开发高性能计算编程模型、异构编译器平台和高级应用库方面,NVIDIA 一直是真正的先行者,这些高级应用库使用一个或多个 NVIDIA GPU 加速传统的科学计算工作流。
NVIDIA 将量子计算视为异构高性能计算系统架构的另一个元素,并设想了一种编程模型,将量子协同处理无缝整合到现有的 CUDA 生态系统中。在这方面,目前从 Python 语言层面开始的方法是不够的,最终将限制经典计算资源和量子计算资源的性能集成。
适用于高性能计算的 QODA
NVIDIA 正在开发一个开放性规范,用于在高性能计算环境中对混合量子-经典计算架构进行编程。NVIDIA 将宣布推出 QODA 编程模型规范和相应的 NVQ++ 编译器平台,以实现与后端无关(物理、模拟)、来源单一且使用现代 C++ 的方法,以助力量子加速的高性能计算。
QODA 在本质上可以与现有的经典并行编程模型(例如 CUDA、OpenMP 和 OpenACC)互操作。此编译器实施还可将量子-经典 C++ 源代码表征降级为二进制可执行文件,这些二进制可执行文件原本就面向支持 cuQuantum 的模拟后端。
这种编程和编译工作流通过与 GPU 处理和电路模拟的标准互操作性,为加速混合算法的研究和开发活动提供了一个高性能的编程环境,这些 GPU 处理和电路模拟可从笔记本电脑扩展到分布式多节点、多 GPU 架构。
如代码示例所示,QODA 提供了一种基于核的类 CUDA 编程方法,并将重点放在现代 C++ 上。 你可以将量子设备代码定义为独立的函数对象或带有 __qpu__ 标注的 lambda,以表明将在量子设备上编译和执行这些代码。
通过依靠函数对象而不是自由函数(CUDA 核方法),你可以实现一种构建通用标准量子库函数的高效方法,可以将任何量子核表达作为输入。
这方面的一个简单示例是,标准采样 QODA 函数 (qoda::sample(...)),它采用一个量子核实例和任何要为其评估核的任何具体参数作为输入,并将观察到的量子位测量位字符串的熟悉映射返回到相应的观察次数。
QODA 核程序员可以访问与量子计算相关的某些内置类型(qoda::qubit、qoda::qreg、qoda::spin_op等)、量子门运算以及所有继承自 C++ 的传统经典控制流。
之前我们详细介绍了语言编译方法的一个有趣的方面,即能够编译包含 CUDA 核、OpenMP 和 OpenACC 杂注的 QODA 代码,以及更高级别的 CUDA 库 API 调用。这一功能将使混合量子-经典应用开发者能够真正协同利用多 GPU 处理与量子计算。
未来的量子计算用例将需要进行经典的并行处理,比如数据预处理和后处理、标准量子编译任务和用于量子纠错的校验子译码等。
抢先了解量子-经典应用
变分量子特征求解算法 (VQE) 是一种原型混合量子经典算法,面向嘈杂的短期量子计算架构。VQE 的目标是依靠量子力学的变分原理,计算给定量子力学运算符(如哈密顿算符)对参数化状态制备电路的最低特征值。
你需要使用给定的一组门旋转参数来执行状态制备电路,并执行由量子力学运算符结构决定的一组测量,以计算这些具体参数的期望值。然后,使用用户指定的经典优化器,通过改变这些参数来迭代搜索较低期望值。
借助 QODA 编程,你可以看到通用的类 VQE 算法的外观模型:
所需的主要组件是参数化的 ansatz QODA 核表达式,代码示例中所示为 lambda,采用 std::vector
这个 lambda 的实际主体取决于当前要处理的问题,但你可以自由地使用标准的 C++ 控制流、范围内的量子核调用和量子内部运算的逻辑集来构建此函数。
你需要的下一个组件是在计算期望值时所需的运算符。QODA 使用内置 spin_op 类型表示这些内容,你可以使用 Pauli x(int)、y(int) 和 z(int) 函数调用,以编程的方式来构建这些内容。
接下来,你需要一个经典函数优化器,这是 QODA 语言规范中的一个通用概念,意思是将基于梯度或无梯度的特定优化策略归入子类。
最后,该语言公开了一个标准库函数,用于调用整个 VQE 工作流。它会在 QODA 核实例上进行参数化,该实例对状态准备 ansatz 进行建模,以下值是你需要的运算符:
最小特征值
经典优化实例
变分参数总数
然后,你会返回一个结构化绑定,用于编码状态准备电路的最佳特征值和相应的优化参数。
前面的工作流非常普遍,有助于开发变分算法,这些算法最终在量子核表达式、感兴趣的旋转运算符和经典优化例程方面是通用的。
但它也展示了 QODA 编程模型的基本理念:提供用于描述量子代码表达式的核心概念,然后促进通用标准函数库的实用性,从而实现混合量子经典算法组合。
QODA 早期兴趣计划
量子计算机有望帮助我们解决一些非常重要的问题。我们正在向高性能计算和 AI 已经发挥关键作用的领域中的科学家和专家开放量子计算,并支持将目前较为出色的现有软件与量子软件轻松集成。这将显著加速量子计算机发挥其潜力。
QODA 提供了一个开放平台来实现这一目标,NVIDIA 也很高兴能与整个量子社区合作,使实用的量子计算成为现实。申请参加 QODA 早期兴趣计划,随时了解 NVIDIA 量子计算发展新动态。
审核编辑:汤梓红
评论
查看更多