生成式人工智能/大语言模型

利用 NVIDIA CUDA-Q,AI 编码助手助力大规模量子应用开发

在整个软件开发领域,AI 编码助手已变得无处不在。开发者越来越多地使用 GitHub Copilot、Amazon CodeWhisperer 和 Cursor 等工具来提高计算任务的工作效率。这些工具使您能够快速生成、调试和理解代码;简化工作流程;以及增强跨项目的协作。

虽然 AI 编码助手在经典计算领域已经风靡一时,但其在 量子计算 中的应用才刚刚开始受到关注。这一应用是 AI 实现量子计算 的众多方式之一。本文将探讨如何利用领先的 AI 辅助集成开发环境 (IDE) 之一 Cursor NVIDIA CUDA-Q (高性能混合量子应用平台) 开发代码。

CUDA-Q 是一个 开源 平台,集成了 GPU、CPU 和 QPU,可实现可扩展的混合量子计算。从学生、量子研究人员、 生命科学家 到利用当今 最先进的 GPU 超级计算机 的 HPC 科学家,各种用户目前都在使用 CUDA-Q。

借助 AI 编码助手,开始使用 CUDA-Q 和大规模开发量子应用从未如此简单。以下各节将演示如何使用 Cursor:

  • 生成 CUDA-Q 代码
  • 查询代码库和文档
  • 将现有代码移植到 CUDA-Q

这些示例将展示 AI 工具如何简化大规模构建和加速 CUDA-Q 应用的流程,这些流程包括使用 PyTorch、pandas 和 LangChain 等工具对应用进行优化,以及使用 NVIDIA 的 cuOpt 和 Megatron 等工具对应用进行加速。此外,这些示例还将展示如何使用 Stable Diffusion 和 Llama 等模型对应用进行优化,以及如何使用 Jetson 和 Google 的 GPU 等硬件对应用进行加速。同时,这些示例还将展示如何使用 Python 和 Hugging Face 的 Transformers 库等工具对应用进行开发和部署,以及如何使用 Arm 和 Anaconda 等工具对应用进行管理和维护。最后,这些示例还将展示如何使用 Siemens 的 DPU 等硬件对应用进行加速,以及如何使用 Llama 3.1-70B-Instruct 和 Falcon 180B 等模型对应用进行优化。

开始使用 

首先,下载并安装 CUDA-Q Cursor 。安装 CUDA-Q 的方法是拉取 CUDA-Q Docker 镜像 并运行容器。可以在 CUDA-Q 快速入门 中找到 PyPI Python 安装说明和 C++安装指南。

CUDA-Q 容器运行后,下载并安装 Cursor。Cursor 的外观和感觉与 Microsoft Visual Studio Code 非常相似(Cursor 是从 VSCode 分叉而来的)。然后,将 Cursor 附加到 CUDA-Q 容器并打开环境。该环境将显示容器中包含的各种 CUDA-Q 示例和教程。Cursor 还可能会提示您安装其检测到的 CUDA-Q 环境所需的其他扩展程序。

Screenshot of a dropdown menu in the Cursor IDE.
图 1. 使用“Attach to Running Container”选项将光标连接到正在运行的 CUDA-Q 容器

借助新的 Python 笔记本,您可以开始使用 Cursor AI 功能来生成 CUDA-Q 代码。Cursor 提供了一系列基础模型,包括 claude-3.5-sonnet、gpt-4o、cursor-small 等。它可以索引整个代码库,使您能够直接对其进行查询。此外,Cursor 允许您通过在聊天上下文中指定文件、文档和网站来为查询添加上下文,然后再提供答案。它的知识库基于主要的量子计算框架进行训练,因此开箱即可了解 CUDA-Q 语法。请注意,本文中的示例使用了免费版 Cursor 中的 claude-3.5-sonnet 模型。

生成代码 

使用 Cursor 内置聊天窗口 (⌘-L) 开始生成几个 CUDA-Q 示例。要改进 Cursor 的响应,请明确将 CUDA-Q 文档链接到 Cursor 的聊天上下文。在聊天窗口中,输入 @docs,选择 +New doc,然后链接 CUDA-Q 文档的 URL。

例如,在聊天中提问“How do I initialize a CUDA-Q kernel?”

Screenshot of Cursor’s chat window generating a CUDA-Q kernel
图 2. 向 Cursor 询问如何初始化 CUDA-Q 核函数

Cursor 正确输出一个简单的“hello world”示例来定义量子核,从而提供叠加状态。

CUDA-Q 内核 是可以在量子资源上执行的函数。这些示例中的量子资源将是 CPU 模拟后端;但是,CUDA-Q 可以轻松加速 各种规模的 GPU 系统 各种物理 QPU 上的模拟。

您可以要求对代码的某些方面进行解释,或提出后续问题。针对“Show me how to execute the kernel and print the results”(显示如何执行核函数并打印结果)这个问题(图 3),聊天过程会生成 Bell state 示例和解释(图 4)。

Screenshot  of Cursor’s chat generating follow-up code on executing CUDA-Q kernels
图 3. 向 Cursor 询问有关如何执行 CUDA-Q 内核的后续问题
Screenshot of Cursor’s chat giving an explanation of the generated code
图 4. Cursor 对使用示例方法执行 CUDA-Q 核函数所生成代码的说明

