Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 9 讲 · 综合自测卷(100 分 · 建议 60 分钟)

闭卷计时;做完先按文末评分标准自评,再按漏点定位表回查。 范围:本讲 9.1–9.7 与导览。题目与习题集尽量不重叠;第三部分与 B 组同源但不同题(代入的数字与追问不同),需要时可直接对照。 凡概念判断题,只写对错不给分,必须给理由或反例;凡涉及数字,必须带口径(精度 + 优化器 + 是否含主权重 + 卡数)。

时间分配建议:第一部分 12 分钟(每题约 70 秒)→ 第二部分 10 分钟 → 第三部分 25 分钟(每题约 8 分钟,推导宁慢勿跳步)→ 第四部分 13 分钟(每题约 6 分钟,四项都写)。留最后 2 分钟只做一件事:回头检查第一部分的十条判断里有没有只写了对错的。

60 分钟怎么用(本卷的节奏)
  • 0–12 分钟:第一部分 10 条判断。先写机制词、再写对错;卡住的条目立刻跳过(每题上限 90 秒),不要在一道判断上停留超过 2 分钟。
  • 12–22 分钟:第二部分 5 题填空简答。这一步测的是「账本与公式的检索速度」;想不起就写占位符(如「逐项账:参数 14 / 梯度 14 / …」),回头再补。
  • 22–47 分钟:第三部分 3 道推导。每题按「形状或账表 → 链条 → 代入 → 讨论」四段写,宁慢勿跳步;跳过账表的答案会被扣分。
  • 47–58 分钟:第四部分 2 道开放题。只写四件套(方案 / 理由 / 失败判据 / 验证计划),不要写背景铺垫;每道 ≤ 5 分钟。
  • 58–60 分钟:只做一件事——检查第一部分有没有「只写了对错」的条目,以及所有数字旁有没有口径。
阅卷口径(先读,能省不少分)
  • 判断必须带机制词:写「错」不给分,写「错,因为逐项账里主权重把省下的 4N4N 吃回去了」才拿满。本讲常用机制词:主权重、批大小无关、reduce-scatter、all-gather、气泡、延迟主导、重叠、一致性。
  • 数字必须带口径:112112 GB 必须能拆成 14+14+28+28+2814+14+28+28+28 并说明是「混合精度 + Adam + 含 fp32 主权重」;只说「112 GB」按半对计。
  • 形状与账本先行:推导题先把形状 / 逐项账表写出来再动手;跳过账表核对的,从「链条完整」里扣分。
  • 工程题给判据:凡涉及取舍(分片级数、重计算、并行度、checkpoint 间隔),必须写出验证方式与失败判据,否则第四部分上限 6 分。
  • 开放题四件套:方案 + 理由 + 失败判据 + 验证计划,缺一项扣 2 分(每题 10 分)。

第一部分 · 概念判断(10 题 × 3 分 = 30 分)

1. 纯 fp32 Adam 与混合精度 Adam 的静态显存账都是 16N16N,但两者的组成并不相同。

解答

对。 纯 fp32:参数 4N4N + 梯度 4N4N + m,vm,v 8N8N(参数本身是 fp32,无需独立主权重);混合精度:参数 2N2N + 梯度 2N2N + m,vm,v 8N8N + fp32 主权重 4N4N——低精度参数上做小步更新会被舍入吃掉,所以必须另存一份高精度副本(方法 9.1.1)。7B 时两者都是 112112 GB。给分:判断 1 分 + 说出「主权重 4N」2 分。

2. 数据并行能让每张卡装下更小的模型,所以它是显存受限时的第一选择。

解答

错,方向反了。 数据并行要求每卡都装得下完整模型状态(16N16N);它让计算变快、批变大,不省显存。显存受限要看分片(ZeRO / FSDP)、低精度、8-bit 优化器或 PEFT(9.2.5 的判据表)。给分:判断 1 分 + 理由 2 分。

3. 梯度累积 KK 次会把梯度通信量放大到 KK 倍。

解答

错。 数据并行在每个优化器步骤同步一次梯度:KK 个 micro-batch 只在最后触发 1 次 All-Reduce,通信量仍是 ≈2S\approx2S,通信占比还下降约 KK 倍(因为计算量增大)(例 9.2.1、定义 9.2.2)。给分:判断 1 分 + 「每个优化器步只同步一次」2 分。

4. ZeRO-2 的通信量约为基线的一半,原因是它用 reduce-scatter 替代了 All-Reduce。

