Codex 与 Claude 定制 CUDA 核:技能驱动开发

教程Hugging Face2026年2月13日8 分钟阅读
Codex 与 Claude 定制 CUDA 核:技能驱动开发
Hugging Face 团队构建了一个智能体技能(Skill),能教会 Claude Code 和 Codex 等编码智能体如何编写可直接投入生产的 CUDA 核。他们用 diffusers 和 transformers 库中的真实模型进行了测试,智能体成功生成了包含 PyTorch 绑定和基准测试的完整工作内核。

我们构建了一个智能体技能(Skill),专门用于教会编码智能体如何编写可直接投入生产的 CUDA 核。然后,我们让 Claude 和 Codex 针对两个真实目标进行开发:一个是 diffusers 库的 LTX-Video 视频生成流程,另一个是 transformers 库的 Qwen3-8B 大语言模型。智能体为两者都生成了可工作的内核,包括正确的 PyTorch 绑定和基准测试,实现了端到端的自动化。

编写 CUDA 核很难。编写能正确集成到 transformersdiffusers 中的 CUDA 核更难。这里有特定架构的内存访问模式、向量化策略、Warp Shuffle 归约操作,以及十几个足以绊倒经验丰富开发者的集成陷阱。这恰恰是那种专业化、高风险、适合智能体技能大显身手的问题。

我们为编码智能体提供了它们所需的领域知识,例如:针对哪种 GPU 架构、如何构建一个内核构建器(kernel-builder)项目、何时使用共享内存而非寄存器、如何编写 PyTorch 绑定。剩下的工作由智能体完成。如果你用过 LLM 训练技能 或读过 《我们让 Claude 去教开源模型》,会对这个模式感到熟悉:将领域专业知识打包成技能,让智能体去解决问题。

为什么需要一个内核技能?

Kernel Hub 解决了定制硬件内核的分发问题。你可以通过一个简单的 get_kernel 调用从 Hub 加载预编译的内核,无需构建,无需配置标志。然而,仍然需要有人来编写这些内核。这个技能就是为了填补这个空白。

CUDA 内核开发涉及的知识面非常广:

  • 针对每一代 GPU(如 H100、A100、T4)的硬件特定优化指南,它们有不同的计算能力、共享内存大小和带宽特性。
  • 在库层面,diffuserstransformers 有不同的模块层次结构、归一化约定和集成模式。自定义内核需要在 PyTorch 中注册,才能被 torch.compile 识别。
  • 在分发层面,内核可能依赖特定的 CUDA、PyTorch 和 Python 版本,这会产生庞大的环境矩阵。

这些领域知识往往散落在文档标签页和 Stack Overflow 的回答里。一个智能体技能可以将它们打包成可按需加载的上下文。

首先,我们来看看如何立即使用这个技能,然后再深入探讨我们是如何对生成的内核进行基准测试的。

安装技能

该技能随 kernels 库一起发布。只需一条命令即可将其安装到你的编码智能体中:

code
# 我们需要从 main 分支安装 kernels
pip install git+https://github.com/huggingface/kernels.git#subdirectory=kernels
kernels skills add cuda-kernels --claude

这会将技能放入 .claude/skills/cuda-kernels/ 目录,Claude Code 和 Cursor 会自动识别。对于其他智能体:

code
# Codex
kernels skills add cuda-kernels --codex

# OpenCode
kernels skills add cuda-kernels --opencode

# 自定义目标路径
kernels skills add cuda-kernels --dest ./my-agent/skills/

# 全局安装(在所有项目中可用)
kernels skills add cuda-kernels --global

# 覆盖现有安装
kernels skills add cuda-kernels --claude --force

安装完成后,就可以向你的智能体发出提示了:

code
为 transformers 库中的 Qwen3-8B 模型,构建一个面向 H100 的向量化 RMSNorm 内核。

或者,你可以提出更开放的要求:

code
为 transformers 库中的 Qwen3-8B 模型,构建一个面向 H100 的优化注意力内核。将其与 PyTorch 基线进行基准测试,并验证端到端性能的提升。

智能体可以读取技能,选择合适的架构参数,生成 CUDA 源代码,编写 PyTorch 绑定,设置 build.toml,并创建基准测试脚本。

如果你正在开发更复杂的内核,或者技能未涵盖的架构特定优化,该技能也提供了基础的构建块和模式供你起步。我们也欢迎对技能本身做出贡献。

技能包含什么?

该技能大约包含 550 个 Token 的结构化指导,外加参考脚本、GPU 优化指南、故障排除文档和完整的工作示例。像 Codex 和 Claude 这样的智能体编码工具可以读取这些内容,并生成一个可工作的内核项目。

