使用本地 LLM 运行 Karpathy 的 autoresearch 实现零成本自主 AI 研究
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
OpenAI 联合创始人、前 Tesla AI 总监 Andrej Karpathy 最近发布了一个名为 autoresearch 的实验项目,引发了开发者社区的热烈讨论。该项目的核心逻辑非常纯粹:让一个 LLM(大语言模型)作为“研究员”,自主修改 GPT 训练脚本,运行 5 分钟的实验,保留能降低 val_bpb(每字节比特数)的改动,丢弃无效的尝试。虽然原版项目使用 Claude Code(基于云端 API)作为研究员,但开源社区迅速推出了本地化版本。
在这篇教程中,我们将深入探讨如何利用 Qwen 3.5 9B 模型通过 Ollama 在本地运行这一流程。这不仅能实现零 API 成本,还能确保你的研究数据完全私有。如果你在实验过程中需要更高性能的模型支持,或者本地算力不足以支撑复杂的推理任务,n1n.ai 提供了极其稳定的 API 聚合服务,让你能一键接入 Claude 3.5 Sonnet 或 DeepSeek-V3 等顶级模型,助力你的自主研究循环。
核心逻辑:自主机器学习工程
Karpathy 的 autoresearch 实际上是一个闭环的进化系统。LLM 代理被赋予了修改 train.py 的权限,并能读取实验历史记录 results.tsv。它的任务是在给定的约束条件下,通过不断尝试新的超参数或模型架构改动,来优化训练结果。
原版方案依赖 Claude 3.5 Sonnet,其代码能力毋庸置疑,但频繁的 API 调用产生的费用不容小觑。通过 n1n.ai 接入高性能模型固然方便,但在初步实验阶段,使用本地的 Qwen 3.5 9B 可以让你无限制地进行尝试,而不必担心账单问题。
硬件架构与显存策略
在单台机器上同时运行 LLM 代理和 GPT 训练任务,对显存(VRAM)的管理提出了极高要求。通常建议使用 24GB VRAM(如 RTX 3090/4090)或 48GB VRAM(如 A6000)。
在本地 Fork 版本中,显存分配大致如下:
- 研究员 (Qwen 3.5 9B via Ollama): 占用约 12GB 显存。
- 训练任务 (GPT training via train.py): 占用约 35GB 显存(在 48GB 显卡上)或根据 24GB 显卡进行缩减。
为了适配本地硬件,该版本对 Karpathy 的原始参数进行了调整:
| 组件 | Karpathy 原版 | 本地 LLM Fork 版 |
|---|---|---|
| 模型深度 | 8 层 | 4 层 |
| 设备 Batch Size | 128 | 64 |
| 总 Token 数 | 524K | 65K |
| 注意力窗口模式 | SSSL | L |
虽然训练的模型规模变小了,但由于本地运行没有 API 速率限制,代理可以在相同时间内完成更多的实验迭代,从而通过“勤能补拙”的方式找到优化路径。
环境搭建步骤
首先,你需要安装 Ollama 并下载 Qwen 3.5 9B 模型。如果你发现 9B 模型的推理能力无法满足复杂的架构设计需求,可以通过 n1n.ai 快速切换到更强大的模型进行对比测试。
- 安装 Ollama 并拉取模型:
curl -fsSL https://ollama.com/install.sh | sh
ollama serve &
ollama pull qwen3.5:9b
- 克隆仓库并同步依赖:
git clone https://github.com/SohniSwatantra/autoresearch-local-llm.git
cd autoresearch-local-llm
pip install uv
uv sync
- 启动自动化研究流水线:
bash run_pipeline.sh
Agent.py 核心逻辑解析
整个系统的灵魂在于 agent.py,它只有约 250 行代码,但实现了一个完整的自动化科学研究闭环:
- 上下文构建:将当前的
train.py内容和results.tsv中的实验结果发送给 Qwen 3.5。 - 代码提取与校验:LLM 返回修改后的代码后,脚本使用正则表达式提取代码块,并利用
ast.parse()进行语法检查。只有合法的 Python 代码才会进入实验阶段。 - Git 管理:在运行实验前,系统会自动
git commit当前代码。如果实验结果不佳(val_bpb未下降),系统会执行git reset --hard回滚到上一个最优状态。 - 容错机制:如果代码运行崩溃,错误日志会被喂回给 LLM,让它在下一轮尝试中修复自己的 Bug。
以下是代码提取的关键片段:
import re
import ast
def extract_code_from_response(response):
# 使用正则匹配 Python 代码块
blocks = re.findall(r"```(?:python)?\s*\n(.*?)\n```", response, re.DOTALL)
if not blocks:
return None
# 选取最长的块,通常是完整的脚本内容
candidate = max(blocks, key=len)
try:
# 语法检查,防止损坏文件
ast.parse(candidate)
return candidate
except SyntaxError:
return None
为什么选择 Qwen 3.5 9B?
在本地模型中,Qwen 3.5 9B 在指令遵循和代码生成方面表现极为出色。尽管其参数量仅为 9B,但它能够理解复杂的机器学习概念,如学习率调度(Learning Rate Schedulers)和权重初始化策略。如果你的研究涉及更深层次的数学推导,建议通过 n1n.ai 接入 DeepSeek-R1,利用其强大的推理链来指导本地训练。
设计哲学:让 AI 在你睡觉时工作
Karpathy 在 program.md 中提到了几个核心设计原则:
- 永不停歇 (NEVER STOP):系统应该无限循环运行。按照每 5 分钟一个实验计算,当你睡 8 小时醒来时,AI 已经帮你完成了近 100 轮实验。
- 简洁至上:如果一个复杂的改动只能带来微小的提升,系统会倾向于保持代码简洁。代码的删除(如果效果持平)被视为一种进步。
- 容错与恢复:系统假定用户不在场,因此必须能够处理各种意外。如果连续 3 次实验导致崩溃,系统会自动重置到初始 Baseline 状态。
成本与效益分析
| 配置 | 单次实验成本 | 100 次实验总计 |
|---|---|---|
| 原始方案 (Claude API) | 约 0.15 美元 | 15.00 美元 |
| 本地 Fork (自有显卡) | 0.00 美元 | 0.00 美元 |
| 云端算力租赁 (RTX 4090) | 约 0.08 美元 | 8.00 美元 |
通过本地化部署,开发者可以极大地降低实验门槛。当然,对于追求极致效率的企业级应用,结合本地算力与 n1n.ai 的高并发 API 往往是最佳实践。
总结
Karpathy 的 autoresearch 实验展示了 AI 代理在科研领域的巨大潜力。通过将研究员角色交给 LLM,我们将从“手动调参”进化到“定义奖励函数”的更高维度。无论你是使用本地的 Qwen 模型,还是通过 n1n.ai 调用全球顶尖的 LLM 算力,自主 AI 研究的大门已经敞开。
立即在 n1n.ai 获取免费 API 密钥,开启你的自主 AI 研究之旅。