用 Claude 写 CUDA 核,再教给开源模型

教程Hugging Face2026年1月28日8 分钟阅读
用 Claude 写 CUDA 核,再教给开源模型
Hugging Face 团队用 Claude Opus 4.5 生成编写 CUDA 核的智能体技能(Agent Skills),再通过 upskill 工具将技能迁移给更小、更便宜的开源模型。实测显示,技能能提升部分模型的准确率,但并非对所有模型都有效。

智能体技能(Agent Skills)最棒的地方在于,它能帮你解决难题。这可以从两个角度看:

  1. 你可以用 Claude Opus 4.5 这类顶级模型去攻克最棘手的任务。
  2. 你可以让能在你笔记本上运行的模型,通过技能学习去处理更困难的问题。

这篇博客将聚焦于后者,展示如何使用一个新工具 upskill,来生成和评估智能体技能,并让更小的模型也能用上这些技能。我们以编写 diffusers 模型 CUDA 核(CUDA kernels)的任务来测试 upskill,但这个过程同样适用于降低成本,或让小型模型处理特定领域的难题。

什么是智能体技能?

简单说,智能体技能就是把模型的上下文定义成文件,比如用 Markdown 写说明,用脚本写代码。这种文件格式让技能易于生成、分享和审查。本质上,它是一种在不同模型和工具间共享能力的实用媒介,在特定领域或难题上尤其有用。

本文将通过一个具体案例来展示这个过程:用 Claude 生成一个技能文件,然后让开源模型用这个技能来完成一项复杂且专业的任务——编写 CUDA 核。我们最初尝试了一个基于现有文档的基础技能,发现它能提升部分模型的性能,但并非全部。在某些情况下,它甚至可能降低性能或增加 token 消耗。下图展示了模型在使用基础技能前后的性能对比。

模型性能对比图

接下来,我们一步步看看如何用 upskill 来提升智能体处理难题的能力,并测量其效果。

1. 让“老师”(Claude Opus 4.5)编写一个核

首先,我们用 Claude Code 交互式地构建一个核,并导出执行轨迹(trace)。我们通过指令、验证和添加文档链接来完成这个过程。这个看似简单的步骤很重要,它能揭示模型最初遇到的挑战。事实上,你可以多次迭代这个过程:用技能的草稿版本尝试解决任务,并用更小的模型进行测试。每次你都可以指导智能体改进技能,并在小模型上测试。

这是我们创建并用来构建核的技能示例。我们从这个智能体执行轨迹开始,其中智能体在少量帮助下成功构建了一个核。

2. 从执行轨迹创建智能体技能

一旦“老师”模型完成了任务,我们需要让它生成一个技能。有几种有效的方法:

  • 在同一会话中,指示智能体为它刚完成的任务创建一个技能文件。
  • 使用 Anthropic 的‘技能创建者’技能,可以在原会话内,也可以基于导出的轨迹开启新会话。
  • 使用 upskill 工具基于轨迹创建技能。

大多数情况下,前两种方法能生成可用的技能。但智能体使用该技能后的性能是未知的。这正是 upskill 的用武之地,因为它还会根据轨迹为你的技能生成测试用例。然后,它会比较两种场景下的结果:使用原始轨迹,或应用技能。如下图所示,原始模型(Claude Opus)在使用技能前后的表现相同。这意味着该技能为这个模型成功捕获了任务。很好!

终端评估结果

3. 将你的技能带给开源、更小或更便宜的模型

最后,我们需要将新创建的技能迁移到我们打算使用的工具或模型上。像 codexcursoropencode 这类工具大多采用一致的技能格式,即一个位于 {agent}/skills/{skill_name}/SKILL.md 的目录,所以我们只需要将技能目录复制到这个位置。

使用 upskill,我们可以通过 eval 命令传入一个技能和一组模型,upskill 会在这些模型上运行测试用例,比较它们在使用技能前后的性能。从下图可以看到,该技能提高了一些开源模型的准确率,但并非对所有模型都有效。

性能评估图

在这种情况下,我们可能想通过重新生成技能来进一步迭代针对 gpt-oss 的技能。我们可以执行 upskill generate --from {skill}

智能体技能的价值不止于模型性能。通常,智能体无论是否使用技能都能达到某个准确率,但可能需要消耗更多 token 才能达到。对于重复性任务,我们希望优化智能体,使其用更少的 token 达到相同的准确率。下面的结果揭示了技能的另一个维度。一些模型在使用技能后显著减少了 token 消耗,而另一些模型用了技能后 token 消耗反而增加了。例如,对于 moonshotai/Kimi-K2-Thinking,该技能在准确率和 token 消耗方面都明显有效。然而,对于 Claude Opus 4.5,性能没有明显提升,token 消耗却增加了,所以你肯定不会想对 Claude Opus 4.5 使用这个技能。

