在整個軟件開發領域,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 環境所需的其他擴展程序。

借助新的 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?”

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)。


要執行代碼,請單擊“Run as cell”按鈕。這將正確輸出貝爾態的以下統計信息:
{ 00:504 11:496 }
Measured 00: 504 times
Measured 11: 496 times
您還可以要求聊天生成一個包含參數門的量子神經網絡單層的更高級示例:

聊天會正確生成一個名為 qnn_layer
的核函數,該核函數使用三個參數旋轉每個量子位,然后在四個量子位上應用一層糾結門。它提供了以下實用的解釋:

聊天是初學者從頭開始生成示例的好方法。已熟悉 CUDA-Q 的用戶可以繼續在 IDE 中編寫代碼,并使用 Cursor 的選項卡完成功能,該功能已經了解 CUDA-Q 語法。
查詢代碼庫?
使用聊天功能提出問題,并通過使用@命令明確關聯文檔和特定文件來直接探索 CUDA-Q 功能。不熟悉的代碼庫可能具有挑戰性,有時可能會隱藏或難以找到有用的功能。雖然閱讀文檔和梳理源代碼通常是熟悉框架的推薦方法,但現實情況是,很少有人有時間或耐心來全面了解此內容。
通過聊天直接查詢代碼庫和文檔是了解代碼庫結構、功能和隱藏功能的一種非常有效的方法。這種方法支持交互式學習,并鼓勵后續問題,使用戶能夠有機地熟悉 CUDA-Q。
您可以使用聊天了解如何返回狀態向量而非鏡頭,并詢問 CUDA-Q 提供的其他模擬后端。

聊天內容正確指向 get_state
函數,該函數在執行時會生成疊加狀態下量子位的實部和虛部:
(0.707107,0)
(0.707107,0)
為了設置不同的模擬目標,聊天提供了另外兩個選項,即用于 GPU 加速模擬的 ”density-matrix-cpu”
模擬器和 “nvidia”
目標。其他有用(和正確)的示例包括調用 cudaq.draw
函數來可視化電路:

運行以下單元(圖 9,頂部)將返回電路圖(圖 9,底部):

對于其他可視化工具,Cursor 指出了最新 v0.8 版本 中的一些新 CUDA-Q 功能,用于在 Bloch 球體上可視化量子位狀態。

這將生成以下 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 的語法。


該聊天工具提供了以下關于差異的實用說明:

現在,您可以在此代碼中利用 CUDA-Q 的性能。
驗證輸出?
在試驗這些示例時,聊天偶爾會產生細微的語法錯誤,這些錯誤會在執行代碼時導致錯誤。當出現這種情況時,用戶可能需要手動調試錯誤,盡管有時聊天可以在出現錯誤時解決問題。
這是否意味著 AI 輔助編碼工具毫無用處?當然不是。雖然它們需要人類監督來驗證輸出,但 AI 輔助編碼工具顯著提高了生成代碼示例的速度和效率,并為代碼提供了即時的反饋和解釋。
結束語?
AI 編碼助手是提高量子開發者工作效率和降低使用 CUDA-Q 開發可擴展、高性能混合量子應用門檻的強大方式。本文展示了諸如 Cursor 等編碼助手在生成 CUDA-Q 代碼方面的出色表現,為代碼庫提供了有用的說明,并使其他框架的用戶能夠利用 CUDA-Q 加速其應用。
立即開始使用 NVIDIA CUDA-Q 和 Cursor 。
?