解答

对。 每卡只需要自己那 1/k1/k 份梯度,因此不必「归约 + 广播」两遍,只做归约即可:≈S\approx S 而非 ≈2S\approx2S(定义 9.2.3、例 9.6.1)。给分:判断 1 分 + 理由 2 分。

5. 把张量并行度从 4 提到 8,每卡通信量也随之减半。

解答

错。 V=2S(k−1)/kV=2S(k-1)/k 中的 SS 是完整输出的大小,与 kk 无关,所以每卡通信量几乎不变,变的只是消息更小、次数更多(延迟受限时反而更糟)(例 9.3.1)。给分:判断 1 分 + 指出「SS 与 kk 无关」2 分。

6. 交错调度(virtual pipeline)把等效段数变成 P/VP/V,气泡约按 P−1VM+P−1\frac{P-1}{VM+P-1} 下降,代价是段间通信次数增至 V(P−1)V(P-1)。

解答

对。 每张卡持有 VV 个不连续的层块,于是任意时刻总有一块「可算」,原本的空档被填上;但边界数从 P−1P-1 增到 V(P−1)V(P-1)(方法 9.4.1)。适用场景是「通信便宜、气泡贵」;段间通信已吃紧时应先恶化通信。给分:判断 1 分 + 至少一条代价 2 分。

7. 流水线并行的每卡每步通信量比数据并行小一个数量级,这是它有资格跨机的原因。

解答

对。 段边界传的是激活(BmicroThB_{\text{micro}}T h 量级,几十 MB),每步每卡约 GB 以下量级;而 DDP 的梯度 All-Reduce 是 24.524.5 GB/卡/步(例 9.4.3)。代价转移到了气泡与调度复杂度上。给分:判断 1 分 + 量级对比 2 分。

8. 用 FP8 训练时必须把优化器状态也压成 8 位,否则省不了显存。

解答

错。 FP8 省的是「存 FP8 的那部分」(激活、部分权重副本);优化器状态与主权重仍是 fp32(12N12N),一分不减——与混合精度是同一个道理。同时 FP8 需要缩放管理与相应硬件(Hopper 及之后),配方需匹配(9.5.2)。给分:判断 1 分 + 「12N12N 不减」2 分。

9. 打开激活重计算可以降低优化器状态的显存占用。

解答

错。 重计算只管激活那半本账:前向只保存检查点激活,反向缺什么重算什么(全层额外约 1/31/3 前向,选择性只多个位数百分比)。模型状态要靠分片、低精度或 8-bit 优化器(定义 9.5.3)。给分:判断 1 分 + 「对象不同」2 分。

10. 多卡训练很难做到「逐位可复现」,根本原因之一在于浮点归约顺序随卡数与拓扑变化。

解答

对。 跨卡归约的实现顺序由拓扑决定,不同卡数下浮点求和顺序不同,结果在最低位就有差异,随后被放大;此外还有非确定性算子(原子加等)。工程上实际追求的是统计可复现(损失曲线形态一致)(方法 9.6.5)。给分:判断 1 分 + 至少一个来源 2 分。

第二部分 · 填空与简答(5 题 × 4 分 = 20 分)

11. 填空:N=7×109N=7\times10^{9}、混合精度 Adam 下,逐项账单为参数 ___ GB、梯度 ___ GB、mm ___ GB、vv ___ GB、主权重 ___ GB,合计 ___ GB;换成 8-bit 优化器后合计 ___ GB。(每空 0.5 分;多写一句「为什么只省 37.5%」另得 0.5 分)

解答

参数 1414、梯度 1414、mm 2828、vv 2828、主权重 2828、合计 112\mathbf{112} GB;8-bit 后 70\mathbf{70} GB(例 9.1.1、例 9.5.1)。 为什么只省 37.5%:8-bit 只动了优化器状态的 8N→2N8N\to2N,而主权重 4N4N 与参数、梯度(共 10N10N)原封不动;112→70112\to70 正好是 (112−70)/112=37.5%(112-70)/112=37.5\%。

12. 简答:环状 All-Reduce 为什么是「两遍」?每遍各做什么?写出每卡流量。

解答