要执行代码,请单击“Run as cell”按钮。这将正确输出贝尔态的以下统计信息:

{ 00:504 11:496 }

Measured 00: 504 times
Measured 11: 496 times

您还可以要求聊天生成一个包含参数门的量子神经网络单层的更高级示例:

Screenshot of Cursor generating a quantum neural network layer
图 5. 使用带有参数化门的量子神经网络层的光标生成更高级的 CUDA-Q 示例

聊天会正确生成一个名为 qnn_layer 的核函数,该核函数使用三个参数旋转每个量子位,然后在四个量子位上应用一层纠结门。它提供了以下实用的解释:

Screenshot of Cursor’s explanation for the generated quantum neural network layer
图 6. Cursor 对生成的量子神经网络层的说明

聊天是初学者从头开始生成示例的好方法。已熟悉 CUDA-Q 的用户可以继续在 IDE 中编写代码,并使用 Cursor 的选项卡完成功能,该功能已经了解 CUDA-Q 语法。

查询代码库 

使用聊天功能提出问题,并通过使用@命令明确关联文档和特定文件来直接探索 CUDA-Q 功能。不熟悉的代码库可能具有挑战性,有时可能会隐藏或难以找到有用的功能。虽然阅读文档和梳理源代码通常是熟悉框架的推荐方法,但现实情况是,很少有人有时间或耐心来全面了解此内容。

通过聊天直接查询代码库和文档是了解代码库结构、功能和隐藏功能的一种非常有效的方法。这种方法支持交互式学习,并鼓励后续问题,使用户能够有机地熟悉 CUDA-Q。

您可以使用聊天了解如何返回状态向量而非镜头,并询问 CUDA-Q 提供的其他模拟后端。

Screenshot of querying Cursor’s chat on how to use other CUDA-Q backends
图 7. 使用 Cursor 查询 CUDA-Q 代码库,了解如何使用其他后端。

聊天内容正确指向 get_state 函数,该函数在执行时会生成叠加状态下量子位的实部和虚部:

(0.707107,0)
(0.707107,0)

为了设置不同的模拟目标,聊天提供了另外两个选项,即用于 GPU 加速模拟的 ”density-matrix-cpu” 模拟器和 “nvidia” 目标。其他有用(和正确)的示例包括调用 cudaq.draw 函数来可视化电路:

Screenshot of Cursor giving additional examples of using GPU-accelerated simulation backends
图 8. 使用 GPU 加速的模拟后端示例

运行以下单元(图 9,顶部)将返回电路图(图 9,底部):

An image of Cursor generating an example of how to display quantum circuits (above) with the corresponding output (below).
图 9. 使用 draw 方法 (上) 和相应输出 (下) 显示生成的量子电路的光标生成示例

对于其他可视化工具,Cursor 指出了最新 v0.8 版本 中的一些新 CUDA-Q 功能,用于在 Bloch 球体上可视化量子位状态。

Screenshot of Cursor generating code to visualize the qubit state on the Bloch sphere
图 10. 使用最新 CUDA-Q v0.8 版本的功能生成光标以可视化 Bloch 球体上的量子位状态。

这将生成以下 Bloch 球体可视化:

An image of the Bloch sphere
图 11. 在 CUDA-Q 中对生成的 Cursor 代码进行 Bloch 球体可视化。

它表示状态:

(-0.00150066,-0.00170142)
(0.996383,-0.084946)

它由旋转角度产生:[0.80783041, 3.13705533, 3.77932564]

移植到 CUDA-Q 

您可以使用 Cursor 尝试将其他量子框架中编写的代码移植到 CUDA-Q,以利用 CUDA-Q 的出色性能和可扩展性。

例如,针对“Give me an example of porting Pythonic code from another quantum framework to CUDA-Q”这一查询,Cursor 出色地将 Qiskit 的语法翻译为 CUDA-Q 的语法。

Example Cursor CUDA-Q porting query.
An image of Cursor translating Qiskit code to CUDA-Q
图 12. 将 Qiskit 代码转换为 CUDA-Q 的光标,并突出显示逐行转换

该聊天工具提供了以下关于差异的实用说明:

An image of Cursor explaining the difference between CUDA-Q and Qiskit code that it has ported
图 13. Cursor 有助于解释移植代码中 CUDA-Q 与 Qiskit 的语法区别。

现在,您可以在此代码中利用 CUDA-Q 的性能。

验证输出 

在试验这些示例时,聊天偶尔会产生细微的语法错误,这些错误会在执行代码时导致错误。当出现这种情况时,用户可能需要手动调试错误,尽管有时聊天可以在出现错误时解决问题。

这是否意味着 AI 辅助编码工具毫无用处?当然不是。虽然它们需要人类监督来验证输出,但 AI 辅助编码工具显著提高了生成代码示例的速度和效率,并为代码提供了即时的反馈和解释。

结束语 

AI 编码助手是提高量子开发者工作效率和降低使用 CUDA-Q 开发可扩展、高性能混合量子应用门槛的强大方式。本文展示了诸如 Cursor 等编码助手在生成 CUDA-Q 代码方面的出色表现,为代码库提供了有用的说明,并使其他框架的用户能够利用 CUDA-Q 加速其应用。

立即开始使用 NVIDIA CUDA-Q Cursor

 

标签