首页
学习
活动
专区
圈层
工具
发布

刚刚,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 格式:

评估体系

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

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+群友交流。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OZWe6ILteB-0Zew_O9wJgWzg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券