第一遍 reduce-scatter:沿环转 k−1k-1 轮,每轮发送 S/kS/k,每一块的总和最终落在某一张卡上;第二遍 all-gather:把已算好的块沿环传开,每张卡收齐 kk 块得到完整结果。两遍各 S(k−1)/kS(k-1)/k,合计 V=2S(k−1)/k→2SV=2S(k-1)/k\to2S(结论 9.2.1)。要点是「流量守恒」:每个字节至少要每张卡看见一次,SS 是下界,环状只用两倍下界且并发走满链路。

13. 简答:写出气泡占比公式,并用直觉解释 M→∞M\to\infty 与 M≪PM\ll P 两个极限。

解答

bubble=P−1M+P−1\text{bubble}=\dfrac{P-1}{M+P-1}(结论 9.4.1)。M→∞M\to\infty:首尾各 P−1P-1 个时间片的填充 / 排空被足够多的 micro-batch 摊薄到零;M≪PM\ll P:几乎全程只有少数几段在干活,气泡趋近 P−1P≈1\frac{P-1}{P}\approx1(等于白买卡)——这也是「加段必加 micro-batch」的来源。

14. 简答:三堵墙各写一条判据;再说明为什么「为了绕开显存墙而切分」会立刻加剧另一堵墙。

解答

判据:显存墙 Mstate+Mact+Mcomm>McapM_{\text{state}}+M_{\text{act}}+M_{\text{comm}}\gt M_{\text{cap}};算力墙 单步时间远大于 C/FC/F 且 GPU 利用率高;通信墙 tcomm≈tcomputet_{\text{comm}}\approx t_{\text{compute}}(定义 9.1.2)。切分把状态 / 层 / 数据散到更多卡上,但每张卡都要与别人交换中间结果(梯度、参数、激活),因此加卡同时缓解显存与算力墙、却加剧通信墙——于是最优卡数落在「算力墙还紧、通信墙还没到」的区间,验收只能用扩展效率 EE。

15. 简答:ZeRO-3 / FSDP 的「按需聚齐、用完即散」循环三步是什么?它换来了什么、付出了什么?

解答

三步:① 进入第 ll 层前对该层参数做 all-gather,得到完整参数;② 计算;③ 立即释放完整副本(只保留分片),反向时再来一次 all-gather,算完梯度做 reduce-scatter(定义 9.2.4)。换来:每卡模型状态从 16N16N 降到 16N/k16N/k(7B、8 卡即 112→14112\to14 GB),于是「放不下」变成「放得下」。付出:每层都要通信,净通信量升至约 1.5 倍,且预取需要多留参数分片(显存换重叠)——所以调优重点在「调书能否与读书重叠」。

第三部分 · 推导与计算(3 题 × 10 分 = 30 分)

16. (10 分)推导朴素调度下的气泡占比公式 P−1M+P−1\frac{P-1}{M+P-1},写出三个步骤各在算什么;代入 P=8P=8、M=64M=64 求气泡率;再求「气泡 ≤10%」所需的 MM,并解释为什么「加段(增大 PP)必须同时加 micro-batch」。

解答

(i)有效工作量:每个 stage 都要处理全部 MM 个 micro-batch(前向一次、反向一次),折算为 MM 个时间片。(ii)墙钟由末段决定:第 1 个 micro-batch 跑到末段要 PP 个时间片,此后每 1 个时间片有下一个进入,故末段处理完 MM 个需 M+P−1M+P-1;反向对称且可部分重叠,故 Ttotal=M+P−1T_{\text{total}}=M+P-1(更严格的论证:第 jj 段的启动延迟 j−1j-1,任何 stage 完工时刻 ≥M+j−1\ge M+j-1,故下界为 M+P−1M+P-1,GPipe 把空闲压到最小取等号)。(iii)气泡 = 墙钟 − 有效:每卡空闲 P−1P-1,占比 P−1M+P−1\frac{P-1}{M+P-1}。 代入:P=8,M=64P=8,M=64 → 7/71=9.9%7/71=9.9\%。10% 条件:7M+7≤0.1⇒M≥63≈9P\frac{7}{M+7}\le0.1\Rightarrow M\ge63\approx9P。 为什么加段必加 micro-batch:气泡的分子是 P−1P-1,增大 PP 直接抬高分子;而 P=16P=16、M=64M=64 时气泡变成 15/79=19.0%15/79=19.0\%,比 P=8P=8 时翻了一倍多。因此「PP 的正确取法是刚好让每段放得下」,而不是越大越好(例 9.4.1)。 给分:三步推导 6 分(每步 2 分)+ 代入 2 分 + M≥9PM\ge9P 与解释 2 分。

