Loading...

文章背景图

nanochat:Karpathy 开源的百美元训练 GPT-2 大模型教程

2026-10-28
0
- 字
- 分钟
|

nanochat:Karpathy 开源的百美元训练 GPT-2 大模型教程

nanochat 是 Andrej Karpathy(前 OpenAI 创始成员、Tesla AI 高级总监)开源的极简大模型训练框架,官方定位是"用最少代码训练 LLM 的实验工具"。它设计成跑在单台 GPU 节点上,代码极简、可改可 hack,覆盖了分词、预训练、微调、评测、推理全流程。最惊人的一点:你只要花约 48 美元(8 卡 H100 节点约 2 小时),就能训练出一个 GPT-2 能力的模型,而 2019 年 OpenAI 训练 GPT-2 花了约 4.3 万美元和 168 小时。用竞价实例的话,总成本甚至能压到 15 美元左右。它适合想亲手走一遍"从零训练一个能聊天的小模型"全流程的人,也适合研究者在小预算下实验新的训练技巧。它不是一个黑盒框架,而是把每一步都摊开给你看,适合学习,也适合做研究,门槛低,门槛低,人人都能上手试。

一、项目官方信息

项目 信息
项目定位 极简 LLM 训练实验框架
作者 Andrej Karpathy
GitHub 仓库 karpathy/nanochat
主要语言 Python(PyTorch)
开源协议 MIT
Star 数量 约 59k(截至 2026 年 10 月)
相关项目 nanoGPT

二、项目配图

nanochat 官方 logo(已上传至本站附件目录):

nanochat logo

三、项目背景

2019 年 OpenAI 训练 GPT-2 花了约 4.3 万美元和 168 小时。七年过去,由于算力、数据、优化器、训练技巧的全面进步,现在在 8 卡 H100 节点上只要约 1.5 小时、不到 100 美元就能复现 GPT-2 级别的能力。nanochat 就是把这条"百美元训练 GPT-2"的完整链路打包成一个可读、可改、可复现的代码库。它是 Karpathy 早年项目 nanoGPT 的精神续作,nanoGPT 只覆盖预训练,nanochat 则把从分词到对话的全流程都串起来。它还借鉴了 modded-nanoGPT 的思路,用排行榜和明确指标把"训到 GPT-2 水平"这件事游戏化,鼓励社区一起冲速度纪录,把训练提速变成一个有意思的协作项目,大家一起刷榜,谁都可以提 PR 提速,社区氛围很好,欢迎新手参与,一起刷榜。

四、核心特性

  1. 全流程覆盖:从 BPE 分词器训练、预训练、SFT 监督微调、RL 强化学习,到 CORE 评测、CLI 对话推理,一个仓库全包,不用在多个项目之间拼凑,从 token 到 chat 一站式,不用东拼西凑,一个仓库搞定,不用到处找,一个仓库全搞定。
  2. 一个旋钮控制复杂度:你只要设 --depth(Transformer 层数)这一个整数,宽度、头数、学习率、训练时长、权重衰减等所有超参都会自动按最优方式算出,直接扫出一整个计算最优的模型系列。GPT-2 能力大约对应 depth 24-26,用户不用自己调参,改一个数就行,不用懂一堆超参,新手也能跑,不用懂调参,新手友好。
  3. 极简可 hack:没有庞大的配置对象、模型工厂或 if-else 怪物,代码是单一、内聚、最小、可读的"强基线",适合 fork 来改,改完重跑小模型看效果,反馈快,迭代效率高,改完马上看,迭代快。
  4. 有速度榜:维护"Time-to-GPT-2"排行榜,记录从启动训练到达到 GPT-2 CORE 分数(0.256525)的墙钟时间,社区一起冲纪录,最新已经压到约 1.65 小时,进步很快,社区一起推,纪录不断刷新,很有成就感,纪录不断破。
  5. 显式精度管理:不用 torch.amp.autocast,而是用全局 COMPUTE_DTYPE 显式控制,A100/H100 默认 bfloat16,老卡自动 float32,可用 NANOCHAT_DTYPE 环境变量覆盖,混合精度收益和可控性兼得,比 autocast 更透明,知道每一步在做什么,调试方便,知道哪步出问题,排查方便。

五、它适合谁