token 消耗对比图

简单说: 用你创建的技能去尝试和评估模型。使用 upskill eval 或类似工具来评估模型在使用技能前后的性能。

以上就是用技能提升编码智能体处理难题能力的端到端高级概述。现在就可以这样试试 upskill

code
# 安装 upskill
pip install upskill

# 或者用 uvx 一次性运行
uvx upskill --help

# 基于智能体执行轨迹生成技能
upskill generate "write nvidia kernels" --from ./trace.md

# 在模型上评估技能
upskill eval ./skills/my-skill/ --model haiku --model sonnet

# 为本地模型生成技能
upskill generate "parse YAML" \
    --model opus \
    --eval-model "unsloth/GLM-4.7-Flash-GGUF:Q4_0" \
    --eval-base-url http://localhost:8080/v1

用智能体技能构建核的深度教程

我们已经对如何提升智能体能力有了高层理解。现在来看看我们为解决编写 CUDA 核这个用例所做的具体工作。

我们不只是想写核代码,还想理解完整的核构建器(kernel-builder)工作流:项目结构、build.toml 配置、针对特定架构的优化以及 PyTorch 绑定。本教程展示了 upskill 如何创建经过验证且真正有效的技能。

kernel-builder-cuda-kernels 这个技能教会了 Claude 关于 CUDA 开发所需的一切:针对哪种 GPU 架构、如何构建核构建器项目、何时使用共享内存而非寄存器,以及如何编写 PyTorch 绑定。

有了这个技能,你可以这样告诉 Claude:

code
Build a fused LayerNorm + GELU kernel optimized for H100.

Claude 就会创建完整的项目结构、CUDA 实现和构建配置——完全遵循核构建器所期望的规范。

这不仅仅是生成样板代码。该技能编码了领域专业知识:H100 使用计算能力 9.0,共享内存应对齐到 128 字节,异步内存拷贝需要 __CUDA_ARCH__ >= 900。这些需要花费数小时从文档中搜集的知识,被打包成约 500 个 token,可以按需加载。

设置与安装

安装 upskill:

code
pip install upskill
# 或者用 uvx 一次性运行
uvx upskill --help

设置你的 API 密钥:

code
export ANTHROPIC_API_KEY=sk-ant-...
export HF_TOKEN=hf_...

就这样。Upskill 默认使用 Anthropic Claude Opus-4.5 模型,但也支持 OpenAI 和通过 OpenAI 兼容端点访问的本地模型作为生成器。我们的思路是用更贵、质量更高的模型来生成技能,然后用更小的模型来使用它们。有点“劫富济贫”的意思。

技能生成

我们一步步来看看如何生成一个能教智能体使用 HuggingFace 的 kernels 库构建 CUDA 核的技能。

生成技能

从一个清晰的任务描述开始:

code
upskill generate "build optimized CUDA kernels for PyTorch using HuggingFace kernel-builder"

上面我们用了 upskill,但实际上也可以是任何智能体或聊天工具以及导出的轨迹。

code
upskill generate "write kernels" --from <agent-trace>.md

我们也可以从现有技能开始并添加内容:

code
upskill generate "add more error handling and edge cases" \
    --from ./skills/kernel-builder-cuda-kernels/

upskill 会加载现有技能,应用你的改进,并重新评估以确保改动有帮助。

upskill 会创建一个技能,生成测试用例,评估性能,并根据失败情况进行优化:

code
Generating skill with sonnet...
Generating test cases...
Evaluating on sonnet... (attempt 1)
  60% -> 95% (+35%) OK

  kernel-builder-cuda-kernels
  Build optimized CUDA kernels for PyTorch using HuggingFace kernel-builder.

  SKILL.md              ~520 tokens

  baseline   ████████████                60%
  with skill ███████████████████    95%  (+35%)

Saved to ./skills/kernel-builder-cuda-kernels

基线(baseline)显示了模型在没有任何技能时的表现。“使用技能后”(with skill)的结果显示了技能注入上下文后的表现。35% 的提升意味着技能起作用了。

技能会按照 Agent Skills 规范保存为一个目录:

code
./skills/kernel-builder-cuda-kernels/
├── SKILL.md           # 主要说明(约 520 个 token)
└── skill_meta.json    # 元数据和测试用例

打开 SKILL.md 看看 upskill 生成了什么:

code
---
name: kernel-builder-cuda-kernels
description: Build optimized CUDA kernels for PyTorch using HuggingFace kernel-builder.
---

