來自 Codex 和 Claude 的適用於所有人的自定義 Kernel
來自 Codex 和 Claude 的適用於所有人的自定義 Kernel
簡而言之:我們構建了一種代理技能,教導編碼代理如何編寫生產級 CUDA kernel。然後,我們將 Claude 和 Codex 指向兩個真實目標:一個 diffusers 管道和一個 transformers 模型。代理為兩者都生成了可用的 kernel,具有正確的 PyTorch 綁定和基準測試,端到端。
編寫 CUDA kernel 很難。編寫能正確與 transformers 和 diffusers 集成的 CUDA kernel 更難。存在架構特定的記憶體存取模式、向量化策略、warp shuffle 歸約,以及許多讓經驗豐富的開發人員也會栽跟頭的整合陷阱。這正是代理技能可以發光的那種專業化、高風險的問題。
我們給予編碼代理它們需要的領域知識,例如要針對哪個 GPU 架構、如何構建 kernel-builder 專案、何時使用共享記憶體與暫存器,以及如何編寫 PyTorch 綁定。代理完成了剩下的工作。如果您使用過 LLM 訓練技能或閱讀過《我們讓 Claude 教導開放模型》,這種模式會讓您感到熟悉:將領域專業知識打包成技能,將代理指向一個問題,然後讓它工作。
為什麼需要 kernel 的技能?
Kernel Hub 解決了自定義硬體 kernel 的分發問題。您可以使用單個 get_kernel 呼叫從 Hub 加載預編譯的 kernel。無需構建,無需標誌。但是,仍然需要有人編寫 kernel。這就是此技能填補的空白。
CUDA kernel 開發具有殘酷的表面積:
這是會迷失在文檔標籤和 Stack Overflow 回答中的領域知識。代理技能將其打包到按需加載的上下文中。
首先,讓我們展示如何立即使用該技能,然後我們將深入研究我們如何對 kernel 進行基準測試的細節。
安裝技能
該技能與 kernel 庫一起提供。使用單個命令將其安裝到您的編碼代理中:
這會將技能放入 .claude/skills/cuda-kernels/ 中,Claude Code 和 Cursor 會自動拾取它。對於其他代理:
安裝後,提示您的代理:
或者,您可以選擇更開放的方式:
代理可以讀取該技能,選擇正確的架構參數,生成 CUDA 原始碼,編寫 PyTorch 綁定,設定 build.toml,並建立基準測試腳本。
如果您正在處理更複雜的 kernel,或技能中未涵蓋的架構特定優化,那麼該技能會提供基本的構建模組和模式,以幫助您入門。我們也歡迎對技能本身的貢獻。
技能中包含什麼
該技能大約包含 550 個 token 的結構化指導,加上參考腳本、GPU 優化指南、故障排除文檔和完整的可用範例。像 Codex 和 Claude 這樣的代理編碼工具可以讀取它並產生一個可用的 kernel 專案。
它涵蓋:
當代理加載此內容時,它會獲得從「為我編寫一個 RMSNorm kernel」到可構建、可基準測試的專案所需的一切。它將 grep 和 glob 該技能以找到相關的文件和目錄。因此,以易於查找的方式構建該技能非常重要。
指示代理生成符合 references/kernel-templates.md 中模板的 kernel,並產生一個完整的 kernel 專案:
我們在兩個真實目標上測試了這一點。
對 kernel 進行基準測試:Diffusers (LTX-Video on H100)
該代理為 LTX-Video(來自 diffusers 的影片生成管道)構建了 RMSNorm、RoPE 3D、GEGLU 和 AdaLN kernel。完整的範例位於 examples/ltx_video/。我們針對 H100 優化了 RMSNorm kernel。兩個基準測試都在 H100 80GB HBM3 上以 BFloat16 精度運行。
如果您想查看生成的 kernel,請前往此範例
隔離的 RMSNorm 基準測試
首先,我們將隔離的 RMSNorm kernel 效能與 PyTorch 基準進行比較。這是優化管道中的主要加速。
平均加速:1.88 倍,頻寬效率:H100 理論值 (3,350 GB/s) 的 34.7%
端到端影片生成(49 幀,30 步,H100 80GB)
接下來,我們將優化 kernel 的端到端影片生成效能與基準(不編譯)和 torch.compile 基準進行比較。
RMSNorm 約佔 LTX-Video 中總計算量的 5%。剩餘時間花費在注意力、線性投影和 VAE 解碼上。來自單個 kernel 類型的 6% 端到端加速與該配置一致。
對 kernel 進行基準測試:Transformers (Qwen3-8B on H100)
該代理為 Qwen3-8B(來自 transformers 的大型語言模型,在 32 層中有 65 個 RMSNorm 模組)構建了一個 RMSNorm kernel。完整的範例位於 examples/qwen3_8b/。我們針對 H100 優化了 RMSNorm kernel。兩個基準測試都在 H100 80GB HBM3 上以 BFloat16 精度運行。
如果您想探索該 kernel,請在此處查看。
隔離的 RMSNorm 基準測試
再次,我們將隔離的 RMSNorm kernel 效能與 PyTorch 基準進行比較。
平均加速:1.94 倍,頻寬效率:H100 理論值 (3,350 GB/s) 的 22.3%
加速隨序列長度而變化:在 128 個 token 時為 1.58 倍,在 8192 個 token 時為 2.47 倍。對於長上下文推論,自定義 kernel 大約將 RMSNorm 延遲減半。
將您的 kernel 發佈到 Hub
該代理為您提供了一個可用的 kernel。Kernel Hub 讓您可以共享它,以便任何人都可以加載它而無需編譯。這是從代理輸出到已發佈 kernel 的完整路徑。
1. 驗證專案結構
代理產生一個已經遵循 kernel-builder 佈局的專案:
build.toml 告訴 kernel-builder 要構建什麼。代理為您生成此內容,包括目標 GPU 的正確 cuda-capabilities:
2. 使用 Nix 構建所有變體
Kernel Hub kernel 必須支援所有最新的 PyTorch 和 CUDA 配置。kernel-builder Nix flake 會自動處理此問題。將範例 flake.nix 複製到您的專案中並運行:
這會為每個需要的 PyTorch/CUDA 變體構建 kernel,並將結果放置在 build/ 中。為了加快構建速度,請啟用 HuggingFace Nix 快取:
3. 建立 Hub 儲存庫並推送
在 Hub 上建立一個模型儲存庫並上傳已構建的 kernel:
4. 其他人只需一行即可加載
發佈後,任何人都可以使用您的 kernel,無需編譯:
get_kernel 檢測使用者的 Python、PyTorch 和 CUDA 版本,並下載匹配的預編譯二進位檔案。無需構建,無需標誌,通常在幾秒鐘內即可準備就緒。
該技能和 Hub 是互補的。該技能處理開發。Hub 處理分發。使用該技能構建 kernel,使用基準測試腳本驗證它,將其發佈到 Hub,它就成為其他人的單行程式碼。
結論
我們構建了一種代理技能,教導編碼代理如何編寫生產級 CUDA kernel。然後,我們將 Claude 和 Codex 指向兩個真實目標:一個 diffusers 管道和一個 transformers 模型。代理為兩者都生成了可用的 kernel,具有正確的 PyTorch 綁定和基準測試,端到端。我們對 kernel 進行了基準測試,發現優化的 kernel 可以在隔離和端到端效能中提供加速。
資源
來自我們部落格的更多文章
OpenEnv 實踐:在真實環境中評估使用工具的代理
我們讓 Claude 構建 CUDA Kernel 並教導開放模型!
社群
·
註冊或
登入以發表評論