它涵盖了:

  • 针对 H100、A100 和 T4 的 NVIDIA GPU 架构感知优化(计算能力、内存带宽、共享内存大小、块大小调整)
  • 针对 diffuserstransformers 的集成模式,包括每个库特有的陷阱
  • 支持 BF16、FP16 和 FP32 的向量化内存访问模式的内核模板
  • 用于独立内核微基准测试和端到端流程比较的基准测试工作流
  • 通过 get_kernel 实现的 HuggingFace Kernel Hub 集成,用于加载社区内核
code
.claude/skills/cuda-kernels/
├── SKILL.md                              # 主要说明文件(约550个Token)
├── scripts/
│   ├── benchmark_example.py              # 端到端基准测试模板
│   ├── benchmark_rmsnorm.py              # 独立内核微基准测试
│   ├── ltx_kernel_injection_example.py   # Diffusers 集成模式示例
│   ├── transformers_injection_example.py # Transformers 集成模式示例
│   └── huggingface_kernels_example.py    # Kernel Hub 集成示例
└── references/
    ├── diffusers-integration.md          # Diffusers 指南(含陷阱)
    ├── transformers-integration.md       # Transformers 指南
    ├── huggingface-kernels-integration.md
    ├── h100-optimization-guide.md
    ├── a100-optimization-guide.md
    ├── t4-optimization-guide.md
    ├── kernel-templates.md
    └── troubleshooting.md

当智能体加载这个技能时,它就获得了从“给我写个 RMSNorm 内核”到一个可构建、可基准测试的项目所需的一切。它会通过 grep 和 glob 在技能目录中查找相关文件和目录。因此,以易于查找的方式构建技能结构很重要。

智能体被指示按照 references/kernel-templates.md 中的模板生成内核,并生成一个完整的内核项目:

code
examples/your_model/
├── kernel_src/
│   └── rmsnorm.cu              # 向量化 CUDA 内核
├── torch-ext/
│   ├── your_kernels/__init__.py
│   └── torch_binding.cpp       # PyTorch C++ 绑定
├── benchmark_rmsnorm.py        # 微基准测试脚本
├── build.toml                  # kernel-builder 配置
├── setup.py                    # pip install -e .
└── pyproject.toml

我们在两个真实目标上测试了这个流程。

内核基准测试:Diffusers (LTX-Video on H100)

智能体为 diffusers 库的 LTX-Video 视频生成流程构建了 RMSNorm、RoPE 3D、GEGLU 和 AdaLN 内核。完整示例位于 examples/ltx_video/。我们针对 H100 优化了 RMSNorm 内核。所有基准测试均在 H100 80GB HBM3 GPU 上以 BFloat16 精度运行。

如果你想查看生成的内核,请访问此示例

独立 RMSNorm 基准测试

首先,我们将独立的 RMSNorm 内核性能与 PyTorch 基线进行比较。这是优化流程中的主要加速点。

独立 RMSNorm 基准测试 ltx-video

形状自定义内核 (ms)PyTorch (ms)加速比
[1x1024x2048]0.0390.0641.64x
[2x1024x2048]0.0400.0731.82x
[4x1024x2048]0.0520.0931.78x
[1x4096x2048]0.0520.0931.79x
[2x4096x3072]0.1020.2092.04x
[1x8192x2048]0.0830.1501.81x
[4x4096x3072]0.1730.3932.26x

平均加速比:1.88倍,带宽效率达到 H100 理论带宽(3,350 GB/s)的 34.7%

端到端视频生成 (49帧, 30步, H100 80GB)

接下来,我们比较优化内核与基线(无编译)以及 torch.compile 基线的端到端视频生成性能。

端到端基准测试 ltx-video

配置时间 (s)it/s加速比
基线(无编译)2.8712.581.00x
生成的优化内核2.7013.521.06x
基线 + torch.compile2.1419.051.34x
优化内核 + torch.compile2.0118.451.43x

RMSNorm 在 LTX-Video 中约占总体计算量的 5%。剩余时间花在注意力机制、线性投影和 VAE 解码上。单一类型的内核带来 6% 的端到端加速,与这个计算分布是一致的。

内核基准测试:Transformers (Qwen3-8B on H100)

智能体为 transformers 库的 Qwen3-8B 大语言模型构建了一个 RMSNorm 内核,该模型在 32 层中包含 65 个 RMSNorm 模块。完整示例位于 examples/qwen3_8b/。我们针对 H100 优化了 RMSNorm 内核。所有基准测试均在 H100 80GB HBM3 GPU 上以 BFloat16 精度运行。

如果你想探索这个内核,请查看这里

独立 RMSNorm 基准测试

我们再次将独立的 RMSNorm 内核性能与 PyTorch 基线进行比较。