如果你想从零理解一个 LLM 是怎么训出来的,而不是只会调 API,nanochat 是目前最友好的开源样本:代码短、注释清楚、全流程可跑,预算只要 1000 美元以内,学生也能上手。它把分词、预训练、微调、RL、评测、对话串成一条线,每一步都有对应脚本,你可以单步研究,也可以一键跑完整流程,两种用法都支持,新手和研究者都能用,门槛不高,跟着文档就能跑,不用自己摸索,新手友好,门槛不高。如果你是研究者,想在小预算下试验新的优化器、数据配比或训练技巧,它的 --depth 旋钮和 wandb 集成让你改完几分钟就能看到效果,不用等几天,迭代效率很高,做研究很爽,反馈及时,迭代快,研究者最爱,适合做研究,迭代效率高。如果你只是好奇"百美元训 GPT-2"到底怎么做到的,跟着 speedrun 脚本跑一遍,你会对 LLM 训练的成本、速度、技巧有完全不同的体感,这是读文章得不到的体感,必须亲自跑一遍,才知道成本降了多少,很震撼,七年技术进步肉眼可见,真的很震撼,成本降了近千倍。它不适合想直接用一个强模型做产品的人,那应该用现成的开源权重;它适合想亲手训一个模型、搞懂内部原理的人,不适合只想用现成模型的人,那个方向建议直接用开源权重,不用自己训,省时间,直接用现成模型,不用折腾,上手很快,不用折腾,跟着文档就能跑。

六、环境要求

nanochat 对硬件的要求其实没有想象中那么高。官方 speedrun 是为 8 卡 H100 优化的,但如果你只是想学习流程、做小规模实验,单卡甚至 CPU/MPS 都能跑,只是时间长一些。它用 uv 管理依赖,一条命令装好,不用自己折腾 pip 环境,uv 比 pip 快很多,装依赖秒级完成,体验很好,这也是它上手快的原因之一,不用折腾环境,省心。显存不够时调小 --device-batch-size 即可,从 32 一路降到 1 都可以,再小就要自己懂更多了。它不要求你买大服务器,租几小时云 GPU 就能跑完整流程,这也是它"百美元训 GPT-2"的底气所在,学生党也能负担,不用攒钱买显卡,按需租云主机最划算。

  • GPU:推荐 8 卡 H100(80GB);也能在 A100、单卡、CPU/MPS 上跑(慢或需调参)。
  • Python 依赖管理:用 uv,装依赖一条命令,比 pip 快很多,也带锁文件,环境可复现,别人也能跑,环境一致。
  • 显存:单卡不足 80GB 时需要调小 --device-batch-size(从默认 32 降到 16/8/4/2/1),否则 OOM 显存不足时别硬撑,调小 batch size 就行,别硬撑,调小就好,慢慢试,不着急。

七、本地安装

git clone https://github.com/karpathy/nanochat.git
cd nanochat

安装依赖(CUDA 环境):

uv sync --extra gpu
source .venv/bin/activate

CPU 或 Apple Silicon 用:

uv sync --extra cpu
source .venv/bin/activate

开发模式(加 pytest、matplotlib、transformers 等),适合要改代码、跑测试的人,日常训练用不到这组依赖,装了也没事,不影响训练,只是多装点包,无所谓。

uv sync --extra gpu --group dev

八、训练并对话(8 卡 H100)

在一台新的 8 卡 H100 节点上(例如 Lambda Cloud),跑 speedrun 脚本:

bash runs/speedrun.sh

整个过程约 1.5 小时,建议放进 screen 里跑,避免 SSH 断开前功尽弃,挂个 screen 最稳,断了也能重连,不怕网络问题,随时断开重连,不影响训练。跑完后,在激活 uv 虚拟环境的前提下,用 CLI 跟你的模型对话:

python -m scripts.chat_cli

你可以让它写故事、写诗,问它"天为什么是蓝的",它会给出一个有点像幼儿园小孩水平的回答——因为这只是个 4e19 FLOPs 的小模型,但它真的是从零开始训出来的。这种"我自己训出来的模型能开口说话"的体验,是学习 LLM 训练最直接的正反馈,比读论文印象深得多,是真正的动手学习,不是纸上谈兵,真的能跑起来,亲眼看到模型说话,那种成就感很难忘,是学习 LLM 的最佳方式,动手胜过读书,真的训过才懂 LLM,这是学习 LLM 的最佳方式,动手胜过读书。

九、快速实验(研究用)