# Building CUDA Kernels with kernel-builder

## Overview

This guide explains how to create optimized CUDA kernels for PyTorch models 
using HuggingFace's kernel-builder. It covers project setup, kernel implementation, 
and building for specific GPU architectures like NVIDIA H100.

## Project Structure

project/
├── build.toml              # Build configuration
├── kernel_src/             # CUDA kernel implementations
│   ├── attention.cu
│   ├── layernorm.cu
│   └── geglu.cu
└── torch-ext/              # PyTorch C++ bindings
    └── torch_binding.cpp

## Build Configuration

Create `build.toml` to define your kernel package:

[general]
name = "diffuser_kernels"
backends = ["cuda"]

[general.cuda]
# H100 is compute capability 9.0
capabilities = ["9.0"]

...

真正的考验在于:这个技能能否帮本地或更便宜的模型构建 CUDA 内核?

code
# 启动一个带 Web UI 的本地 OpenAI 兼容服务器:
llama-server -hf unsloth/GLM-4.7-Flash-GGUF:Q4_K_M

# 在本地模型(llama.cpp 服务器)上评估
upskill eval ./skills/my-skill/ 
    --model "unsloth/GLM-4.7-Flash-GGUF:Q4_0" 
    --base-url http://localhost:8080/v1
code
Generating skill with sonnet...
Generating test cases...
Evaluating on "unsloth/GLM-4.7-Flash-GGUF:Q4_0"... (attempt 1)
  40% -> 85% (+45%) OK

  baseline   ████████░░░░░░░░░░░░   40%
  with skill █████████████████░░░   85%  (+45%)

Saved to ./skills/kernel-builder-cuda-kernels

"unsloth/GLM-4.7-Flash-GGUF:Q4_0" 上实现了 45% 的性能提升,这意味着技能成功地将领域知识从能力更强的模型转移到了更快、更便宜的模型上。能在较弱模型上运行的技能,在更强的模型上肯定也能用。

这就是核心价值主张:用昂贵的模型创建技能,然后用便宜或本地的模型来部署这些技能。

upskill 的评估机制

upskill 采用一种师生模式来评估模型:教师模型生成测试用例,学生模型在这些用例上接受评估。

  1. 教师模型(Opus)生成技能
  2. 测试用例(Opus)根据任务描述自动生成
  3. 学生模型(本地模型)在有技能和无技能两种情况下接受评估
  4. 技能提升(Skill Lift)衡量改进程度

如果你把一个已有的技能传给 upskill eval,它会为该技能生成测试用例,并评估模型在这些用例上的表现。测试用例是简单的输入/输出对,用来验证智能体是否理解任务:

code
{
  "cases": [
    {
      "input": "Create a build.toml for a CUDA kernel targeting H100",
      "expected": {"contains": "9.0"}
    },
    {
      "input": "Write a basic CUDA kernel template with proper includes",
      "expected": {"contains": "cuda_runtime.h"}
    }
  ]
}

我们还可以测试一个技能在不同模型上的表现:

code
upskill eval ./skills/kernel-builder-cuda-kernels/ 
    --model haiku --m kimi --runs 5
code
Evaluating kernel-builder-cuda-kernels across 2 model(s)
  3 test case(s), 5 run(s) per model

haiku
  Pass rate: 4/5 (80%)  Avg assertions: 2.8/3

sonnet  
  Pass rate: 5/5 (100%)  Avg assertions: 3.0/3

┏━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Model  ┃ Pass Rate ┃ Avg Assertions ┃ Avg Tokens ┃
┡━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ haiku  │ 4/5       │ 2.8/3          │ 1250       │
│ kimi   │ 5/5       │ 3.0/3          │ 1890       │
└────────┴───────────┴────────────────┴────────────┘

这能帮你找到性价比的最佳平衡点:也许 Haiku 配上技能就足够满足你的需求了,能省下不少 API 调用成本。

下一步可以做什么

我们已经展示了 upskill 可以创建经过验证的技能,将领域专业知识从强大的模型转移到更便宜的模型上。内核构建技能只是一个例子,可能性还有很多。

可以尝试的方向:

  • 为你的内部工具生成技能
  • 为你的代码库构建技能库
  • 捕获团队内部知识
  • 跨模型进行基准测试

这种方法适用于任何需要反复编写详细提示词的专业任务。这些技能可以跨平台使用,包括 Claude CodeCodexCursor 以及其他支持 Agent Skills 规范 的工具。

相关资源

本文编译自 We Got Claude to Build CUDA Kernels and teach open models!,版权归原作者所有。

觉得有用?分享给更多人

获取每周 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 分钟

评论