Karpathy 开源单 GPU 自动炼丹项目

指南2026年3月8日5 分钟阅读
Karpathy 开源单 GPU 自动炼丹项目
Andrej Karpathy 发布 autoresearch 项目,让 AI 智能体在单 GPU 上自动运行 nanochat 模型训练实验。核心思路是编写 program.md 文件指导智能体,智能体则自主修改 train.py 代码,每轮训练 5 分钟,通过验证损失评估改进,实现夜间无人值守的自动化研究。

从前,前沿 AI 研究是靠肉脑计算机完成的,研究者们在吃饭、睡觉、找乐子的间隙工作,偶尔通过声波互联在‘组会’仪式上同步。那个时代早已过去。如今,研究完全由自主运行的 AI 智能体群接管,它们在天空中的计算集群巨构上穿梭。智能体声称代码库已迭代到第 10,205 代,反正也没人能验证真假,因为‘代码’早已变成自我修改的二进制,超出了人类的理解范围。这个仓库记录了一切是如何开始的。 -@karpathy, 2026 年 3 月

teaser

核心想法很简单:给 AI 智能体一个真实但小规模的 LLM 训练环境,让它整晚自主实验。智能体修改代码,训练 5 分钟,检查结果是否改善,保留或丢弃改动,然后重复。你早上醒来就能看到实验日志,运气好的话还能收获一个更好的模型。

这里的训练代码是 nanochat 的简化单 GPU 实现。关键点在于,你作为研究者不再需要手动修改任何 Python 文件。相反,你编写的是 program.md 这个 Markdown 文件,它为 AI 智能体提供上下文,相当于搭建你的自动化研究组织。仓库里默认的 program.md 故意保持极简,但很明显,你可以不断迭代它,找到能最快推进研究的‘组织代码’,或者往里面添加更多智能体。更多背景可以看这条 推文

工作原理

仓库刻意保持小巧,真正重要的文件只有三个:

  • prepare.py — 存放固定常量、一次性数据准备(下载训练数据、训练 BPE 分词器)和运行时工具(数据加载器、评估函数)。此文件不会被修改。
  • train.py — 智能体唯一会编辑的文件。包含完整的 GPT 模型、优化器(Muon + AdamW)和训练循环。一切皆可改:架构、超参数、优化器、批次大小等等。智能体编辑并迭代此文件
  • program.md — 给单个智能体的基础指令。把你的智能体指向这里,然后让它开始工作。此文件由人类编辑和迭代

设计上,每轮训练有固定的 5 分钟时间预算(墙钟时间,不含启动/编译),与你的具体计算平台无关。评估指标是 val_bpb(验证集每字节比特数)——越低越好,且与词汇表大小无关,因此可以公平比较架构改动。

如果你是神经网络新手,这份 《傻瓜指南》 提供了更多背景知识。

快速开始

要求: 单块 NVIDIA GPU(已在 H100 上测试),Python 3.10+,uv

bash
# 1. 安装 uv 项目管理器(如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. 安装依赖
uv sync

# 3. 下载数据并训练分词器(一次性,约 2 分钟)
uv run prepare.py

# 4. 手动运行单次训练实验(约 5 分钟)
uv run train.py

如果以上命令都能正常运行,说明你的环境已就绪,可以进入自动化研究模式了。

运行智能体

只需在你的 Claude/Codex 或其他智能体工具中打开这个仓库(并禁用所有权限),然后输入类似这样的提示:

code
Hi have a look at program.md and let's kick off a new experiment! let's do the setup first.

program.md 文件本质上是一个超轻量级的‘技能’(Skill)。

项目结构

code
prepare.py      — 常量、数据准备 + 运行时工具(请勿修改)
train.py        — 模型、优化器、训练循环(智能体修改此文件)
program.md      — 智能体指令
pyproject.toml  — 依赖项