独立 RMSNorm 基准测试 qwen3-8b

平均加速比:1.94倍,带宽效率达到 H100 理论带宽(3,350 GB/s)的 22.3%

形状自定义内核 (ms)PyTorch (ms)加速比
[1x128x4096]0.0400.0621.58x
[1x512x4096]0.0380.0641.69x
[1x1024x4096]0.0370.0711.90x
[1x2048x4096]0.0450.0912.03x
[1x4096x4096]0.0710.1502.12x
[4x512x4096]0.0560.0931.67x
[8x256x4096]0.0450.0922.06x
[1x8192x4096]0.1090.2692.47x

加速比随序列长度增加而提升:128 个 Token 时为 1.58 倍,8192 个 Token 时达到 2.47 倍。对于长上下文推理,自定义内核大约能将 RMSNorm 的延迟减半。

将你的内核发布到 Hub

智能体给你一个可工作的内核。Kernel Hub 让你可以分享它,这样任何人都可以在无需编译的情况下加载它。以下是从智能体输出到发布内核的完整路径。

1. 验证项目结构

智能体生成的项目已经遵循 kernel-builder 的布局:

code
your_kernel/
├── build.toml               # 构建配置
├── kernel_src/
│   └── rmsnorm.cu           # CUDA 内核源代码
└── torch-ext/
    ├── torch_binding.cpp    # 注册 Torch 算子
    └── your_kernels/
        └── __init__.py      # 包装 _ops 的 Python API

build.toml 告诉 kernel-builder 要构建什么。智能体会为你生成这个文件,包括针对目标 GPU 的正确 cuda-capabilities

code
[general]
name = "your_kernels"
backends = ["cuda"]

[torch]
src = ["torch-ext/torch_binding.cpp"]

[kernel.rmsnorm]
backend = "cuda"
src = ["kernel_src/rmsnorm.cu"]
depends = ["torch"]
cuda-capabilities = ["9.0"]  # H100

2. 使用 Nix 构建所有变体

Kernel Hub 的内核必须支持所有最近的 PyTorch 和 CUDA 配置。kernel-builder 的 Nix flake 会自动处理这个问题。将示例 flake.nix 复制到你的项目中并运行:

code
nix flake update
nix run .#build-and-copy -L

这会为每个必需的 PyTorch/CUDA 变体构建内核,并将结果放在 build/ 目录中。为了加速构建,可以启用 HuggingFace Nix 缓存:

code
nix run nixpkgs#cachix -- use huggingface

3. 创建 Hub 仓库并推送

在 Hub 上创建一个模型仓库并上传构建好的内核:

code
huggingface-cli repo create your-org/your-kernel --type model
huggingface-cli upload your-org/your-kernel ./build

4. 其他人只需一行代码即可加载

一旦发布,任何人都可以在零编译的情况下使用你的内核:

code
from kernels import get_kernel

rmsnorm = get_kernel("your-org/your-kernel")

get_kernel 会检测用户的 Python、PyTorch 和 CUDA 版本,并下载匹配的预编译二进制文件。无需构建,无需配置标志,通常几秒钟内即可就绪。

技能和 Hub 是互补的。技能负责开发。Hub 负责分发。用技能构建一个内核,用基准测试脚本验证它,发布到 Hub,它就成了所有人的一行代码。

我们开发了一个智能体技能(Agent Skill),专门教编程智能体如何编写生产级 CUDA 核函数。然后,我们让 Claude 和 Codex 瞄准了两个真实目标:一个 diffusers 流水线和一个 transformers 模型。智能体为两者都生成了可工作的核函数,包括正确的 PyTorch 绑定和端到端的基准测试。我们对这些核函数进行了基准测试,发现优化后的核函数在独立性能和端到端性能上都能带来加速。

相关资源

本文编译自 Custom Kernels for All from Codex and Claude,版权归原作者所有。

觉得有用?分享给更多人

获取每周 AI 工具精选

工具推荐、实战教程和生态洞察,每周更新。

相关文章

本文分享了如何将 GitHub Copilot SDK 集成到 React Native 应用中,构建一个名为 IssueCrush 的 Issue 智能分类工具。核心方案是服务端集成模式,解决了 SDK 依赖 Node.js 环境的问题,并详细介绍了生命周期管理、提示工程、响应处理和优雅降级等关键实现模式。

教程GitHub·3月24日·8 分钟

Starlette 1.0 发布,最大的变化是引入了基于异步上下文管理器的 lifespan 机制。作者利用 Claude 的 Skill 功能,让 AI 克隆代码库并学习新版本特性,然后成功生成了一个包含项目、任务、评论和标签的完整任务管理应用。

教程Simon Willison·3月22日·5 分钟

评论