17. (10 分)推导环状 All-Reduce 的每卡通信量;代入 7B(bf16 梯度)、k=8k=8 算出流量与 InfiniBand(β≈50\beta\approx50 GB/s)下的时间;再算出 ZeRO-2 的 reduce-scatter 版本;最后说明「大消息看带宽、小消息看延迟」在 FSDP 上的体现。

解答

推导:张量切 kk 块;reduce-scatter 阶段每卡发出 (k−1)×S/k(k-1)\times S/k,all-gather 阶段同样 (k−1)×S/k(k-1)\times S/k,故 V=2S(k−1)/k→2SV=2S(k-1)/k\to2S(结论 9.2.1)。 代入:S=2N=14S=2N=14 GB → V=2×78×14=24.5V=2\times\frac78\times14=24.5 GB/卡,t=24.5/50≈0.49t=24.5/50\approx0.49 s(未减重叠、未计延迟,是乐观下界)。 ZeRO-2 版本:只需自己那 1/k1/k 份梯度 → reduce-scatter,V=78×14=12.25V=\frac78\times14=12.25 GB → t=12.25/50≈0.25t=12.25/50\approx0.25 s,正好省一半。 大消息看带宽、小消息看延迟:跨机的 GB 级 All-Reduce 是秒级开销(t≈V/βt\approx V/\beta),只能靠「更大的计算量摊薄」或「与计算重叠」隐藏;而 FSDP 每层的参数 all-gather 是 KB–MB 量级的小消息,受每次通信的固定延迟(握手、kernel 启动)支配——所以「把多个小消息打包成大消息」(梯度分桶)、参数预取与算子融合都能显著提速(例 9.6.1、方法 9.6.1)。 给分:推导 4 分 + 两处代入 3 分(24.5 GB/0.49 s、12.25 GB/0.25 s)+ 大小消息判据 2 分 + 与 FSDP/分桶的联系 1 分。

18. (10 分)硬件 8 × 80 GB(同节点)。模型 N=7×109N=7\times10^{9}、L=32L=32、h=4096h=4096、nh=32n_h=32、T=2048T=2048,混合精度 Adam。(1) 求 ZeRO-1 / 2 / 3 每卡模型状态;(2) 目标等效批 256,Bmicro=4B_{\text{micro}}=4 时求 KK,并估算激活量级;(3) 判断是否需要 TP / PP,并说明理由;(4) 给出你的最终配置与一条验收指标。

解答

(1) ZeRO-1:4N+12N/k=28+10.5=38.54N+12N/k=28+10.5=38.5 GB;ZeRO-2:2N+2N/k+12N/k=14+1.75+10.5=26.252N+2N/k+12N/k=14+1.75+10.5=26.25 GB;ZeRO-3:16N/k=1416N/k=14 GB(例 9.2.3)。 (2) 256=K×4×8⇒K=8256=K\times4\times8\Rightarrow K=8。激活按「每 token 每 hidden 元素约 34 字节」口径:34×(BmicroT)×h×L=34×8192×4096×32≈3.7×101034\times(B_{\text{micro}}T)\times h\times L=34\times8192\times4096\times32\approx3.7\times10^{10} 字节 ⇒≈34\Rightarrow\approx34 GB(例 9.1.2;hh 这一项不能漏)。 (3) 都不需要。 单层最大是 FFN:h×4h=4096×16384≈6.7×107h\times4h=4096\times16384\approx6.7\times10^7 参数,bf16 下 ≈0.13\approx0.13 GB,单卡轻松放下 → 不需要 TP;显存问题被 ZeRO-2 解决、层数也不是瓶颈 → 不需要 PP。配平原则是先满足硬约束(显存 / 整除性 / 拓扑)再优化软目标,同节点时越简单风险越低(方法 9.6.4)。 (4) 推荐配置:DDP × ZeRO-2(8 卡同节点),bf16 参数与梯度 + fp32 主权重(不开 fp16、不需要损失缩放),Bmicro=4B_{\text{micro}}=4、K=8K=8、等效批 256,重计算先关(激活紧张再开 selective),AdamW + 学习率线性缩放 ×4 + warmup 3%,分片 checkpoint 每 500–1000 步。验收指标:用同样的全局批测扩展效率 E≥0.7E\ge0.7(并用 max_memory_allocated 对账 26.25+3426.25+34 GB 与留 15%–30% 余量)。 给分:(1) 3 分 + (2) 2 分 + (3) 2 分 + (4) 3 分(配置 2 分、验收指标 1 分)。