设计考量

  • 单文件修改。 智能体只碰 train.py。这保持了可控的范围,也让代码差异易于审查。
  • 固定时间预算。 训练总是精确运行 5 分钟,与你的具体平台无关。这意味着你每小时大约能进行 12 次实验,睡一觉大约能跑 100 次。这个设计有两个好处:首先,无论智能体改了啥(模型大小、批次大小、架构等),实验都直接可比;其次,autoresearch 会在该时间预算内为你的平台找到最优模型。缺点是,你的运行结果无法与其他计算平台上的结果直接比较。
  • 自包含。 除了 PyTorch 和几个小包,没有外部依赖。没有分布式训练,没有复杂配置。一块 GPU,一个文件,一个指标。

平台支持

当前代码要求你有一块 NVIDIA GPU。原则上完全可能支持 CPU、MPS 等其他平台,但这也会让代码膨胀。我不太确定现在是否要亲自处理这件事。大家可以参考(或让智能体参考)完整版的 nanochat 父仓库,它支持更广泛的平台,并展示了各种解决方案(例如 Flash Attention 3 内核回退实现、通用设备支持、自动检测等)。欢迎为其他平台创建分支或讨论,我很乐意在 README 里链接它们,比如开个‘知名分支’版块。

鉴于似乎有很多人想在比 H100 小得多的计算平台上折腾 autoresearch,这里额外说几句。如果你打算在 Macbook 等小机器上运行 autoresearch,我推荐下面这些分支。此外,这里还有一些为有志创建分支者提供的、针对更小模型的默认调优建议:

  1. 为了获得尚可的结果,我建议使用熵值低得多的数据集,比如这个 TinyStories 数据集。这是 GPT-4 生成的短篇故事集。因为数据范围窄得多,用更小的模型也能看到合理的结果(如果你在训练后尝试从中采样)。
  2. 你可以尝试降低 vocab_size,比如从 8192 降到 4096、2048、1024,甚至干脆用字节级分词器,UTF-8 编码后可能只有 256 个字节。
  3. prepare.py 中,你需要大幅降低 MAX_SEQ_LEN,根据电脑性能甚至降到 256 等。降低 MAX_SEQ_LEN 的同时,你可能需要尝试在 train.py 中略微提高 DEVICE_BATCH_SIZE 来补偿。每次前向/反向传播处理的 token 数是这两者的乘积。
  4. 同样在 prepare.py 中,你需要减少 EVAL_TOKENS,以便在少得多的数据上评估验证损失。
  5. train.py 中,控制模型复杂度的主要旋钮是 DEPTH(默认是 8)。很多变量只是它的函数,所以可以把它降到比如 4。
  6. 你很可能需要使用 WINDOW_PATTERN 为单纯的 "L",因为 "SSSL" 使用了交替带状注意力模式,对你来说可能效率极低。试试看。
  7. 你需要大幅降低 TOTAL_BATCH_SIZE,但保持 2 的幂次,比如降到 2**14(约 16K)甚至更低,这很难一概而论。

我认为这些是合理的超参数调整方向。向你最喜欢的编程智能体求助,把这份指南和完整源代码复制粘贴给它。

知名分支

许可证

MIT

觉得有用?分享给更多人

获取每周 AI 工具精选

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

相关文章

pgEdge 推出开源 MCP Server for Postgres,支持 AI 智能体通过模型上下文协议(MCP)而非传统 API 方式访问数据库。服务强调数据源无关性、完整模式自省和 token 优化,适用于 Claude Code、Cursor 等主流 AI 开发工具。

指南The New Stack·4月2日·4 分钟

Google 推出 Flex 和 Priority 两个新的推理层级,帮助开发者平衡成本与可靠性。Flex 是成本优化层级,适合后台任务,价格便宜一半;Priority 是最高保障层级,适合用户交互型应用。两者都通过同步接口调用,简化了架构管理。

指南·4月2日·3 分钟

评论