时长 6–7 小时:凭记忆画全景图(1.5h)· 对照 §1 补漏(0.5h)· 手算”一个模型的全部数字”再对答案(2h)· 按官方大纲逐条核对(1.5h)· 整理漏洞清单(0.5h)
对应学习计划 第 5 周 Day 3–4 的”系统复习:造一张自己的地图”:“默写一张全景图:从 token 进入模型,到 logits 出来,到采样成词,到训练如何更新权重,到 SFT/DPO/GRPO 如何改变行为,到 RAG/Agent 如何在外部扩展它。一张 A3 纸画完,画不出来的地方就是你的漏洞。” 以及”用官方 cheatsheet 逐条核对,补齐漏洞”。今天做全景图和核对,明天(Day 4)做推导默写。
配套代码
w5day3_checks.py(只用标准库):以 Llama 3 8B 为例算出全课所有的估算题:参数量逐项(并与 Llama 3 70B、Llama 2 7B、Mixtral 8x7B、Qwen2.5-0.5B 的公开数字核对)、计算量、推理显存与速度上限、训练显存、对齐的显存、RAG 与智能体的成本§B 参考实现(
code/目录):w5d3_model_calculator.py(模型账本计算器:给任意配置或预设,打印全部数字并标明公式出处)。今天的目标:不看资料画出一张完整的全景图,每个框都能说出”它解决了什么、代价是什么、在哪一节”;能在 10 分钟内手算出一个 8B 模型的参数、算力、显存和速度;按官方九讲的大纲逐条自评,列出漏洞清单。
§0 今天怎么安排
顺序很重要:先凭记忆画,再看 §1。 学习计划的原话:“不要重看视频。“复习的效果来自”回忆”这个动作本身(主动回忆),而不是来自再读一遍。画不出来的地方,就是你的漏洞,把它们标成红色,今天下午和明天专门补。
| 时段 | 做什么 |
|---|---|
| 1.5h | 一张 A3 纸,不看任何资料,画出全景图(§4 有画法) |
| 0.5h | 对照 §1,用红笔补上漏掉的框和连线 |
| 2h | 不看 §2,先手算 Llama 3 8B 的全部数字(§2 开头的题目),再对答案;对不上的回到出处重推 |
| 1.5h | §3 按官方大纲逐条自评 |
| 0.5h | 把所有红色的地方整理成一张漏洞清单,按”明天推导默写 / 后天面试题 / 需要重读”分类 |
今天要用到的旧结论:全部。
§1 全景图:从一个 token 到一个助手
下面是一张参考图。你的图不必长得一样,但每个框都要在,而且你要能说出箭头上发生了什么。
┌─────────────────────────────── ① 输入 ────────────────────────────────┐
│ 文本 ──分词(BPE / WordPiece / Unigram)──> token id ──嵌入──> 向量 │ W0D3 §7;W1D2 §6
│ 为什么是子词:词表大小 vs 序列长度;分词的副作用(数数、多语言、计费) │
│ 位置:正弦(相对位移是旋转)→ 可学习 → RoPE(打分只依赖相对位置)→ 外推 │ W1D2 §3;W1D5
└───────────────────────────────────┬───────────────────────────────────┘
┌─────────────────────── ② 一个块(重复 L 次)──────────────────────────┐
│ x ──RMSNorm──> 注意力 ──(+)──> RMSNorm──> FFN / MoE ──(+)──> x' │ W1D2 §2;W0D2 §4
│ 注意力:softmax(QKᵀ/√d)V;多头;因果掩码;MHA / MQA / GQA │ W1D1;W1D4 §2
│ FFN:键值记忆;SwiGLU;MoE:路由、top-k、负载均衡、总参数 vs 激活参数 │ W1D2 §1;W2D2
│ 高效注意力:稀疏、线性、FlashAttention(精确,省的是访存) │ W1D6 §1–3
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────────── ③ 输出 ───────────────────────────────────┐
│ 最后的隐状态 ──> logits(词表大小)──softmax──> 下一个 token 的分布 │
│ 解码:贪心 / beam(长度偏置)/ 温度 / top-k / top-p / min-p / 重复惩罚 │ W2D3 §1–2;W0D5 §5
│ 自回归循环 + KV Cache(prefill / decode;访存瓶颈;显存公式) │ W1D4 §1
│ 推测解码、PagedAttention、量化(GPTQ / AWQ / NF4) │ W3D1 §3;W2D5
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────────── ④ 预训练 ─────────────────────────────────┐
│ 损失:交叉熵 = 最大似然 = 最小 KL;困惑度 │ W0D1 §2;W0D5 §1
│ 反向传播(VJP)→ AdamW(尺子视角)→ warmup + cosine │ W0D1;W0D2
│ 数据:清洗、MinHash 去重、混合;loss spike;BF16 vs FP16 │ W2D4 §1–3
│ 规模:缩放律;Chinchilla(N ∝ D);过度训练;C ≈ 6ND │ W2D1
│ 显存与并行:16 字节/参数;梯度检查点;DP / ZeRO / TP / PP │ W2D4 §4–5
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────────── ⑤ 后训练 ─────────────────────────────────┐
│ SFT:chat template、只在回答上算损失、打包 │ W2D6 §1
│ PEFT:LoRA(B 初始化为零、α/r)、QLoRA(NF4 + 双重量化 + 分页优化器) │ W2D6 §3–4
│ 偏好:偏好数据 → 奖励模型(Bradley-Terry)→ PPO(四个模型、裁剪、KL) │ W3D2;W3D3
│ 或者 DPO(闭式最优解 → 隐式奖励);IPO / KTO / SimPO / ORPO │ W3D4
│ 推理:可验证奖励 → GRPO(组内优势)→ R1;Dr. GRPO / DAPO;蒸馏 │ W3D5
│ 主线:max E[r] − β·KL(π‖π_ref) 的闭式解 π* ∝ π_ref·exp(r/β) │ W3D6 §5.2
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────── ⑥ 推理时的算力 ────────────────────────────────┐
│ 自洽性 / 多数投票、best-of-n、加权投票、PRM 搜索、按难度分配、思考预算 │ W2D3 §5;W3D6
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────────── ⑦ 外部扩展 ───────────────────────────────┐
│ RAG:切块 → 嵌入(InfoNCE)→ 索引(IVF / HNSW / PQ)→ BM25 + 稠密 → RRF │ W4D1;W4D2
│ → 交叉编码器重排 → 拼进提示;HyDE、上下文检索、父子块 │
│ 工具:JSON Schema → 模型输出调用 → 运行时执行 → 结果回到上下文;MCP │ W4D3
│ 智能体:ReAct 循环;错误累积与检查器;护栏;记忆;多智能体与 A2A │ W4D4
└───────────────────────────────────┬───────────────────────────────────┘
┌──────────────────────────── ⑧ 评测 ───────────────────────────────────┐
│ 人工(κ)→ 规则指标(BLEU / ROUGE)→ LLM 评委(偏差与对策)→ 基准(污染) │ W4D5;W4D6
│ 统计:标准误、配对比较、胜者的诅咒;Arena:Elo = BT 的随机梯度 + 风格控制 │
└───────────────────────────────────────────────────────────────────────┘
⑨ 前沿:ViT 与多模态、扩散语言模型、Muon、数据与模型坍缩、硬件 W5D1
(W0D3 §7 表示 Week 0 Day 3 §7,以此类推。)
画完之后问自己的三个问题:
- 每个箭头上发生了什么? 比如 ③ → ④:“logits 与真实下一个 token 的交叉熵”;⑤ 里奖励模型 → PPO:“奖励模型给整句打分,放在最后一个 token 上,每个 token 另有 KL 惩罚”。
- 每个框的”代价”是什么? 比如 GQA 省了 KV Cache,代价是一点质量;LoRA 省了显存,代价是表达能力受秩限制;RAG 扩展了知识,代价是检索错了就答不对。
- 哪几条线贯穿了多个框? 各周的”四条主线”(Week 0 Day 5 §D.2、Week 1 Day 6 §5.2、Week 2 Day 6 §5.2、Week 3 Day 6 §5.2、Week 4 Day 6 §5.2)就是答案。Day 6 会把它们合成全课的主线。
§2 一个模型的全部数字
先做题,再看答案。题目:Llama 3 8B(词表 128256,,32 层,32 个查询头、8 个 KV 头,FFN 中间维 14336,SwiGLU,输入输出嵌入不共享,训练数据 15T token)。不看资料算出:(1) 参数量逐项;(2) 训练算力;(3) bf16 权重和 8K 上下文的 KV Cache;(4) batch 1 解码的速度上限;(5) 全量微调、LoRA(r = 16,q/k/v/o)、QLoRA 的状态显存;(6) PPO、GRPO、DPO 的显存。
下面的数字都来自 w5day3_checks.py。
2.1 参数量
| 部分 | 公式 | 数值 |
|---|---|---|
| 嵌入 + 输出层 | 1.051B | |
| 每层注意力 | (Q、O 各 ,K、V 各 ) | 41.9M |
| 每层 FFN | (gate、up、down) | 176.2M |
| 32 层合计 | 6.979B | |
| 归一化 | 266,240 | |
| 合计 | 8,030,261,248 ≈ 8.03B |
FFN 占 70.2%,注意力只占 16.7%,嵌入与输出层占 13.1%。“Transformer 的参数主要在 FFN 里”是一个值得记住的直觉(Week 1 Day 2 §5.1);GQA 让注意力更小了(MHA 时每层注意力是 M)。
同一个函数算其他模型(与公开数字核对):Llama 3 70B 70.554B(公开 70.6B);Llama 2 7B 6.738B(6.74B);Mixtral 8x7B 总参数 46.703B、激活 12.88B(46.7B / 12.9B,Week 2 Day 2 §2.1);Qwen2.5-0.5B 0.494B(0.49B,它共享嵌入、Q/K/V 有偏置)。
2.2 计算量
- 每个 token 的前向 GFLOPs(Week 1 Day 2 §5.2)。上下文 2048 时,注意力平均每个 token 再加 GFLOPs:短上下文时参数项主导,长上下文时注意力项主导(Week 4 Day 1 §1.1)。
- 训练算力 FLOPs。以 H100 的 989 TFLOPS、40% 的 MFU 计,约 50.7 万 GPU 小时(只算纯训练,不含失败重启、评测、数据处理等开销,真实数字会更大)。
- 数据量:Chinchilla 最优约 B token;实际用了 15T,是它的 93 倍,每个参数约 1870 个 token(Week 2 Day 1 §4.2 用 8B 取整算的是 1875)。为了推理便宜,宁可多花训练算力把小模型”练过头”。
2.3 推理
- 权重:bf16 15.0 GiB;int8 7.5 GiB;4-bit 约 3.7 GiB(加上少量缩放因子,Week 2 Day 5 §4)。
- KV Cache:每 token KiB(Week 1 Day 4 §1.4);8K 上下文一条序列 1 GiB,batch 32 时 32 GiB,比权重还大。
- batch 1 的解码速度上限:每生成一个 token 至少要把全部权重从显存读一遍。bf16 权重 16.1 GB ÷ H100 的 3.35 TB/s ≥ 4.79 ms,即 ≤ 209 token/s;4-bit 时 ≥ 1.20 ms,≤ 834 token/s(Week 1 Day 4 §1.5)。batch 1 的速度由带宽决定,和算力几乎无关;这就是量化(Week 2 Day 5 §5)和推测解码(Week 3 Day 1 §3.2)能加速的原因。
2.4 训练显存
| 方式 | 算法 | 状态显存(不含激活) |
|---|---|---|
| 全量微调 | bf16 权重 2 + 梯度 2 + fp32 主权重 4 + Adam 两个状态 8 = 16 字节/参数(Week 2 Day 4 §4.1) | 120 GiB;ZeRO-3 切到 8 卡每卡 15 GiB(Week 2 Day 4 §5.2) |
| LoRA,r = 16,q/k/v/o | 每层 ,32 层 13.6M 个参数(0.17%,Week 2 Day 6 §3.2) | 冻结的 bf16 底座 15.0 GiB + LoRA 0.20 GiB |
| QLoRA | 底座 4 bit + 双重量化后约 0.127 bit/参数的缩放因子(Week 2 Day 5 §4.3) | 约 3.7 GiB + 0.20 GiB |
激活显存另算:它随 batch 和序列长度增长,梯度检查点可以用重算换显存(Week 2 Day 4 §4.2)。
2.5 对齐
被训练的模型按 16 字节/参数、冻结的 bf16 模型按 2 字节/参数(Week 3 Day 3 §4.3):
| 方法 | 同时在显存里的模型 | 字节/参数 | 8B 模型 |
|---|---|---|---|
| PPO | 策略(训练)、价值(训练)、参考、奖励 | 36 | 269 GiB |
| GRPO | 策略(训练)、参考、奖励(规则时不需要) | 20 | 150 GiB |
| DPO | 策略(训练)、参考(其对数概率也可预先算好) | 18 | 135 GiB |
这张表就是”GRPO 为什么省显存""DPO 相比 PPO 省了什么”的数字答案(期末卷 I.10、II.9)。再加上 LoRA,“训练中”那部分几乎可以忽略。
2.6 应用
- RAG 索引:100 万块 × 1024 维 × 4 字节 = 4.1 GB;二值量化 + 精排 0.13 GB(Week 4 Day 1 §4.4)。
- 智能体:10 步、系统提示和工具说明 3000 token、每步新增 600 token,累计输入 67,100 token(Week 4 Day 3 §2.3),是单次问答的十几倍。
用计算器核对:python code/w5d3_model_calculator.py --preset llama3-8b 打印以上全部数字;--preset llama3-70b --seq 8192 --batch 32 就是学习计划第 1 周那道题:KV Cache 每 token 320 KiB,8192 × 32 = 80 GiB。
§3 按官方大纲逐条核对
学习计划要求”用官方 cheatsheet 逐条核对”。下表按课程主页上九讲的官方主题列表逐条列出(cheatsheet 按同样的主题组织),对应到我们的小节。每一条给自己打三个勾:讲(能不看资料讲清楚它是什么、为什么)、推(能推出关键公式)、算 / 写(能估算相关的数字,或者写出核心代码)。任何一格空着,就进漏洞清单。
| 讲 | 官方主题 | 我们的小节 | 讲 | 推 | 算/写 |
|---|---|---|---|---|---|
| 1 | NLP 背景与任务 | Week 0 Day 3 §1 | [ ] | — | — |
| 1 | 分词 | Week 0 Day 3 §7;Week 1 Day 2 §6 | [ ] | [ ] | [ ] |
| 1 | 嵌入、Word2vec | Week 0 Day 3 §2–5 | [ ] | [ ] | [ ] |
| 1 | RNN、LSTM | Week 0 Day 4 §2–3 | [ ] | [ ] | [ ] |
| 1 | 注意力机制 | Week 0 Day 4 §5;Week 1 Day 1 §1–2 | [ ] | [ ] | [ ] |
| 1 | Transformer 架构 | Week 1 Day 1–3 | [ ] | [ ] | [ ] |
| 2 | 注意力的近似 | Week 1 Day 6 §1–3 | [ ] | [ ] | [ ] |
| 2 | MHA、MQA、GQA | Week 1 Day 4 §2 | [ ] | [ ] | [ ] |
| 2 | 位置嵌入 | Week 1 Day 2 §3 | [ ] | [ ] | [ ] |
| 2 | RoPE 及其应用 | Week 1 Day 5 | [ ] | [ ] | [ ] |
| 2 | 基于 Transformer 的架构 | Week 1 Day 2 §4 | [ ] | — | — |
| 2 | BERT 及其衍生 | Week 1 Day 6 §4 | [ ] | [ ] | [ ] |
| 3 | LLM 的定义与架构 | Week 2 Day 1 §1 | [ ] | — | [ ] |
| 3 | 混合专家 | Week 2 Day 2 | [ ] | [ ] | [ ] |
| 3 | 上下文长度、温度 | Week 2 Day 3 §2–3 | [ ] | [ ] | [ ] |
| 3 | 采样策略 | Week 2 Day 3 §1–2 | [ ] | [ ] | [ ] |
| 3 | 提示、上下文学习 | Week 2 Day 3 §4 | [ ] | — | — |
| 3 | 思维链、自洽性 | Week 2 Day 3 §5 | [ ] | [ ] | [ ] |
| 4 | 预训练 | Week 2 Day 1;Week 2 Day 4 §1–3 | [ ] | [ ] | [ ] |
| 4 | 量化 | Week 2 Day 5 | [ ] | [ ] | [ ] |
| 4 | 硬件优化 | Week 1 Day 6 §3;Week 2 Day 4 §4–5 | [ ] | [ ] | [ ] |
| 4 | 监督微调 | Week 2 Day 6 §1 | [ ] | [ ] | [ ] |
| 4 | 参数高效微调(LoRA) | Week 2 Day 6 §2–4 | [ ] | [ ] | [ ] |
| 5 | 偏好调优 | Week 3 Day 2 §1;Week 5 Day 2 §3.1 | [ ] | — | — |
| 5 | RLHF 概览 | Week 3 Day 2 §3 | [ ] | — | — |
| 5 | 奖励建模 | Week 3 Day 2 §2 | [ ] | [ ] | [ ] |
| 5 | RL 方法(PPO 及其变体) | Week 3 Day 3 | [ ] | [ ] | [ ] |
| 5 | DPO | Week 3 Day 4 | [ ] | [ ] | [ ] |
| 6 | 推理模型 | Week 3 Day 5 §1;Week 5 Day 2 §3.3–3.4 | [ ] | — | — |
| 6 | 用于推理的 RL | Week 3 Day 5 §2 | [ ] | — | [ ] |
| 6 | GRPO | Week 3 Day 5 §3–4 | [ ] | [ ] | [ ] |
| 6 | 缩放(测试时) | Week 3 Day 6 | [ ] | [ ] | [ ] |
| 7 | 检索增强生成 | Week 4 Day 1 | [ ] | [ ] | [ ] |
| 7 | 进阶 RAG 技术 | Week 4 Day 2 | [ ] | [ ] | [ ] |
| 7 | 函数调用 | Week 4 Day 3 | [ ] | [ ] | [ ] |
| 7 | 智能体、ReAct 框架 | Week 4 Day 4 | [ ] | [ ] | [ ] |
| 8 | LLM 当评委概览 | Week 4 Day 6 §1 | [ ] | — | [ ] |
| 8 | 最佳实践与好处 | Week 4 Day 6 §1.4 | [ ] | — | — |
| 8 | 偏差与陷阱 | Week 4 Day 6 §2 | [ ] | [ ] | [ ] |
| 9 | 回顾、趋势、结语 | Week 5 Day 1 | [ ] | [ ] | — |
(”—“表示这一条没有需要推导或计算的内容。)另外,第 4 周 Day 5 的评测统计(标准误、配对、胜者的诅咒)不在官方大纲里,但面试和做研究都离不开,一起核对。
§4 怎么画 A3 全景图
三遍画法:
- 第一遍:骨架(30 分钟)。只画 §1 的八个大框和它们之间的箭头,每个框里写 3–5 个关键词。不许翻书,想不起来的地方留空。
- 第二遍:数字(30 分钟)。在每个框旁边写上它最重要的一两个数字或公式:注意力的 、KV Cache 的公式、、16 字节/参数、DPO 的损失、GRPO 的优势、RRF 的公式、κ 的公式……写不出来的,用红笔标出来。
- 第三遍:连线(30 分钟)。用不同颜色画”跨框”的线:同一个思想在不同地方出现(比如”softmax 交叉熵”出现在语言模型、InfoNCE、Bradley-Terry、DPO 里;“两阶段”出现在检索和工具路由里;“代理与 Goodhart”出现在奖励模型、验证器、评委、基准里)。连线越多,说明你越是在理解,而不是在记忆。
然后:对照 §1 补漏(红笔),对照 §3 自评,把所有红色的地方抄进漏洞清单。
§A 复习的方法
- 主动回忆胜过重读:合上书写出来,比再读三遍有效得多。学习计划”执行纪律”的第 1 条就是它。
- 间隔重复:今天画的图,隔 1 天、3 天、7 天各默写一次(只画骨架和数字,10 分钟)。每次只重看画不出来的部分。
- 费曼法:把一个概念讲给一个”不懂的人”听(或者录音回放)。卡住、跳步、用术语代替解释的地方,就是没懂的地方。Day 5 的面试练习就是在做这件事。
- 交错练习:复习时不要一讲一讲地顺着来,而是混着来(一道 RoPE、一道 DPO、一道 BM25)。面试和考试都是混着问的。
- 错题本:Day 2 记录的错题,按错因分类(Day 2 §2.5);“推导不熟”类的错题,明天一道道重推。
§B 实操
- 画全景图(2h):按 §4 的三遍画法,完成后对照 §1。
- 手算一个模型(2h):先不看 §2,手算 Llama 3 8B 的六组数字;再跑
python w5day3_checks.py对答案。然后换一个模型(Mixtral 8x7B 或 Qwen2.5-0.5B)再算一遍,用python code/w5d3_model_calculator.py --preset …核对。 - 逐条核对(1.5h):§3 的表,每一条打三个勾。
- 漏洞清单(0.5h):把所有没打勾的格子和全景图上的红色部分整理成一张表,按”明天推导默写 / 面试前补 / 需要重读”分三类。
- (可选)把计算器扩展一下:给
w5d3_model_calculator.py加上”推测解码的加速比”(Week 3 Day 1 §3.2)或”训练一个 epoch 要多久”。
参考实现:code/w5d3_model_calculator.py。
§C 自测
口述(每题限时 3 分钟,录音)
- 从”用户输入一句话”开始,一直讲到”模型输出第一个 token”,中间经过了哪些计算?每一步的代价在哪里?
- 一个预训练好的基座模型,要经过哪几步才变成一个”会推理、会用工具、说话得体”的助手?每一步用什么数据、优化什么目标?
- 你的 RAG 助手在一道题上答错了,从检索到生成,按顺序说出你会检查的五个地方。
估算(每题限时 5 分钟)
- Llama 3 70B:参数量逐项、bf16 权重显存、每 token 的 KV Cache、batch 1 解码的速度上限。
- 全量微调一个 7B 模型(BF16 + AdamW)要多少状态显存?8 张 80GB 的卡够吗?LoRA 呢?QLoRA 呢?
- 用 GRPO 训练一个 8B 模型,和 PPO 相比省了多少显存?为什么?
- 一个智能体每步新增 800 token、系统提示 5000 token,跑 20 步,累计输入多少 token?提示缓存(按 10% 计价)能省多少?
出关标准
- 不看资料画出了全景图的八个框、关键数字和至少五条跨框的连线
- 10 分钟内手算出 Llama 3 8B 的参数、算力、推理显存与速度、训练显存、对齐显存,全部与 §2 一致
- 按 §3 逐条自评,每一条都至少打了”讲”的勾
- 整理出漏洞清单,并安排好明天和后天各补哪些