第四部分 · 开放题(2 题 × 10 分 = 20 分)

19. (10 分)场景:只有一张 24 GB 卡,要在一个 7B 级开源模型上做指令微调,数据量中等、不能上多卡。给出方案,并写清理由、失败判据与验证计划。

解答

方案:QLoRA——4 bit(NF4)主干 + 低秩适配器(r=8∼16r=8\sim16、target_modules=[q_proj, v_proj]、lora_alpha=16、bf16 计算),max_length 从 1024 起手,KK 用梯度累积把等效批凑到 64–128,选择性重计算按需开。 理由(必须给出账):全参混合精度 Adam 的模型状态 16N=11216N=112 GB、8-bit 优化器 7070 GB,单卡都放不下;QLoRA 下主干以 4 bit 驻留 ≈0.5N=3.5\approx0.5N=3.5 GB,适配器只有 4.2M 参数(≈0.06%\approx0.06\%,五账单合计 ≈0.08\approx0.08 GB)→ 静态 ≈3.6\approx3.6 GB,24 GB 卡上还剩约 20 GB 给激活、KV cache 与临时张量(例 9.5.4、定义 9.5.5)。被彻底绕开的是主干的梯度与优化器状态(12N12N),它们正是基线里最贵的部分。 失败判据:① 训练侧 OOM(先降 max_length,再降 BmicroB_{\text{micro}} 并用 KK 补等效批);② 可训参数比例 >0.5%(说明 target_modules 挂多了,显存与容量都跑偏);③ 效果不达标且提高 rr 后仍无改善 → 说明任务需要满秩更新,此时应回到全参 + 分片,而不是继续加秩;④ 峰值显存逼近上限(>80%)时任何「调大序列」的尝试都先被否决。 验证计划:先小模型 + 小数据跑通 10 步(只验链路:分词、mask、保存)→ 用 9.7.4 的四个指标建基线(峰值显存 / 每步耗时 / token/s / 效果)→ max_length 512 → 1024 → 2048 扫一遍记录峰值与 token/s → 做「微调前 vs 微调后」的效果对照(固定问题集与解码参数)→ 报告里写清权重口径与结论三行。 给分:方案具体 4 分 + 账本数字 2 分 + 失败判据 2 分 + 验证计划 2 分。

20. (10 分)场景:8192 卡、计划训练 30 天。设计容错方案,并给出 checkpoint 间隔的定量依据;说明你会用什么判据判断「这套容错是失败的」。

解答

方案:① 检错——NCCL 超时 + 健康检查(小 all-reduce + 矩阵乘自测),目标是把「哪张卡坏了」在几分钟内定位,而不是整机挂掉才发现;② 恢复——分片 checkpoint + 完整元数据(分片布局、优化器步数、已消费样本数、随机状态、学习率调度器位置);③ 弹性——坏卡就绪后重配进程组继续(各框架支持度不同,需核实);④ 静默损坏——周期性抽样校验(手工计算的损失值 / 梯度范数是否落在期望范围);⑤ 确定性——固定数据顺序与种子,让「恢复后」与「未中断」等价(方法 9.6.3、方法 9.6.5)。 定量依据:λ≈3×10−6\lambda\approx3\times10^{-6}/小时(量级,需核实)→ MTBF ≈1/(8192×3×10−6)≈41\approx1/(8192\times3\times10^{-6})\approx41 小时,即约每 1.7 天中断一次、30 天内约 18 次;分片保存一次 112/2=56112/2=56 s;f≈0.024f\approx0.024/小时时 E(T)=4fT+55.8T ⇒ T⋆=13.95f≈24 小时,E(T)=4fT+\frac{55.8}{T}\ \Rightarrow\ T^{\star}=\sqrt{\frac{13.95}{f}}\approx24\ \text{小时}, 取 T=24T=24 h 时 E≈0.5×0.024×24×8+6024×0.93≈2.3+2.3=4.6E\approx0.5\times0.024\times24\times8+\frac{60}{24}\times0.93\approx2.3+2.3=4.6 分钟/小时 ≈7.7%\approx7.7\%——与「每 2 小时存一次」的 7.5%7.5\% 同量级,说明该规模下保存开销与故障损失相当,两者都要计入预算。硬约束:恢复时间必须远小于间隔;故障呈批次性时先修机器。 失败判据:① 每小时额外时间 >8%;② 恢复后一致性校验失败(步数 / 数据流 / 随机状态对不上)——「悄悄换了实验条件」比丢进度更危险;③ 演练中恢复时间 > 间隔的 10%;④ 静默损坏抽样始终无法与基准对齐(说明对照基准本身不可靠)。 验证计划:小规模故障注入演练(kill 一个 rank,测恢复时间与一致性)→ 每 100 步记录「已消费样本数 + grad_norm」作为一致性证据 → 用 2× 规模对照训练确认「恢复后曲线」与「不中断曲线」在预期噪声内(例 9.6.3、9.6.4)。 给分:方案覆盖检错 / 恢复 / 弹性 / 静默 / 确定性 4 分 + 定量间隔 3 分 + 失败判据 2 分 + 验证计划 1 分。

