nanochat
用 50 美元、2 小时,从零训练 GPT-2 级 AI 模型的极简训练框架
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 50 美元、2 小时,从零训练 GPT-2 级 AI 模型的极简训练框架
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个画面: 2019 年,OpenAI 花了 4.3 万美元、用了数周时间,训练出了 GPT-2——当时世界上最强大的文本生成模型。彼时,这是一笔只有顶级实验室才能承受的开销。五年后的今天,一位名叫 Andrej Karpathy 的研究者,用不到 50 美元、两个小时,在一台 8 卡 GPU 服务器上,从零训练出了一个性能相当的语言模型,并将整个流程写成了开源代码。
这就是 nanochat——一个极简但完整的 LLM 训练实验平台。

图1:nanochat 项目 logo
Andrej Karpathy 是 AI 领域最知名的技术布道者之一。他拥有斯坦福大学计算机科学博士学位,师从李飞飞教授,博士论文主题是卷积神经网络在自然语言处理中的应用。他曾作为创始成员加入 OpenAI,负责大模型预训练研究;后来担任特斯拉 Autopilot 视觉团队负责人,主导端到端自动驾驶算法研发。离开特斯拉后,他创办了 AI 教育平台 Zero To Hero,以深入浅出的视频教程闻名全球。
nanochat 是他在 AI 训练实践方向的最新力作。项目取名"nano"(意为极微),强调代码的极简性和可破解性——Karpathy 希望让每一个对 LLM 训练感兴趣的人,都能通过阅读和修改这个代码库,理解大模型训练的全貌,而非被复杂的工业级代码劝退。

图2:Scaling Laws 实验数据——深度(层数)与模型性能的关系
nanochat 虽然代码精简,却覆盖了 LLM 训练的全链路,分为 6 个核心阶段:
1. Tokenization(分词):使用 tiktoken 和 rustbpe 库实现高效字节对编码(BPE),将原始文本转换为模型可处理的 token 序列。tiktoken 由 OpenAI 开源,比传统 Python 分词器快数倍,是 GPT 系列模型的标配分词工具。
2. Pretraining(预训练):在海量互联网文本上进行自监督学习,任务是预测下一个 token。这是大语言模型最核心的训练阶段,也是最消耗算力的环节。nanochat 实现了完整的 PyTorch 分布式训练逻辑,支持多 GPU 数据并行,利用 Flash Attention 加速注意力计算,FP8 量化进一步降低显存占用。
3. Finetuning(微调):在预训练模型基础上,用特定数据集进行监督微调(SFT),或使用 RLHF/DPO 方法对齐人类偏好。代码库提供了 chat_sft.py、chat_rl.py 等脚本,支持常见的微调范式。
4. Evaluation(评估):内置 8 个评测任务(HellaSwag、ARC、GSM8K、MMLU、HumanEval、SpellBee 等),覆盖常识推理、数学解题、代码生成等维度,并使用 DCLM CORE 作为核心评估基准。
5. Inference(推理):训练好的模型可直接用于文本生成推理,支持流式输出(streaming)。
6. Chat UI(对话界面):通过 chat_web.py 启动基于 FastAPI 的 Web 服务器,提供类似 ChatGPT 的对话界面,并支持多 GPU 数据并行分发请求。
如果把大模型训练比作建造一座摩天大楼,传统的训练框架(如 Megatron-LM、DeepSpeed)就像是专业建筑公司的全套工具——功能强大,但学习曲线陡峭,调试困难。nanochat 则相当于一套精密的乐高积木:每个模块(分词、训练、微调、评估)都独立存在、接口清晰,你可以单独替换某个组件来验证自己的想法。
这种设计哲学深受 Karpathy 另一代表作 nanoGPT 的影响——nanoGPT 曾在 GitHub 获得 2 万+ stars,成为理解 GPT 架构的入门标杆。nanochat 在 nanoGPT 基础上进一步扩展,将整个训练生命周期整合进来。
Scaling Laws 自动调节:nanochat 的核心创新之一是 --depth 参数——只需指定 Transformer 层数,其他所有超参数(隐藏层维度、注意力头数、学习率、训练步数等)都会根据 Karpathy 推导的 scaling laws 自动计算至最优值。这意味着非专业用户只需调节一个旋钮,就能训练出性能可比的模型,大幅降低了 LLM 训练的专业门槛。
FP8 混合精度训练:最新版本引入了 FP8(8 位浮点)混合精度训练,在保持模型精度的同时将显存占用减少约一半,使单卡可容纳的模型规模翻倍。
社区速度竞赛:nanochat 维护了一份 "Time-to-GPT-2" 排行榜,记录社区成员用该框架训练至 GPT-2 性能水平所需的最短时间。截至目前,最优成绩已从最初的 3.04 小时压缩至 1.65 小时,训练效率提升了近一倍。这一透明排行榜有效激励了社区贡献各种优化技巧。
| 配置项 | 最低要求 | 推荐配置 |
|---|---|---|
| GPU | 单卡 24GB 显存 | 8×H100 80GB |
| 内存 | 16GB RAM | 64GB+ RAM |
| 存储 | 50GB | 200GB+ NVMe SSD |
| Python | ≥3.10 | 3.11+ |
| 框架 | PyTorch 2.9.1 + CUDA 12+ | 同左 |
纯 CPU 环境下无法高效运行预训练,但可用 CPU 模式运行推理和评测。
缺乏容器化支持:nanochat 没有提供 Dockerfile 或 docker-compose.yml,在没有预装 CUDA 环境的服务器上,依赖配置可能成为障碍。项目目前仅支持通过 uv pip install 安装,对习惯 Docker 部署的用户不够友好。
规模化瓶颈:nanochat 的定位是单节点训练框架,缺乏多节点分布式训练和混合并行(Tensor Parallelism/Pipeline Parallelism)支持。对于需要训练 70B 参数以上超大模型的用户,需要引入 Megatron-LM 等框架,而非 nanochat 能覆盖的范畴。
评测基准的局限性:DCLM CORE 虽是目前最权威的开源评测基准之一,但它主要反映模型的标准化能力,无法全面覆盖实际应用场景中的表现(如对话连贯性、创意写作、多轮上下文记忆等)。
nanochat 的核心价值不在于训练出 SOTA 模型,而在于降低理解门槛。在 AI 训练日益被少数拥有万卡集群的机构垄断的当下,nanochat 让普通研究者、学生、甚至独立开发者,都能亲手训练一个"可用"的语言模型,直观感受 scaling laws 的魔力。
当 GPT-2 级别的训练成本从 4.3 万美元降到 50 美元,训练时间从数周压缩到 2 小时以内,这个数字本身就说明了一个不可逆的趋势:AI 训练基础设施的效率革命,正在将曾经属于顶级实验室的"魔法"变为普通开发者的"工具包"。
nanochat 正是这场革命的缩影。