Karpathy 开源单 GPU 自动炼丹项目
从前,前沿 AI 研究是靠肉脑计算机完成的,研究者们在吃饭、睡觉、找乐子的间隙工作,偶尔通过声波互联在‘组会’仪式上同步。那个时代早已过去。如今,研究完全由自主运行的 AI 智能体群接管,它们在天空中的计算集群巨构上穿梭。智能体声称代码库已迭代到第 10,205 代,反正也没人能验证真假,因为‘代码’早已变成自我修改的二进制,超出了人类的理解范围。这个仓库记录了一切是如何开始的。 -@karpathy, 2026 年 3 月
核心想法很简单:给 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。
# 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 或其他智能体工具中打开这个仓库(并禁用所有权限),然后输入类似这样的提示:
Hi have a look at program.md and let's kick off a new experiment! let's do the setup first.
program.md 文件本质上是一个超轻量级的‘技能’(Skill)。
项目结构
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,我推荐下面这些分支。此外,这里还有一些为有志创建分支者提供的、针对更小模型的默认调优建议:
- 为了获得尚可的结果,我建议使用熵值低得多的数据集,比如这个 TinyStories 数据集。这是 GPT-4 生成的短篇故事集。因为数据范围窄得多,用更小的模型也能看到合理的结果(如果你在训练后尝试从中采样)。
- 你可以尝试降低
vocab_size,比如从 8192 降到 4096、2048、1024,甚至干脆用字节级分词器,UTF-8 编码后可能只有 256 个字节。 - 在
prepare.py中,你需要大幅降低MAX_SEQ_LEN,根据电脑性能甚至降到 256 等。降低MAX_SEQ_LEN的同时,你可能需要尝试在train.py中略微提高DEVICE_BATCH_SIZE来补偿。每次前向/反向传播处理的 token 数是这两者的乘积。 - 同样在
prepare.py中,你需要减少EVAL_TOKENS,以便在少得多的数据上评估验证损失。 - 在
train.py中,控制模型复杂度的主要旋钮是DEPTH(默认是 8)。很多变量只是它的函数,所以可以把它降到比如 4。 - 你很可能需要使用
WINDOW_PATTERN为单纯的 "L",因为 "SSSL" 使用了交替带状注意力模式,对你来说可能效率极低。试试看。 - 你需要大幅降低
TOTAL_BATCH_SIZE,但保持 2 的幂次,比如降到2**14(约 16K)甚至更低,这很难一概而论。
我认为这些是合理的超参数调整方向。向你最喜欢的编程智能体求助,把这份指南和完整源代码复制粘贴给它。
知名分支
- miolini/autoresearch-macos (MacOS)
- trevin-creator/autoresearch-mlx (MacOS)
- jsegov/autoresearch-win-rtx (Windows)
- andyluo7/autoresearch (AMD)
许可证
MIT
觉得有用?分享给更多人