交卷前 30 秒自检(四个必查项)

检查一句话判据
数字带口径了吗?写下 112112 GB 时,旁边必须出现「混合精度 + Adam + 含 fp32 主权重」;只写数字按半对计
通信量写的是哪个式子?代入计算用 2S(k−1)/k2S(k-1)/k,口算用 ≈2S\approx2S;写 2S2S 却说「这就是 24.5 GB」是错的
气泡题代入选值了吗?只写 P−1M+P−1\frac{P-1}{M+P-1} 不给分,必须写出 PP 与 MM 各取多少、结果是多少
开放题有四件套吗?方案 / 理由 / 失败判据 / 验证计划——缺一项扣 2 分

评分标准

部分题量分值给分要点
一 · 概念判断1030判断 1 分 + 理由 / 反例 2 分;只写对错得 1 分
二 · 填空简答520每空 / 每个要点 0.5–1 分;数字必须带口径,否则按半对计
三 · 推导计算330账表或形状先行 3 分 + 链条完整 4 分 + 代入正确 2 分 + 前提与讨论 1 分;只写结论最多 3 分
四 · 开放题220方案具体 4 分 + 账本数字 2 分 + 失败判据 2 分 + 验证计划 2 分

段位换算:≥90\ge90 优秀(可以给同学讲清 ZeRO 与气泡);75 ⁣− ⁣8975!-!89 良好(能独立写出并行配置);60 ⁣− ⁣7460!-!74 及格(需补推导与账本);<60&lt;60 回到对应节的「即时自测」与习题集重做。

自评纪律:① 判断理由必须包含关键机制词(主权重、批大小无关、reduce-scatter、all-gather、延迟主导、一致性……),否则按半对给 1 分;② 推导题凡是跳过账表 / 形状核对的,从「链条完整」里扣 1 分;③ 凡把正文标「需核实」的数字(34 / 18 / 2 字节、1.5× 通信、offload 慢化倍数)当绝对值报价且不加限定的,第三部分扣 1 分;④ 开放题只写方案不写失败判据的,第四部分上限 6 分。

漏点定位表

最后一句:本卷的目的不是打分,而是把你以为会的地方暴露出来。凡「写得出来但讲不清机制」的题,回到对应节的 intuition 与回忆卡当天再练一遍;连续两轮仍错的条目,写进勘误与补注第四节的待核实条目单独跟踪。

自评记录表(抄在纸上,比分数更重要)

部分得分错题号错因分类(概念 / 账本 / 推导 / 设计)下一步动作
一 · 概念判断/30
二 · 填空简答/20
三 · 推导计算/30
四 · 开放题/20
合计/100

四种典型错因的处方:

  1. 错因集中在「概念」 → 回回忆卡 的 D 组(陷阱卡)当天补;本讲的陷阱几乎都长一个样:「把两本不同的账混成一本」或「把两个不同的手段当成可互换」。
  2. 错因集中在「账本」 → 把 习题集 C1 的估算脚本跑一遍,让五账单与 ZeRO 三级跑出来而不是背下来;再手算一次 N=13×109N=13\times10^{9}、k=8k=8 的三级账作为交叉验证。
  3. 错因集中在「推导」 → 按 B3 的三步重推气泡公式、按 B2 的两阶段重推环状 All-Reduce,两条各写三遍;写完后立刻套进 例 9.4.1 与 例 9.2.2 对答案。
  4. 错因集中在「设计」 → 回 9.7.5 排错清单 与 习题集 D 组,用「只改一个变量」的方式把方案重写一遍,并补上失败判据与验证计划。