先这样答
先算显存,再定并行度;70B 全参训练必须做模型并行,还要切分训练状态,控制激活开销。70B 权重用 fp16 存就约需 140GB。训练时还要存梯度和优化器状态,全参训练的显存需求会到 TB 级。所以我不会先报一个卡数,而会先把权重、梯度、优化器状态和激活列进显存账,再判断需要切分哪些部分。
并行方案分几层设计。我会把不同的层切到流水线的不同阶段,用流水线并行分担模型;对单层内部用张量并行,并尽量把这部分通信放在机内 NVLink 上。同时用 ZeRO-3 切分训练状态。并行度不能只按显存缺口来定,还要匹配机组的带宽和通信拓扑,否则切分后的通信会成为训练的负担。
最后,我会用混合精度控制显存开销,用梯度检查点减少激活占用。检查方案时,先看切分后各卡能否放下对应的权重、训练状态和激活,再看并行组是否对齐实际连接。面试里我会把顺序讲清楚:算显存账,确定切分需求,安排流水线和张量并行,再核对通信拓扑与激活开销。
面试官会怎么追问
- 「70B 权重才约 140GB,为什么还需要这么复杂的并行方案?」 140GB 只算 fp16 权重,不是全参训练的显存账。梯度和优化器状态也要占显存,合起来会到 TB 级。我会先把这些部分分开核算,再决定怎样切分。
- 「流水线并行和张量并行怎么分工?」 流水线并行切不同的层,张量并行切单层内部。我会优先让层内张量并行利用机内 NVLink,再按机组带宽安排并行度。这样回答能把切分方式和通信拓扑对应起来。
- 「用了 ZeRO-3,为什么还要考虑梯度检查点?」 ZeRO-3 负责切分训练状态,梯度检查点针对激活占用。两者解决的显存部分不同。我会分别检查状态和激活,避免只处理其中一项。
回答的坑
- 只拿 fp16 权重约 140GB 估卡数,漏掉梯度、优化器状态和激活,就无法说明全参训练的显存需求。
- 只罗列并行方法,不说明机内 NVLink、机组带宽与并行度的关系,就没有回答方案怎么落地。
同系列的题
—— 本题完 ——