Autoresearch: 5分钟AI自主训练GPT入门

2026年3月15日

WARNING

本文需要一块 NVIDIA GPU(已在 H100 上测试通过)才能正常运行。

想象一下:当你睡觉时,AI 自己在那里调参、训练、跑实验,早上醒来就看到一堆实验日志和更好的模型——这就是 autoresearch。它是一个极简的自主研究框架,AI Agent 会自己修改 GPT 训练脚本、跑实验、评估结果、自动迭代。你需要做的只是在旁边看着。

目标读者

  • 对 AI 自主研究 Agent 感兴趣的开发
  • 想从工程角度理解 LLM 训练过程的同学
  • 想看 AI 如何自己进步的同学

核心依赖与环境

  • Python 3.10+
  • NVIDIA GPU(已在 H100 上测试)
  • uv 包管理器

项目结构

autoresearch/
├── prepare.py      # 固定常量、数据准备、分词器(不要修改)
├── train.py        # 模型、优化器、训练循环(Agent 修改这个)
├── program.md      # Agent 指令(人类修改这个)
├── pyproject.toml  # 依赖
└── results.tsv     # 实验记录(自动生成)

整个仓库刻意保持极简——真正重要的就三个文件。这样设计是为了让实验范围可控,diff 也方便 review。

手把手教程

步骤1:安装 uv

首先安装 uv 包管理器:

curl -LsSf https://astral.sh/uv/install.sh | sh

TIP

Windows 上可以用 winget install astral-sh.uv,或者从官网下载安装包。

步骤2:安装依赖

克隆仓库并安装依赖:

git clone https://github.com/karpathy/autoresearch.git
cd autoresearch
uv sync

这一步会装好 PyTorch 等必要包。

步骤3:准备数据和分词器

运行一次性数据准备脚本:

uv run prepare.py

这会下载训练数据并训练一个 BPE 分词器,大概需要 2 分钟。数据会保存在 ~/.cache/autoresearch/

步骤4:跑一次 baseline 训练

我们先手动跑一次训练,建立基准:

uv run train.py

训练会跑恰好 5 分钟(不含启动和编译时间)。评估指标是 val_bpb(验证集每字节比特数)——越低越好。

跑完你会看到类似这样的输出:

---
val_bpb:          0.997900
training_seconds: 300.1
total_seconds:    325.9
peak_vram_mb:     45060.2
mfu_percent:      39.80
total_tokens_M:   499.6
num_steps:        953
num_params_M:     50.3
depth:            8

这个 baseline 就是我们的起点。现在把它交给 AI。

步骤5:接入你的 AI Agent

为实验创建一个新分支:

git checkout -b autoresearch/mar15

初始化结果文件:

echo -e "commit\tval_bpb\tmemory_gb\tstatus\tdescription" > results.tsv

现在启动你的 AI Agent(Claude、Codex 等都可以,记得关闭所有权限):

claude

然后这样告诉它:

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

Agent 会读取 program.md,理解实验流程,然后开始自主迭代 train.py

步骤6:理解实验循环

Agent 会一直循环以下步骤:

  1. 修改 train.py — 改架构、调超参数、改优化器啥的
  2. Git commit — 保存这次改动
  3. 跑实验uv run train.py > run.log 2>&1
  4. 读取结果grep "^val_bpb:\|^peak_vram_mb:" run.log
  5. 记到 results.tsv — 记录这次实验
  6. 决策
    • val_bpb 降低了 → 保留这次 commit,继续
    • val_bpb 变差了 → git reset,换个思路

TIP

Agent 会全自动跑,不要问"要不要继续"——让它跑就对了。每次实验大概 5 分钟,所以每小时能跑 12 次左右。

program.md 核心指令解析

program.md 就是你的 AI 研究员的大脑,关键点如下:

  • 固定时间预算 —— 永远 5 分钟,保证实验可比
  • 只改一个文件 —— 只有 train.py 可以动
  • 不能加新依赖 —— 只能用 pyproject.toml 里已有的包
  • 简单性原则 —— 小的提升如果带来很大复杂度,不值得做

第一次实验永远应该是跑 baseline,用来建立比较基准。

输出格式

实验结果会记录到 results.tsv,用 tab 分隔:

commit	val_bpb	memory_gb	status	description
a1b2c3d	0.997900	44.0	keep	baseline
b2c3d4e	0.993200	44.2	keep	increase LR to 0.04
c3d4e5f	1.005000	44.0	discard	switch to GeLU activation

注意用 tab,不是逗号——逗号在描述里会出问题。

常见问题排查

1. 数据没准备好

错误: FileNotFoundError 找不到缓存文件

解决: 先跑 uv run prepare.py 下载数据和训练分词器。

2. 内存不够(OOM)

错误: CUDA out of memory

解决: Agent 应该能检测到这种情况并在 results.tsv 记为 "crash"。常见修复:

  • 减小 train.py 里的 TOTAL_BATCH_SIZE
  • 减少模型层数(减小 DEPTH
  • 用更短的序列长度

3. 训练超时

错误: 跑超过 10 分钟

解决: 手动 kill 进程。这次实验记为 "discard" 并回滚。

4. Agent 不干活

问题: Agent 光读取文件但不跑实验

解决: 确认在正确的目录启动了 Agent,确认 Agent 有执行 shell 命令的权限。

5. 一直比 baseline 差

问题: 所有实验结果都差不多或更差

解决:

  • 尝试更激进的架构改动(注意力机制、激活函数)
  • 调整学习率——默认值可能不是最优的
  • 试试不同的优化器(Muon vs AdamW)

6. 平台不兼容

错误: "No CUDA GPUs available"

解决: 这个代码需要 NVIDIA GPU。其他平台可以用这些 fork:

进阶方向

小显卡怎么玩

如果没有 H100,可以这样调:

  1. 用 TinyStories 数据集替代(领域更窄,小模型也能出效果)
  2. vocab_size 从 8192 降到 2048 甚至 256(字节级)
  3. prepare.py 里的 MAX_SEQ_LEN 降到 256 或更低
  4. TOTAL_BATCH_SIZE 降到 2**14(约 16K)
  5. WINDOW_PATTERN 设为 "L",用简单的注意力

继续扩展

玩熟悉之后可以:

  • 修改 program.md 添加多个不同角色的 Agent
  • 尝试不同的数据集
  • 加入更复杂的评估指标
  • 实现多卡训练(需要大改 prepare.py)

相关资源

Updated 2026年3月15日