第 06 章 · 大模型算法岗
分布式训练
掌握数据、张量、流水线与序列并行,以及 ZeRO/FSDP、通信瓶颈和分布式故障定位。
数据并行的工作流程是什么?
30 秒口述版
每个 rank 保存模型副本、处理不同数据,反向后 all-reduce 梯度,再执行一致参数更新。
原理与推导
它易扩展但模型状态在每卡复制,模型放不下时需要分片或模型并行。
公式、代码或工程案例
用 global batch=micro batch×累积×数据并行度核对配置。
高频追问
- 梯度同步应在累积何时发生?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要把 sampler 重复数据和梯度同步混为一谈。
权威来源
张量并行如何拆分 Transformer?
30 秒口述版
把单个矩阵乘沿行或列切到多卡,并通过 all-reduce/all-gather 组合结果。
原理与推导
它降低单卡参数和计算,但层内通信频繁,通常要求高速互联。
公式、代码或工程案例
说明 MLP 第一层列并行、第二层行并行如何减少中间通信。
高频追问
- Attention 头如何切分?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要忽略切分维度必须整除与 kernel 对齐。
权威来源
流水线并行为什么会有 Bubble?
30 秒口述版
模型层分成多个 stage,micro-batch 流过流水线;填充和排空期间部分 stage 空闲形成 bubble。
原理与推导
增加 micro-batch 可降低 bubble 比例,但会增加调度、激活与延迟成本。
公式、代码或工程案例
画出 GPipe 或 1F1B 时间线。
高频追问
- Interleaved pipeline 有何作用?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要只算稳态吞吐而忽略首尾空泡。
权威来源
ZeRO 三个阶段分别分片什么?
30 秒口述版
Stage 1 分片优化器状态,Stage 2 再分片梯度,Stage 3 再分片参数。
原理与推导
阶段越高单卡状态越少,但参数收集、通信和调度复杂度上升。
公式、代码或工程案例
按每参数字节估算各阶段模型状态下限。
高频追问
- ZeRO-3 与张量并行有何区别?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要简单把显存除以卡数而忽略峰值 all-gather。
权威来源
FSDP 与 ZeRO-3 有什么关系?
30 秒口述版
两者都以参数、梯度和优化器状态分片为核心;FSDP 是 PyTorch 原生实现与模块包装接口。
原理与推导
差异更多来自运行时、包裹粒度、预取、混合精度和生态,而非一句谁更高级。
公式、代码或工程案例
比较 FULL_SHARD、HYBRID_SHARD 和 auto_wrap 策略。
高频追问
- 为什么 wrap 粒度影响性能?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要只按名称判断通信量。
权威来源
序列并行和上下文并行解决什么?
30 秒口述版
它们沿序列维拆分激活或长上下文计算,降低每卡激活显存并扩展可处理长度。
原理与推导
需要在归一化、attention 或边界通信上设计聚合,具体语义随框架不同。
公式、代码或工程案例
区分 tensor parallel 中的 sequence parallel 与长上下文 ring/context parallel。
高频追问
- 它们能减少 KV 总量吗?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要把所有沿序列切分的方法混称一种算法。
权威来源
如何组合 3D 并行?
30 秒口述版
数据并行扩吞吐,张量并行拆层内矩阵,流水线并行拆层;三者乘积构成 world size。
原理与推导
拓扑映射应把通信最频繁的张量并行放在高速节点内,跨节点留给较低频通信。
公式、代码或工程案例
给定 64 卡设计 TP=8、PP=4、DP=2 并解释原因。
高频追问
- MoE expert parallel 如何加入?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要先选并行度再看网络拓扑。
权威来源
通信为什么会成为训练瓶颈?
30 秒口述版
计算增长未必伴随带宽增长,all-reduce、all-gather 与 all-to-all 会等待互联。
原理与推导
可通过计算通信重叠、bucket、拓扑感知、压缩和提高算术强度缓解。
公式、代码或工程案例
用 profiler 区分 kernel 时间、通信时间和 idle gap。
高频追问
- Ring 与 Tree all-reduce 如何选?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要只看链路标称带宽。
权威来源
分布式训练 Hang 应怎样排查?
30 秒口述版
先确认是否所有 rank 进入同一 collective,再检查数据步数、异常 rank、网络和超时日志。
原理与推导
任一 rank 提前异常、条件分支不一致或 dataloader 耗尽都可能让其他 rank 永久等待。
公式、代码或工程案例
记录 collective 序号、rank stack 和最后样本 ID。
高频追问
- 怎样构造最小 world size 复现?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要把无限提高 timeout 当修复。
权威来源
如何验证分布式训练正确性?
30 秒口述版
先在小模型上对齐单卡与多卡若干 step 的 loss、梯度和参数,再扩大规模。
原理与推导
需固定种子、数据顺序、dropout 与 reduction,允许明确的浮点非确定性范围。
公式、代码或工程案例
做 world-size=1/2 的 golden test 和 checkpoint 重启测试。
高频追问
- 为什么 bitwise 一致很难?
- 这个结论在规模、数据或硬件条件变化时,边界会怎样改变?
易错点
不要只比较最终 benchmark 而不验证训练早期。
