AI News HubLIVE
站內改寫1 分鐘閱讀

NVIDIA 基於 Tile 的 GPU 程式設計編碼指南:從 cuTile 和 Triton 核心到 Flash Attention

本教程透過 TileGym 探索 NVIDIA 的基於 tile 的 GPU 程式設計,構建一個可在不同硬體上執行的 Colab 工作流程。我們探測 CUDA 環境,嘗試真實的 cuTile 後端,並在標準 Colab GPU 缺乏 cuTile 堆疊時回退到 Triton。我們學習核心 tile 思想:對整個資料塊進行操作,而不是單個執行緒,然後載入、計算和儲存它們。我們實現了向量加法、融合 GELU、行級 softmax、分塊矩陣乘法和 flash attention,並將每個結果與 PyTorch 進行比較。

來源MarkTechPost作者: Sana Hassan

本教程深入探討基於 tile 的 GPU 程式設計,利用 TileGym 構建一個實用的 Colab 工作流程,該流程能在不同的硬體條件下執行。我們首先探測可用的 CUDA 環境,檢查 NVIDIA cuTile 是否可直接執行,當標準 Colab GPU 缺乏所需的 cuTile 堆疊時,回退到 Triton。透過這樣的設定,我們學習 tile 程式設計的核心思想:不再編寫單執行緒程式碼,而是對整個資料塊進行操作,將它們載入到核心中,高效計算,然後儲存結果。我們使用這一模型實現了向量加法、融合 GELU、行級 softmax、分塊矩陣乘法以及 flash attention,並將每個結果與 PyTorch 進行正確性比較和基準測試。

首先進行 CUDA 環境探測,檢查 GPU 計算能力和 CUDA 版本,以確定是否支援 cuTile。如果硬體和軟體條件滿足,則嘗試匯入 cuTile 後端;否則使用 Triton 作為回退。教程強調,即使沒有 cuTile,Triton 核心也能在 Colab 的 T4 GPU 上執行,但 cuTile 需要 CUDA 13.1+ 和 Ampere/Ada/Blackwell GPU。

接下來,我們實現向量加法核心,採用純 tile 操作(load → compute → store),展示最簡的 tile 程式設計模式。然後實現融合 GELU 核心,將兩個操作融合到一個核心中以減少記憶體流量。行級 softmax 核心展示瞭如何透過 tile 規約和線上 softmax 演算法高效處理每行的歸一化。分塊矩陣乘法核心演示了使用 CUDA 張量核心(如果可用)並沿 K 維度累積的 tile 乘法過程。最後,flash attention 核心實現了線上 softmax 注意力計算,避免例項化完整的注意力矩陣,從而節省記憶體並提高效率。

每個核心都提供了完整的程式碼示例和與 PyTorch 的對比測試,包括正確性檢查和效能基準測試。教程最後總結了所學的關鍵概念:tile 程式設計模型(整塊載入/計算/儲存)、核心融合、tile 規約、基於張量核心的 K 迴圈矩陣乘法,以及線上 softmax flash attention 核心。

結論指出,這些概念不僅適用於當前的 Triton 實現,也直接對映到未來支援 cuTile 的硬體上,為 GPU 程式設計提供了可擴充套件的路徑。教程還提供了完整程式碼和筆記本連結,鼓勵讀者進一步探索。