刚刚,Andrej Karpathy放出大招:开源nanochat项目,仅8000行代码100美元就能训练出一个ChatGPT

Andrej Karpathy 又放大招了!

图片

他刚刚发布了一个名为 nanochat 项目,用 8000 行代码实现了 ChatGPT 的完整训练流程。
图片

在一个 8xH100 节点上跑 4 小时,花费约 100 美元,你就能拥有一个能对话、写故事、答题的 AI 助手。

这个项目延续了 nanoGPT 的极简哲学,但覆盖范围更广——

从 tokenizer 训练到强化学习,从预训练到 Web UI,全部包含在一个干净、依赖最少的代码库中。

快速开始

感受 nanochat 的魔力的最快方式是运行 speedrun 脚本:

# 克隆项目git clone git@github.com:karpathy/nanochat.gitcd nanochat
# 在 screen 会话中启动训练(记录日志)screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh

4 小时后,你就能通过 Web UI 与你的 LLM 对话了:

python -m scripts.chat_web

访问显示的 URL(比如 Lambda 上是 http://209.20.xxx.xxx:8000/),就能像使用 ChatGPT 一样与你的模型聊天。

图片

技术架构

整个训练流程包含以下关键步骤:

Tokenizer 训练

Karpathy 用 Rust 重新实现了 tokenizer,因为 Python 版本太慢,HuggingFace 的又太臃肿。

训练使用 65,536 个词汇(2^16),在 20 亿字符上只需 1 分钟:

# 构建 Rust tokenizeruv run maturin develop --release --manifest-path rustbpe/Cargo.toml
# 训练 tokenizerpython -m scripts.tok_train --max_chars=2000000000python -m scripts.tok_eval

压缩比达到 4.8,比 GPT-2 的 tokenizer 表现更好,甚至在某些方面接近 GPT-4 的水平。

预训练

预训练阶段训练一个 20 层的 Transformer,约 5.6 亿参数:

torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=20

模型配置自动生成:

  • 1280 维度,10 个注意力头

  • 每步处理 524,288 个 token

  • 遵循 Chinchilla 缩放定律:5.6 亿参数 × 20 = 112 亿 token

  • 总计算量:~4e19 FLOPs

训练过程中,学习率会自动缩放(1/√dim),使用 Muon 优化矩阵参数,AdamW 优化嵌入层。

中间训练

中间训练让模型适应对话格式,学会多选题和工具使用:

train_dataset = TaskMixture([    SmolTalk(split="train"),        # 460K 对话    MMLU(subset="auxiliary_train"),  # 100K 多选题    GSM8K(subset="main"),            # 8K 数学题(教工具使用)])  # 总计:568K 行

对话格式遵循 OpenAI 的 Harmony 格式:

<|bos|><|user_start|>What is the color of the sky?<|user_end|><|assistant_start|>Red. Wait, possibly blue. I'm not sure.<|assistant_end|>

评估体系

项目包含完整的评估框架:

torchrun --standalone --nproc_per_node=8 -m scripts.chat_eval -- -i mid

评估结果会包含多个维度:

  • 世界知识:ARC-E/C、MMLU(多选题,随机基线 25%)

  • 数学能力:GSM8K(小学数学题,基线 0%)

  • 编程能力:HumanEval(Python 编程,基线 0%)

  • ChatCORE:综合指标,去除基线后的平均分

图片

成本与性能

100 美元版(4 小时)

# 默认配置,depth=20bash speedrun.sh
  • CORE:0.2219(接近 GPT-2 Large)

  • MMLU:31%

  • GSM8K:4.5%

  • 能写故事、回答简单问题

300 美元版(12 小时)

# depth=26,需要调整批次大小torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \    --depth=26 --device_batch_size=16
  • 性能超过 GPT-2(CORE > 0.25)

  • 更连贯的对话能力

1000 美元版(41.6 小时)

# depth=30,进一步减小批次torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \    --depth=30 --device_batch_size=8
  • MMLU:40+ 分

  • ARC-Easy:70+ 分

  • 计算量相当于 GPT-3 Small 的 1/1000

强化学习

项目实现了简化版 GRPO 算法,专门针对 GSM8K 数学题:

torchrun --standalone --nproc_per_node=8 -m scripts.chat_rltorchrun --standalone --nproc_per_node=8 -m scripts.chat_eval -- -i rl -a GSM8K

RL 训练抛弃了很多复杂机制:

  • 无信任区域(去掉参考模型和 KL 正则化)

  • on-policy(去掉 PPO 的 ratio+clip)

  • GAPO 风格标准化(token 级别)

  • 简单奖励偏移(去掉 z-score 标准化)

虽然简化,但效果明显:GSM8K 从 4.5% 提升到 7.6%。

推理引擎

项目包含自定义的 Engine 类,实现了高效推理:

  • KV 缓存

  • prefill/decode 两阶段推理

  • Python 解释器工具调用(轻量级沙箱)

  • CLI 和 Web UI 接口

代码组织

整个项目结构大致如下:

- 8,304 行代码- 44 个文件- 2,004 行依赖(uv.lock)- 约 83,497 个 token

每个脚本都有明确职责:

  • tok_train.py:训练 tokenizer

  • base_train.py:预训练

  • mid_train.py:中间训练

  • chat_sft.py:监督微调

  • chat_rl.py:强化学习

  • chat_web.py:Web 服务

不同硬件适配

代码设计考虑了各种计算环境:

单 GPU:去掉 torchrun,结果几乎相同,时间延长 8 倍

显存不足:调整 --device_batch_size

# 从默认的 32 逐步降低--device_batch_size=16  # 40GB VRAM--device_batch_size=8   # 20GB VRAM--device_batch_size=4   # 10GB VRAM

A100 节点:代码完全兼容,速度稍慢

社区反响

Chinmay Kak (@ChinmayKak) 分享了他的 nanosft 项目,一个单文件的微调实现:

正准备做一系列 repo,现在找到了对比基准

Plamen (@pvkdeveloper) 关心许可证:

README 里说是 MIT 许可,会保持这样吗?

zenitsu_apprentice (@zenitsu_aprntc) 好奇代码来源:

有多少代码是手写的?

Kacper Łukawski (@LukawskiKacper) 询问技术细节:

你是否实验过不同的 tokenization 算法?tokenizer 的选择对整体性能有多重要?

未来方向

Karpathy 强调,nanochat 远未完成。这是一个「强基线」代码库,设计目标是:

  • 最大可 fork 性

  • 认知复杂度最低

  • 没有巨型配置对象

  • 没有模型工厂

  • 没有 if-then-else 怪物

你可以调整任何部分:tokenizer、数据、超参数、优化算法。通过简单调整 --depth 参数,就能训练出整个模型系列。

项目采用 MIT 许可证开源。

Karpathy 在致谢中提到的,这个项目受到了 nanoGPT 和 modded-nanoGPT 的启发,并得到了 HuggingFace(数据集)、Lambda(计算资源)和 Alec Radford(技术指导)的支持。





    [1]

    GitHub 仓库: https://github.com/karpathy/nanochat

    [2]

    详细技术讨论: https://github.com/karpathy/nanochat/discussions/1

    [3]

    Discord 频道: https://discord.gg/3zy8kqD9Cp


    另外,我还用AI 进行了全网的AI 资讯采集,并用AI 进行挑选、审核、翻译、总结后发布到《AGI Hunt》的实时AI 快讯群中。

    这是个只有信息没有感情的 AI 资讯信息流(不是推荐流、不卖课、不讲道理、不教你做人、只提供信息、希望能为你节省一些时间)

    欢迎加入!

    也欢迎加群和7000+群友交流。

    图片