
40美金复现 Karpathy 的 "AI 自动科研" —— Claude Code × Amazon Bedrock 实战
用 Claude Code(基于 Amazon Bedrock)复现 Andrej Karpathy 的 autoresearch,总成本约 $40 —— 单卡 A10G 一晚跑完 222 个实验,验证损失下降 3.4%。文章包含基于 SSM 的一键部署、Agent 完整的实验演进路径,以及 24.5 小时自主 ML 研究中的关键洞察。
摘要
我用一台 AWS g5.xlarge 实例(NVIDIA A10G 24GB)和 Claude Code(通过 Amazon Bedrock 接入),复现了 Andrej Karpathy 的 autoresearch 实验。24.5 小时内跑了 222 个实验,35 个改进被保留,验证损失(val_bpb)从 1.1498 降到 1.1107,下降了 3.4%。总成本约 $40-45(GPU + Bedrock API)。
💡 想直接上手?跳转到 快速复现:9 步开始实验
一、为什么做这个实验
2026 年 3 月 7 日,Andrej Karpathy 开源了 autoresearch ,一个让 AI Agent 在单块 GPU 上自主跑 ML 实验的框架。核心思路极其简洁:给 Agent 一个训练脚本,让它自己改代码、跑实验、只保留有效改进,循环往复。你睡一觉醒来,就能看到一份实验日志和一个更好的模型。
项目发布后迅速走红——21,000+ GitHub Stars,Fortune 杂志将其核心方法论命名为 "The Karpathy Loop"。
我想亲手验证几个问题:
- 在非 H100 的中端 GPU 上,autoresearch 能跑起来吗?
- 用 Amazon Bedrock 接入 Claude(而非直接用 Anthropic API),流程顺畅吗?
- 一晚上的自主实验,真的能产出有意义的改进吗?
二、autoresearch 的核心机制
三文件契约
autoresearch 的设计只有三个关键文件:
| 文件 | 角色 | 谁来修改 |
|---|---|---|
| prepare.py | 数据准备 + 评估基准 | 不可修改(中立裁判) |
| train.py | 模型架构 + 优化器 + 训练循环 | AI Agent |
| program.md | 研究方向和约束条件 | 人类 |
棘轮循环(Ratchet Loop)
Agent 的工作流程是一个 9 步循环:
- 读取
program.md理解研究方向 - 检查当前代码和历史结果
- 提出假设
- 修改
train.py - Git commit
- 训练固定 5 分钟
- 崩溃则回滚重试
- 评估 val_bpb,记录结果
- 改进则保留 commit,否则
git reset回滚
然后从第 1 步重新开始。永不停止。
三、基础设施搭建
硬件选择
Karpathy 的原始实验用的是 H100(80GB VRAM),默认配置的 peak VRAM 约 45GB。AWS 上对应的
p5.4xlarge 要 $7.91/hr。我选择了更经济的方案:
| 项目 | 配置 |
|---|---|
| 实例类型 | g5.xlarge |
| GPU | NVIDIA A10G, 24 GB VRAM |
| 价格 | ~$1.24/hr (On-Demand) |
| Region | us-west-2 |
| AMI | Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.7 (Ubuntu 22.04) |
连接方式:SSM Session Manager
我没有使用传统的 SSH,而是选择了 AWS Systems Manager Session Manager:
- 零入站端口:安全组不开放任何入站规则,比 SSH 更安全
- 无需密钥管理:不需要 .pem 文件
- IAM 集成:通过 IAM Role 控制访问权限
连接命令:
1
aws ssm start-session --target <instance-id> --region us-west-2
AI Agent:Claude Code via Amazon Bedrock
这是本次实验的一个特色——我没有使用 Anthropic 的直接 API,而是通过 Amazon Bedrock 接入 Claude:
模型配置:
- 主模型:Claude Sonnet 4.6(
us.anthropic.claude-sonnet-4-6)— $3/$15 per MTok - 高级推理模型:Claude Opus 4.6(
us.anthropic.claude-opus-4-6-v1)— $5/$25 per MTok,用于复杂推理场景
优势:
- EC2 实例通过 Instance Role 自动获取 Bedrock 凭证,无需管理 API Key
- 计费走 AWS 统一账单
- IAM 策略精细控制模型访问权限
配置方式:
在 EC2 实例的 IAM Role 上附加 Bedrock 权限策略:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:ListInferenceProfiles",
"bedrock:GetInferenceProfile"
],
"Resource": [
"arn:aws:bedrock:*:*:inference-profile/*",
"arn:aws:bedrock:*:*:application-inference-profile/*",
"arn:aws:bedrock:*:*:foundation-model/*"
]
}
]
}
Claude Code 的环境配置(
~/.claude/.env):1
2
3
4
5
CLAUDE_CODE_USE_BEDROCK=1
AWS_REGION=us-west-2
ANTHROPIC_MODEL=us.anthropic.claude-sonnet-4-6
ANTHROPIC_DEFAULT_SONNET_MODEL=us.anthropic.claude-sonnet-4-6
ANTHROPIC_DEFAULT_OPUS_MODEL=us.anthropic.claude-opus-4-6-v1
运行环境详解
AMI 选择:Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2.7 (Ubuntu 22.04)
这个 AMI(
ami-0ca70308d230e8a6e,us-west-2)是 AWS 官方维护的深度学习镜像,预装了:| 组件 | 版本 | 说明 |
|---|---|---|
| Ubuntu | 22.04 LTS | 基础操作系统 |
| NVIDIA Driver | 预装 | GPU 驱动,开箱即用 |
| CUDA Toolkit | 12.8 | GPU 计算框架 |
| PyTorch | 2.9.1+cu128 | 深度学习框架(autoresearch 依赖) |
| Python | 3.10+ | 运行环境 |
| SSM Agent | 预装 | 支持 Session Manager 连接 |
选择这个 AMI 的原因是省去了手动安装 NVIDIA 驱动和 CUDA 的麻烦——这两步在裸 Ubuntu 上经常出问题。
AMI 未预装但需要额外安装的组件:
| 组件 | 用途 | 安装方式 |
|---|---|---|
| uv | Python 包管理器(autoresearch 用它管理依赖) | curl -LsSf https://astral.sh/uv/install.sh \| sh |
| Node.js 22.x | Claude Code 运行时依赖 | curl -fsSL https://deb.nodesource.com/setup_22.x \| bash - && apt-get install -y nodejs |
| Claude Code | AI 编程 Agent | npm install -g @anthropic-ai/claude-code |
⚠️ cloud-init 的坑:
Deep Learning AMI 首次启动时,cloud-init 的
modules:final 阶段会执行大量后台任务(编译 CUDA 内核、配置环境等),耗时可达 15-20 分钟。如果在 User Data 脚本中使用 cloud-init status --wait,整个初始化会被阻塞。我的实际经验是:跳过 cloud-init 等待,通过 SSM 手动执行安装步骤更可靠。实例启动后 SSM Agent 通常在 30-40 秒内就绪,此时就可以连接上去手动安装。
一键部署
我编写了一个部署脚本,自动完成所有基础设施搭建:
- 创建 IAM Role(SSM + Bedrock 权限)
- 创建安全组(零入站端口)
- 自动检测并启动最新的 Deep Learning AMI
- User Data 自动安装 uv、Node.js、Claude Code、克隆 autoresearch
- 等待 SSM Agent 就绪
AMI 自动检测机制:
脚本不硬编码 AMI ID(因为不同 Region 的 AMI ID 不同,且 AWS 会定期发布新版本),而是通过 AWS API 自动查找目标 Region 中最新的 Deep Learning AMI:
1
2
3
4
5
6
7
AMI_ID=$(aws ec2 describe-images --region "$REGION" \
--owners amazon \
--filters \
"Name=name,Values=Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2*Ubuntu 22.04*" \
"Name=state,Values=available" \
--query "sort_by(Images, &CreationDate)[-1].ImageId" \
--output text)
这段代码做了三件事:
- 在目标 Region 中搜索 AWS 官方(
--owners amazon)发布的 AMI - 按名称模式匹配
Deep Learning OSS Nvidia Driver AMI GPU PyTorch 2*Ubuntu 22.04* - 按创建日期排序,取最新的一个
在 us-west-2 中,当前匹配到的是
ami-0ca70308d230e8a6e(PyTorch 2.7, 2026-04-27 发布)。然后在 aws ec2 run-instances --image-id "$AMI_ID" 中引用该 AMI 启动实例。这样脚本在任何 Region 都能自动找到最新的 Deep Learning AMI,无需手动维护 AMI ID。从执行脚本到 SSM 连接就绪,约 5 分钟。
快速复现:9 步开始实验
以下是从零开始到实验运行的完整步骤。资深开发者可以直接按步骤操作,详细原理见前面各小节。
前置条件:
- AWS 账号,Bedrock 中已启用 Claude 模型(详见 Running Claude Code and Claude Desktop on Amazon Bedrock )
- 本地安装 AWS CLI v2(安装指南 )
- 本地安装 SSM Session Manager Plugin:
__PRE_PLACEHOLDER_4__ - IAM 用户有 EC2、IAM、SSM、Bedrock 权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1. 克隆部署脚本
git clone https://github.com/hanyun2019/autoresearch-on-aws.git
cd autoresearch-on-aws
# 2. 一键部署(约 5 分钟)
chmod +x setup.sh connect.sh cleanup.sh
./setup.sh
# 脚本结束后会输出 Instance ID,请记下来
# 3. 连接到实例
./connect.sh
# 4. 等待初始化完成(cloud-init 首次启动需 15-20 分钟)
sudo -u ubuntu -i
cat ~/autoresearch/.setup-complete # 显示 "READY" 表示就绪
# 如果文件不存在,查看日志:tail -f /var/log/autoresearch-setup.log
# 5. 确认环境
nvidia-smi && which claude
# 6. 启动实验
cd ~/autoresearch
tmux new -s research
claude --dangerously-skip-permissions
# 首次启动的 Bedrock 向导:认证选 "Use credentials already in my environment",模型选 "Pin the working models"
# 重启后输入提示词:
1
2
3
Hi have a look at program.md and let's kick off a new experiment!
let's do the setup first. Note: we're on a single A10G with 24GB VRAM,
so please adjust the model size and dataset accordingly.
1
2
3
4
5
6
7
8
9
10
11
# 7. 分离 tmux,去睡觉:Ctrl+B, D
# 8. 第二天查看结果
tmux attach -t research
cat results.tsv && git log --oneline
# 9. 停止实例(~$1.24/hr)
aws ec2 stop-instances --instance-ids <instance-id> --region us-west-2
# 用完彻底清理
./cleanup.sh
完整脚本和实验数据见 GitHub 仓库:hanyun2019/autoresearch-on-aws
四、适配 A10G 24GB
原始配置面向 H100 80GB,直接跑会 OOM。Claude Code 在读取
program.md 和 train.py 后,自主完成了以下调整:| 参数 | 原始值 (H100) | 调整后 (A10G) | 原因 |
|---|---|---|---|
| DEPTH | 8 | 4 | 模型维度从 512 降到 256,参数量减少约 4 倍 |
| DEVICE_BATCH_SIZE | 128 | 32 | 减少激活内存 |
| TOTAL_BATCH_SIZE | 2^19 (524K) | 2^17 (131K) | 适配更小的 batch |
| WINDOW_PATTERN | "SSSL" | "L" | 带状注意力在 A10G 上效率低,改用全上下文 |
这些调整让 baseline 只使用了 3.6 GB VRAM,为后续实验留出了充足的探索空间。
五、实验过程
启动
1
2
3
4
5
6
7
8
# 以无权限确认模式启动 Claude Code(autoresearch 需要完全自主运行)
claude --dangerously-skip-permissions
# 提示词
> Hi have a look at program.md and let's kick off a new experiment!
> let's do the setup first. Note: we're on a single A10G with 24GB VRAM,
> so please adjust the model size and dataset accordingly.
Claude Code 的启动流程:
- 读取
program.md、train.py、prepare.py - 检测 GPU 型号和 VRAM
- 创建实验分支
autoresearch/may2 - 调整
train.py参数 - 运行
uv run prepare.py下载数据(约 2 分钟) - 提交 baseline commit
- 开始棘轮循环
阶段一:探索硬件边界(实验 1-6,约 1 小时)
Agent 首先探索了 A10G 的能力边界:
1
2
3
4
5
6
baseline (DEPTH=4, bs=32) → val_bpb=1.1498, 3.6 GB ✅ keep
DEPTH=12, bs=128 → OOM 22GB ❌ crash
DEPTH=8, bs=64 → OOM 20GB ❌ crash
DEPTH=8, bs=32 → val_bpb=1.2059, 11.4 GB ❌ discard(更慢)
DEPTH=4, bs=128 → val_bpb=1.1579, 14.0 GB ❌ discard
DEPTH=6, 384-dim → val_bpb=1.1749, 6.9 GB ❌ discard
关键发现:更大的模型在 5 分钟内反而更差——每步更慢,总步数更少,收敛不够。这正是 autoresearch 固定时间预算设计的精妙之处。
阶段二:发现 MLP 扩展(实验 7-18,约 2 小时)
Agent 转向结构性改进,发现了第一个突破:
1
2
3
4
MLP 4x → 8x 扩展 → val_bpb=1.1491 ✅ keep(更宽的 FFN 层)
8x MLP + batch 2^16 → val_bpb=1.1422 ✅ keep(更多步数)
GeLU 替换 ReLU² → val_bpb=1.1543 ❌ discard
SwiGLU → val_bpb=1.2289 ❌ discard(差很多)
关键发现:在这个小模型上,简单的 ReLU² 激活函数比 GeLU 和 SwiGLU 都好。
阶段三:模型放大突破(实验 19-35,约 3 小时)
最大的单次跳跃出现在这个阶段:
1
2
3
ASPECT_RATIO=96 (384-dim) → val_bpb=1.1233 ✅ keep(巨大改进!)
ASPECT_RATIO=128 (512-dim) → val_bpb=1.1262 ❌ discard(太慢)
DEPTH=5, ASPECT_RATIO=76 → val_bpb=1.1233 ❌ discard(持平但更慢)
关键发现:从 256-dim 扩到 384-dim(3 个注意力头,24.4M 参数),val_bpb 从 1.1422 跳到 1.1233——这是整个实验中最大的单次改进。但继续扩到 512-dim 就太慢了。
阶段四:优化器精调(实验 36-100,约 6 小时)
在 384-dim 模型的基础上,Agent 开始系统性地微调每一个超参数:
1
2
3
4
5
6
7
WARMDOWN_RATIO=0.6 → val_bpb=1.1220 ✅ keep
MATRIX_LR=0.055 → val_bpb=1.1202 ✅ keep
WEIGHT_DECAY=0.05 → val_bpb=1.1160 ✅ keep
SCALAR_LR=1.2 → val_bpb=1.1178 ✅ keep
FINAL_LR_FRAC=0.04 → val_bpb=1.1157 ✅ keep
UNEMBEDDING_LR=0.007 → val_bpb=1.1188 ✅ keep
gradient clipping norm=1.0 → val_bpb=1.1188 ✅ keep
阶段五:精细打磨与窗口模式突破(实验 100-222,约 12 小时)
在超参数微调接近饱和后,Agent 发现了一个新的突破方向——窗口注意力模式:
1
2
3
4
5
6
7
8
9
10
QK norm 移到 RoPE 之前 → val_bpb=1.1154 ✅ keep
EMBEDDING_LR=0.9 → val_bpb=1.1175 ✅ keep
WD decay to 20% residual → val_bpb=1.1156 ✅ keep
FINAL_LR_FRAC=0.03 → val_bpb=1.1152 ✅ keep
WINDOW_PATTERN=SL → val_bpb=1.1149 ✅ keep(交替短+全注意力)
WINDOW_PATTERN=SSSL → val_bpb=1.1141 ✅ keep(3短+1全,新突破!)
SSSL short_window=512 → val_bpb=1.1122 ✅ keep(四分之一上下文,大幅改进!)
SSSL short_window=384 → val_bpb=1.1115 ✅ keep
WARMDOWN_RATIO=0.65 at SSSL → val_bpb=1.1112 ✅ keep
EMBEDDING_LR=0.85 at SSSL → val_bpb=1.1107 ✅ keep(最终最优)
关键发现:Agent 在初始配置中把 WINDOW_PATTERN 从 "SSSL" 改成了 "L"(因为担心 A10G 上效率低),但后来在模型放大到 384-dim 后重新尝试了带状注意力,发现 SSSL 模式配合更小的窗口(384 tokens)反而带来了显著改进。这说明早期被否定的方向在新的配置下可能重新变得有效。
六、实验结果总览
实验总结
经过 24.5 小时的连续自主运行,Claude Code(Sonnet 4.6 via Bedrock)在 NVIDIA A10G 24GB 上共完成了 222 个实验,其中 35 个改进被棘轮机制保留,验证损失(val_bpb)从 baseline 的 1.1498 一路降至最终最优的 1.1107,累计改进 3.4%。
整个改进路径可以概括为三次关键跳跃:
- MLP 8x 扩展 + 缩小 batch(实验 11-16):val_bpb 从 1.1498 降到 1.1422,Agent 发现更宽的 FFN 层配合更小的 batch(更多训练步数)是比增加模型深度更有效的策略。
- 模型宽度放大至 384-dim(实验 30):val_bpb 从 1.1422 跳到 1.1233,这是整个实验中最大的单次改进,Agent 找到了 A10G 上"5 分钟内最优模型大小"的甜蜜点。
- 窗口注意力模式 SSSL + short_window=384(实验 155-170):val_bpb 从 1.1152 降到 1.1107,Agent 在第 17 小时重新启用了早期被否定的带状注意力模式,在更大的模型上发现它反而有效——这是一个令人惊喜的"第二波"突破。
三次跳跃之间是大量的优化器微调(学习率、weight decay、warmdown ratio、gradient clipping 等),每次改进幅度很小但稳步累积。最终最优配置的关键参数为:DEPTH=4、ASPECT_RATIO=96(384-dim)、MLP 8x、WINDOW_PATTERN=SSSL、short_window=384、EMBEDDING_LR=0.85、WARMDOWN_RATIO=0.65、MATRIX_LR=0.06、WEIGHT_DECAY=0.05。
数据统计
| 指标 | 数值 |
|---|---|
| 总运行时间 | ~24.5 小时 |
| 总实验数 | 222 |
| 保留改进 | 35 (15.8%) |
| 丢弃 | 184 (82.9%) |
| 崩溃 | 4 (1.8%) |
| 初始 val_bpb | 1.1498 |
| 最终 val_bpb | 1.1107 |
| 总改进 | -3.4% |
| GPU 显存使用 | 3.6 GB → 6.4 GB |
收益递减曲线
| 阶段 | 时间段 | val_bpb 改进 | 实验数 | 每实验平均改进 |
|---|---|---|---|---|
| 探索期 | 0-6h | -2.3% | ~30 | -0.077% |
| 优化期 | 6-12h | -0.6% | ~60 | -0.010% |
| 精调期 | 12-17h | -0.07% | ~60 | -0.001% |
| 窗口突破 | 17-20h | -0.4% | ~40 | -0.010% |
| 收敛期 | 20-24.5h | -0.04% | ~30 | -0.001% |
有趣的是,在 17 小时左右出现了一次"第二波"改进——Agent 重新发现了窗口注意力模式的价值,带来了 0.4% 的额外改进。这说明棘轮循环偶尔能跳出局部最优。
完整实验数据
全部 222 个实验的原始数据(包括每个实验的 commit hash、val_bpb、显存使用、状态和描述)已公开在 GitHub 仓库中:
Agent 发现的关键洞察
- 模型宽度比深度更重要(在 5 分钟预算内):DEPTH=4 + 384-dim 比 DEPTH=8 + 256-dim 好得多
- MLP 8x 扩展有效:更宽的 FFN 层在小模型上收益显著
- 简单激活函数更优:ReLU² > GeLU > SwiGLU(在这个规模上)
- QK norm 放在 RoPE 之前比之后好
- Weight decay 的最优值取决于模型大小:小模型 WD=0 最好,放大后 WD=0.05 更优
- 窗口注意力模式在放大后重新有效:初始被否定的 SSSL 模式在 384-dim 模型上带来了显著改进
- 很多"常识"在小模型上不成立:更大 batch、更深模型、更花哨的激活函数都不如简单配置
七、成本核算
| 项目 | 费用 |
|---|---|
| EC2 g5.xlarge(~24.5h × $1.24/hr) | ~$30 |
| Bedrock API(Claude Sonnet 4.6,222 个实验) | ~$10-15 |
| 总计 | ~$40-45 |
对比 Karpathy 在 H100 上的实验(p5.4xlarge ~$7.91/hr × 8h = ~$63),我们用相近的成本跑了更多实验(222 vs 83),虽然模型规模更小。
八、经验总结
什么做得好
- SSM + Bedrock 的组合很顺畅:零密钥管理,IAM 统一控制,部署脚本一键搞定
- Claude Code 的自主能力令人印象深刻:它自己完成了 A10G 适配、硬件边界探索、系统性超参数搜索
- 棘轮机制确实有效:222 个实验,35 个改进,代码库只能前进不能后退
--dangerously-skip-permissions是必须的:autoresearch 需要完全自主运行,每次确认权限会打断循环
什么可以改进
- Deep Learning AMI 的 cloud-init 很慢:首次启动要等很久,User Data 中的
cloud-init status --wait会卡住。建议手动执行安装步骤 - 收益递减来得很快:前 6 小时贡献了大部分改进,但 17 小时左右出现了窗口注意力的"第二波"突破。建议至少跑 20 小时以捕获这类延迟发现
- 创造力天花板是真实的:Agent 没有发明任何新的架构创意,所有改进都是人类研究者最终会想到的
对 autoresearch 的思考
Karpathy 说得对——autoresearch 自动化的是 ML 研究中方法性迭代的部分。它不会替代创造性思考,但它能在你睡觉的时候把 100 个"这个参数调大一点会怎样"的实验全跑完。
最值得深思的是一句话:
"如果下一代工程师因为 Agent 能处理执行工作就跳过了基础研究训练,这个领域将拥有充足的算力,却没有人有经验来指明方向。"
写好
program.md 需要你自己先做过研究。Agent 处理执行,但研究方向的判断仍然是人类的工作。参考资料
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article