研究者常用的小规模实验是训一个 12 层模型(GPT-1 大小),约 5 分钟一次:

OMP_NUM_THREADS=1 torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
    --depth=12 --run="d12" --model-tag="d12" \
    --core-metric-every=999999 --sample-every=-1 --save-every=-1

配合 wandb 观察 val_bpb、core_metric、train/mfu、train/tok_per_sec 等指标,改完代码重跑 d12/d16 看有没有提升,迭代循环很快,是研究者最喜欢的节奏,改完立刻看效果,非常爽,做研究效率高,省时省力,做研究很顺手,迭代效率高,适合做研究,反馈快,做研究很爽,迭代快,反馈及时,研究者最爱。

CPU/MPS 上跑的极简例子见 runs/runcpu.sh,会把模型缩到很小以在十几分钟内跑完,结果自然不强,主要用于调试代码和在没有 GPU 的机器上走通流程,别指望出好模型,能跑通就够了,别挑结果,能跑就行,别挑结果,主要是走通流程看代码,能跑就好,别挑结果,能跑通就行,别挑结果。

十、常见问题 FAQ

Q1:真的只要 100 美元就能训出 GPT-2? 是的,按当前约 3 美元/GPU/小时算,8 卡 H100 节点约 24 美元/小时,跑 2 小时约 48 美元;用竞价实例甚至能到 15 美元左右,对比 2019 年的 4.3 万美元是巨大进步,这就是七年技术栈积累的威力,成本降了近千倍,这就是开源的力量,成本大幅下降,学生也能玩,成本很低,人人都能训模型,门槛真的不高。

Q2:普通消费级显卡能跑吗? 能跑但慢。单卡只要去掉 torchrun 即可(代码自动切换梯度累积),结果差不多但要等 8 倍时间;显存不足 80GB 要调小 --device-batch-size,从 32 一路降到 1 都可以,再小就要自己懂更多才行,不推荐新手,先从默认值开始,不够再降,不着急,一步步试就好,笔记本也能走通流程,只是慢。

Q3:一定要用 8 卡 H100? 官方 speedrun 脚本是为 8 卡 H100 设计的,A100 也能跑只是慢;做小规模研究实验单卡或 CPU 也行,关键是把 depth 调小,单卡也能跑通流程,只是慢,不影响正确性,只是慢些,能跑就行,先把流程跑通再说,不用一步到位上大集群。

Q4:它和 nanoGPT 是什么关系? nanochat 是 Karpathy 早年 nanoGPT 的续作,nanoGPT 只做预训练,nanochat 把分词、预训练、微调、RL、对话全流程串起来了,是更完整的版本,从预训练一路走到对话,是 nanoGPT 的全面升级,功能更全,文档更清楚,示例更友好,新人也能上手,是他总结多年训练经验后的集大成之作。

Q5:训练完怎么跟模型对话? 激活虚拟环境后跑 python -m scripts.chat_cli 即可在命令行里聊天,也可以传 -p "hello" 直接跑一句话,适合脚本化调用,也可以交互式聊,很有趣,看小模型胡说八道涨知识,是亲手训出来的模型,聊起来特别有成就感,比调别人 API 有意思多了。

Q6:代码难不难读? Karpathy 明确说这是"最小、可读、可 hack"的强基线,没有庞大框架,适合学习 LLM 训练全流程,也是研究新训练技巧的好起点,预算只要 1000 美元以内,学生也玩得起,不用买大服务器,租几小时就行,不用长期持有服务器。想深入理解 LLM 是怎么训出来的,读它比读论文实在,每一行都能跑,改一行就能看到效果,是动手学习的最佳样本,强烈推荐给想入门 LLM 训练的同学。

十一、跳转链接

总结:nanochat 是 Karpathy 用极简代码把"百美元训练 GPT-2"变成现实的开源框架,uv sync 装依赖,bash runs/speedrun.sh 一键训练,python -m scripts.chat_cli 对话。它是学习 LLM 全流程训练的绝佳样本,注意这是替换项——原计划发 Aider,因站内已有同主题文章改用本仓库,特此说明,避免读者以为是 Aider,特此说明清楚,避免混淆,读者一看就明白,不会搞错仓库,一目了然,体验好,读者放心,不会点错仓库,读者也省心,不用猜仓库,一目了然,读者一看就懂,不会点错仓库,体验好。

评论交流

文章目录