本节摘要:本节铺开 nanochat 的完整流水线:一台单 GPU 节点(如 8×H100)、约 4 小时、约 100 美元(官方自报),依次跑过四个阶段——①BPE 分词器训练(约 2000 词表的小型 BPE);②在 FineWeb-Edu 约 100B tokens 高质量子集上预训练 124M 参数的 GPT;③SFT 指令微调;④推理界面(导出 llama.cpp、量化部署、Whisper 语音输入)。本节给出每阶段的输入/产物表与社区实测的 loss 轨迹(预训练 10.4→2.32),标出成本大头在②、本书的主战场在③④——以及这两章如何映射到第 2~8 章。
阅读完本节,你应当能够:
┌─────────────────────────────────────────────────────────────────┐ │ nanochat 流水线(单节点,约 4h / $100) │ ├─────────────────────────────────────────────────────────────────┤ │ ① 分词器训练 ② 预训练 前半程(灰色地带)│ │ FineWeb-Edu 文本 ──► BPE 词表 ~2000 FineWeb-Edu ~100B tok │ │ │ 124M GPT 基座 │ ├─────────────────────────────────────────────────────────────────┤ │ ③ SFT 指令微调 ────────► ④ 推理界面 后半程(本书) │ │ 指令对话数据 llama.cpp 导出+量化 │ │ 只对回答算 loss Whisper 语音输入 │ │ (第 2~4 章) 对话 Web 界面(第 5~8 章) │ └─────────────────────────────────────────────────────────────────┘
四阶段的输入与产物:
| 阶段 | 输入 | 产物 | 本书覆盖 |
|---|---|---|---|
| ① 分词器训练 | FineWeb-Edu 原始文本 | BPE 词表(约 2000 token,官方发布帖口径) | 否(1.2 验收) |
| ② 预训练 | 约 100B tokens 高质量子集 | 124M 参数 GPT 基座权重 | 否(1.2 验收) |
| ③ SFT | 基座权重 + 指令对话数据 | 对话模型权重 | 第 2~4 章 |
| ④ 推理界面 | 对话模型权重 | GGUF 量化模型 + llama.cpp 服务 + 语音界面 | 第 5~8 章 |
💡 词表只有约 2000 个 token——比主流模型小两个数量级。这是刻意的实验取舍:小词表让分词器训练变成"分钟级"的玩具,把时间留给模型本身。第 8 章做中文改造时,小词表的利弊会再次出现。
社区对 nanochat 完整跑通的 walkthrough 实测(数字来自公开复现日志,不同硬件会有出入):
预训练:step 0 loss ≈ 10.4 ← 均匀随机猜词的理论值(≈ ln(2000) ≈ 7.6, step 6612 loss ≈ 2.32 实际起点更高是初始化与未收敛所致,示意理解) SFT: step 0 loss ≈ 1.3 ← 起点就是"会说话"的水平
这两个起点讲述的故事:
这也意味着:SFT 阶段 loss 的绝对值没有预训练那么"值钱"。预训练 loss 每降 0.1 都是真金白银的语言能力;SFT 的 loss 下降里混着"学会行为"与"背下数据"两种成分,后者是有害的——如何区分,正是 3.2 节读图训练的主题。
这也是第 3 章超参设计的出发点:起点低、可学的空间小,SFT 的学习率要比预训练小、轮数要少,否则会把预训练学到的能力"冲刷"掉(灾难性遗忘,3.3 节排查表有专条)。
| 章 | 流水线落点 | 干什么 |
|---|---|---|
| 2 | ③的燃料 | 指令数据形态、开源集挑选清洗、自造蒸馏 |
| 3 | ③的主体 | 损失掩码、超参、训练实战与故障排查 |
| 4 | ③↔④的接口 | chat template、special tokens、采样参数 |
| 5 | ④的质量闸门 | 评测:知道训出来的模型到底行不行 |
| 6 | ④的部署 | GGUF 量化 + llama.cpp 本地服务 |
| 7 | ④的语音 | Whisper 转写输入,语音对话界面 |
| 8 | 全图的中文化 | 分词、数据、模板与训练的本地化 |
成本结构补充(帮助决定"要不要自己跑全流程"):四阶段里预训练②占走绝大部分 GPU 时间与费用(官方口径全流程约 4 小时 / 约 100 美元,其中 SFT③只是最短的阶段之一);因此本书的实践成本远低于复现全流程——用一块 24GB 卡(0.2 节)就能把③④的实验做完整,②直接复用自训或社区权重。
注意第 4 章的特殊位置:模板既是训练侧的事(③怎么拼序列)也是推理侧的事(④怎么拼提示),它是流水线上最容易错位的一环——训练用一种格式、推理用另一种,模型立刻"失语"。第 4 章整章都在讲怎么把这条缝焊死。
当前 master 的 nanochat 已转向 GPT-2 speedrun 路线,脚本清单(base_train.py、chat_sft.py、chat_eval.py、chat_rl.py、chat_cli.py 等)与数据(SFT 示例换用 SmolTalk)都与发布帖时代不同。但四阶段的骨架没变:分词 → 基座 → 指令微调 → 对话推理,仍是任何 ChatGPT 式系统的最小完整闭环。本书讲骨架上的通用工程实践,接口以官方仓库 README 为准——这也是把"发布帖为主轴、README 为依据"写进全书约定(0.2 节)的原因。
地图有了,接下来验收行李——1.2 节清点前三阶段交给你的三样产物,并与你在《ht-gpt:从零搭建 GPT 训练与推理实战》里训过的东西对表。