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

作者
  • avatar
    姓名
    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 Size12864
总 Token 数524K65K
注意力窗口模式SSSLL

虽然训练的模型规模变小了,但由于本地运行没有 API 速率限制,代理可以在相同时间内完成更多的实验迭代,从而通过“勤能补拙”的方式找到优化路径。

环境搭建步骤

首先,你需要安装 Ollama 并下载 Qwen 3.5 9B 模型。如果你发现 9B 模型的推理能力无法满足复杂的架构设计需求,可以通过 n1n.ai 快速切换到更强大的模型进行对比测试。

  1. 安装 Ollama 并拉取模型
curl -fsSL https://ollama.com/install.sh | sh
ollama serve &
ollama pull qwen3.5:9b
  1. 克隆仓库并同步依赖
git clone https://github.com/SohniSwatantra/autoresearch-local-llm.git
cd autoresearch-local-llm
pip install uv
uv sync
  1. 启动自动化研究流水线
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 中提到了几个核心设计原则:

  1. 永不停歇 (NEVER STOP):系统应该无限循环运行。按照每 5 分钟一个实验计算,当你睡 8 小时醒来时,AI 已经帮你完成了近 100 轮实验。
  2. 简洁至上:如果一个复杂的改动只能带来微小的提升,系统会倾向于保持代码简洁。代码的删除(如果效果持平)被视为一种进步。
  3. 容错与恢复:系统假定用户不在场,因此必须能够处理各种意外。如果连续 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 研究之旅。