跳到正文
原文
Hugging Face Blog·· 2026-02-13精选AI 评分69

Hugging Face 发布 CUDA 内核 Agent 技能,让 Codex 与 Claude 自动生成生产级 kernel

Custom Kernels for All from Codex and Claude

AI 导读

Hugging Face 构建了一个 agent skill,教编码智能体编写生产级 CUDA kernel,并让 Claude 和 Codex 针对 diffusers 的 LTX-Video 与 transformers 的 Qwen3-8B 两个真实目标端到端生成了可运行的 kernel,包含正确的 PyTorch 绑定与基准脚本。

推荐理由

Hugging Face 把 CUDA kernel 开发知识封装成可安装的 Agent 技能,并给出两组真实基准,读者可据此判断它在自有项目中的复用价值。

正文 · AI 翻译

oprah custom cuda kernels

tl;dr:我们构建了一个 agent skill,教编码 agent 如何编写生产级 CUDA kernel。然后我们把 Claude 和 Codex 指向两个真实目标:一个 diffusers 流水线和一个 transformers 模型。这些 agent 为两者都产出了可用的 kernel,并配有正确的 PyTorch 绑定和基准测试,端到端完成。

编写 CUDA kernel 很难。编写能与 transformers 和 diffusers 正确集成的 CUDA kernel 更难。这里有架构特定的内存访问模式、向量化策略、warp shuffle 归约,以及一打连经验丰富的开发者都会踩坑的集成陷阱。这正是 agent skill 大放异彩的那种专业化、高风险问题。

我们给编码 agent 提供了它们所需的领域知识,比如该瞄准哪种 GPU 架构、如何组织 kernel-builder 项目、何时使用共享内存而非寄存器,以及如何编写 PyTorch 绑定。剩下的由 agent 完成。如果你用过 LLM 训练 skill 或读过 We Got Claude to Teach Open Models,这个模式会让人觉得熟悉:把领域专业知识打包成一个 skill,把 agent 指向问题,然后让它自己干活。

为什么要为 kernel 做一个 skill?

Kernel Hub 解决了自定义硬件 kernel 的分发问题。你可以通过一次 get_kernel 调用从 Hub 加载预编译的 kernel。无需构建,无需配置标志。然而,仍然需要有人来编写这些 kernel。这正是这个 skill 填补的空白。

CUDA kernel 开发的涉及面极其残酷:

  • 针对每一代 GPU 的硬件特定优化指南。H100、A100 和 T4 各自具有不同的计算能力、共享内存大小和带宽特性
  • 在库方面,diffusers 和 transformers 具有不同的模块层级、归一化约定和集成模式。自定义 kernel 需要在 PyTorch 中注册,才能被 torch.compile 识别。
  • 在分发方面,kernel 可能依赖 CUDA、PyTorch 和 Python 版本,形成庞大的环境矩阵。

这些领域知识往往流失在文档标签页和 Stack Overflow 回答中。agent skill 将其打包成按需加载的上下文。

首先,让我们展示如何立即使用这个 skill,然后我们再深入探讨我们如何对 kernel 进行基准测试的细节。

安装 skill

该 skill 随 kernels 库一起发布。用一条命令将其安装到你的编码 agent 中:

# we need to install kernels from main for this
pip install git+https://github.com/huggingface/kernels.git#subdirectory=kernels
kernels skills add cuda-kernels --claude

这会将 skill 放入 .claude/skills/cuda-kernels/,Claude Code 和 Cursor 会自动识别。对于其他 agent:

# Codex
kernels skills add cuda-kernels --codex

# OpenCode
kernels skills add cuda-kernels --opencode

# Custom destination
kernels skills add cuda-kernels --dest ./my-agent/skills/

# Install globally (available across all projects)
kernels skills add cuda-kernels --global

# Overwrite an existing installation
kernels skills add cuda-kernels --claude --force

安装完成后,向你的 agent 输入提示:

Build a vectorized RMSNorm kernel for H100 targeting the Qwen3-8B model in transformers.

或者,你也可以尝试更开放式的任务:

Build an optimized attention kernel for H100 targeting the Qwen3-8B model in transformers. Benchmark it against the PyTorch baseline and validate improvements in end-to-end performance.

该 agent 可以阅读 skill、选择正确的架构参数、生成 CUDA 源代码、编写 PyTorch 绑定、配置 build.toml,并创建基准测试脚本。

如果你正在处理更复杂的 kernel,或者 skill 中未涵盖的架构特定优化,那么该 skill 提供了让你上手的基础构建块和模式。我们也欢迎对skill 本身的贡献。

skill 中包含什么

该 skill 包含大约 550 个 token 的结构化指导,外加参考脚本、GPU 优化指南、故障排除文档和完整可运行的示例。像 Codex 和 Claude 这样的 agentic 编码工具可以阅读这些内容,并产出一个可用的 kernel 项目。

它涵盖:

  • 针对 H100、A100 和 T4 的 NVIDIA GPU 架构感知优化(计算能力、内存带宽、共享内存大小、块大小)
  • 为diffusers和transformers提供的集成模式,包括各库特有的陷阱
  • 适用于 BF16、FP16 和 FP32 的向量化内存访问模式的内核模板
  • 用于独立内核微基准测试和端到端流水线对比的基准测试工作流
  • 通过 get_kernel 集成 HuggingFace Kernel Hub 以加载社区内核
