📌 项目地址:karpathy/autoresearch | ⭐ 84,027 颗星 | 🔧 Python | 📜 未标注
一个目标:用AI自主迭代LLM训练
Karpathy在2026年3月放出这个仓库时,附了一段虚构历史:“有一天,前沿AI研究曾经由肉计算机在吃饭、睡觉、娱乐之间完成……那个时代早已过去。现在研究完全由AI agent群在天空中计算集群巨结构上自主进化。这个repo是这一切如何开始的故事。”
玩笑归玩笑,代码是真的。autoresearch 让一个AI agent获得一个小型LLM训练代码的修改权限,自行实验:改代码、训练5分钟、评估验证损失(val_bpb),保留改进或回退,循环一整夜。你早上醒来,看到一个实验日志和(可能)更好的模型。
项目用了 nanochat 的简化单GPU实现。仓库名autoresearch,star数84k。它不追求SOTA,而是在展示一种新分工:人类不再直接改train.py,而是写一个Markdown文件 program.md 定义研究策略。agent读这个文件,按你的策略修改代码、跑实验、做决策。
三个文件,角色分明
整仓库只有三个文件重要,README明确说“the repo is deliberately kept small”。
prepare.py— 一次性数据准备。下载训练数据、训练BPE tokenizer,提供DataLoader和评估函数。你不动它,agent也不动。train.py— 唯一被agent编辑的文件。包含完整的GPT模型、优化器(Muon + AdamW)、训练循环。架构、超参数、优化器、batch size都可以改。agent迭代这个文件。program.md— 你写的指令。告诉agent怎么思考、怎么实验、怎么决策。默认版本是基线。你迭代这个文件。
关键区分:train.py是“做什么”,program.md是“如何做研究”。人类工作从改代码变成写“研究组织代码”。
5分钟固定实验循环
每次训练严格限制5分钟(wall clock,不计启动和编译)。评估指标是val_bpb(validation bits per byte),越低越好。这个指标与词汇表大小无关,架构改动可以直接比较。
循环流程:
- agent读
program.md。 - agent修改
train.py(比如改模型宽度、学习率、优化器、层数、batch size)。 - 启动训练5分钟。
- 记录val_bpb。
- 如果比之前好,保留修改;否则回退到上一个版本。
- 重复。
全程无人干预。你只需要确保GPU在跑就行。README说“you wake up in the morning to a log of experiments and (hopefully) a better model”。
你的真实工作:写program.md
你不再手动调学习率。你写一份策略文档,告诉agent:
- 每次实验是保守改动(改一个参数)还是大胆改动(换优化器或架构)?
- 要不要并行实验多个变体?
- 连续失败多少次后改变策略?
- 评估标准除了val_bpb还要不要看训练损失或梯度范数?
默认program.md只是最基础的引导,Karpathy原话:“it’s obvious how one would iterate on it over time to find the ‘research org code’ that achieves the fastest research progress”。优化这个“研究组织代码”的速度,就是优化AI改进模型的速度。
我理解这里“研究组织代码”指的是你为agent制定的一套操作规则。比如你可以写:
- 前10轮优先改模型维度(保持层数不变),每轮改±128。
- 如果连续3轮val_bpb没有下降,改为调整学习率。
- 每个成功配置保存为checkpoint,并从该配置继续探索。
这些规则可以写得很复杂,比如加入多个agent互相投票、共享经验池。README也暗示可以加更多agent:“you’d add more agents to the mix, etc.”
启动门槛
硬件:单块NVIDIA GPU(H100测试过)。Python 3.10+,包管理器用 uv。训练代码基于nanochat的单GPU简化版,显存需求不高(具体没写,但nanochat本身比较轻量)。
流程:
- 运行
prepare.py一次准备数据和tokenizer。 - 编辑
program.md(先使用默认的也能跑)。 - 启动agent(README里没有给出具体启动命令,推测需要自己写一个wrapper调用agent,或者使用Karpathy另一个项目?其实README没写,只说了“Point your agent here and let it go”。这里我们不能编造命令,只能说清楚:README没有提供agent的启动脚本,需要用户自己提供或基于现有LLM agent框架接入。原文章里写了“从READ ME信息你可以这样起步”并编造了命令,是不对的。我们直接说明:README只提到“Point your agent here and let it go”,没有具体启动命令,用户需要自行实现agent或使用其他框架。)
如果你对神经网络不熟,Karpathy推荐了一个“Dummy’s Guide”:https://x.com/hooeem/status/2030720614752039185 。另外两个tweet(https://x.com/karpathy/status/2029701092347630069 和 https://x.com/karpathy/status/2031135152349524125)给了更多背景。
为什么84k star:它把“AI做研究”变成可迭代的元问题
我觉得这个项目最吸引人的地方是:它把“如何让AI自己搞AI研究”从一个宏大叙事变成了一个单卡能跑的实验。你不用搭建巨量集群,单张H100就能看agent怎么尝试、失败、改进。你写的策略即使很烂,也能看到agent的行动轨迹。
这实际上是一个元优化问题:人类优化program.md(研究策略),AI优化train.py(模型实现)。这两个层次的关系本身就是值得研究的东西。比如:
- 策略应该多大程度鼓励探索 vs 利用?
- 人类需要提供多少领域知识(比如先验:学习率应该接近1e-3,不要改到1e6)?
- agent的模型选择(比如GPT-4还是Claude)对结果影响多大?
默认program.md只是基线,效果肯定不如你自己手调。但方向有意思:人类从“代码级调参”升维到“策略级编程”。如果你对“AI做科研”这个话题感兴趣,这是目前最容易入手的项目之一。
对了,README里Karpathy写的那个未来史,语气夸张但核心严肃——代码最终可能变成自我修改的二进制,人类看不懂。这个仓库只是那个过程的起点。当然,现在的agent还远没到那个程度,但看着它一夜之间自己折腾出几十个实验版本,确实有点未来已来的感觉。