.claude/skills/cuda-kernels/
├── SKILL.md                              # Main instructions (~550 tokens)
├── scripts/
│   ├── benchmark_example.py              # End-to-end benchmark template
│   ├── benchmark_rmsnorm.py              # Isolated kernel micro-benchmark
│   ├── ltx_kernel_injection_example.py   # Diffusers integration pattern
│   ├── transformers_injection_example.py # Transformers integration pattern
│   └── huggingface_kernels_example.py    # Kernel Hub integration
└── references/
    ├── diffusers-integration.md          # Diffusers guide with pitfalls
    ├── transformers-integration.md       # Transformers guide
    ├── 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 中模板的内核,并生成完整的内核项目:

examples/your_model/
├── kernel_src/
│   └── rmsnorm.cu              # Vectorized CUDA kernel
├── torch-ext/
│   ├── your_kernels/__init__.py
│   └── torch_binding.cpp       # PyTorch C++ bindings
├── benchmark_rmsnorm.py        # Micro-benchmark script
├── build.toml                  # kernel-builder config
├── setup.py                    # pip install -e .
└── pyproject.toml

我们在两个真实目标上对此进行了测试。

对内核进行基准测试:Diffusers(H100 上的 LTX-Video)

智能体为 LTX-Video 构建了 RMSNorm、RoPE 3D、GEGLU 和 AdaLN 内核,这是一个来自 diffusers 的视频生成流水线。完整示例见 examples/ltx_video/。我们针对 H100 优化了 RMSNorm 内核。两项基准测试均在 H100 80GB HBM3 上以 BFloat16 精度运行。

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

独立 RMSNorm 基准测试

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

isolated rmsnorm benchmark ltx-video

表格

形状 自定义(毫秒) PyTorch(毫秒) 加速比
[1x1024x2048] 0.039 0.064 1.64x
[2x1024x2048] 0.040 0.073 1.82x
[4x1024x2048] 0.052 0.093 1.78x
[1x4096x2048] 0.052 0.093 1.79x
[2x4096x3072] 0.102 0.209 2.04x
[1x8192x2048] 0.083 0.150 1.81x
[4x4096x3072] 0.173 0.393 2.26x

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

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

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

e2e benchmark ltx-video

表格

配置 时间(秒) it/s 加速比
基线(无编译) 2.87 12.58 1.00x
生成优化内核 2.70 13.52 1.06x
基线 + torch.compile 2.14 19.05 1.34x
优化 + torch.compile 2.01 18.45 1.43x

RMSNorm 约占 LTX-Video 总计算量的 5%。剩余时间花在注意力、线性投影和 VAE 解码上。单一内核类型带来 6% 的端到端加速与此特征相符。

对内核进行基准测试:Transformers(H100 上的 Qwen3-8B)

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

如果你想探索该内核,请在此处查看。

独立 RMSNorm 基准测试

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

isolated rmsnorm benchmark qwen3-8b

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

表格

形状 自定义(毫秒) PyTorch(毫秒) 加速比
[1x128x4096] 0.040 0.062 1.58x
[1x512x4096] 0.038 0.064 1.69x
[1x1024x4096] 0.037 0.071 1.90x
[1x2048x4096] 0.045 0.091 2.03x
[1x4096x4096] 0.071 0.150 2.12x
[4x512x4096] 0.056 0.093 1.67x
[8x256x4096] 0.045 0.092 2.06x
[1x8192x4096] 0.109 0.269 2.47x

加速比随序列长度扩展:128 tokens 时为 1.58x,8192 tokens 时为 2.47x。对于长上下文推理,自定义 kernel 大致将 RMSNorm 延迟减半。

将你的 kernel 发布到 Hub

Agent 会给你一个可用的 kernel。Kernel Hub 让你可以分享它,这样任何人都无需编译即可加载。以下是从 agent 输出到发布 kernel 的完整路径。

1. 验证项目结构

Agent 生成的项目已经遵循 kernel-builder 的目录结构:

your_kernel/
├── build.toml               # Build configuration
├── kernel_src/
│   └── rmsnorm.cu           # CUDA kernel source
└── torch-ext/
    ├── torch_binding.cpp    # Registers Torch ops
    └── your_kernels/
        └── __init__.py      # Python API wrapping _ops

build.toml 告诉 kernel-builder 要构建什么。Agent 会为你生成这些内容,包括针对目标 GPU 的正确 cuda-capabilities:

[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 中的 kernel 必须支持所有近期的 PyTorch 和 CUDA 配置。kernel-builder Nix flake 会自动处理这一点。将 示例 flake.nix 复制到你的项目中并运行:

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

这会为每个所需的 PyTorch/CUDA 变体构建 kernel,并将结果放入 build/。如需更快的构建,请启用 HuggingFace Nix 缓存:

nix run nixpkgs#cachix -- use huggingface

3. 创建 Hub 仓库并推送

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

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

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

发布后,任何人都可以零编译使用你的 kernel:

from kernels import get_kernel

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

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

Skill 和 Hub 是互补的。Skill 负责开发。Hub 负责分发。用 skill 构建一个 kernel,用基准测试脚本验证它,将其发布到 Hub,它就成了其他人只需一行代码即可使用的东西。

结论

我们构建了一个 agent skill,教会编码 agent 如何编写生产级 CUDA kernel。然后我们让 Claude 和 Codex 针对两个真实目标进行实践:一个 diffusers pipeline 和一个 transformers 模型。Agent 为两者都产出了可用的 kernel,并带有正确的 PyTorch 绑定和基准测试,端到端完成。我们对这些 kernel 进行了基准测试,发现优化后的 kernel 在孤立性能和端到端性能上都能提供加速。

资源

来源:Hugging Face Blog · hf-mirror.com