← 关联知识节点:并行训练:DP / ZeRO / FSDP / TP / PP
交互工具 · 算账

并行训练三本账

并行训练的每一次「加并行度」都该先算账:显存是否真不够(分片账)、气泡是否可控(气泡账)、网络扛不扛得住(通信账)。拧卡数、ZeRO 级别、流水线段数与微批数,看三本账实时变化——「把并行度当性能旋钮猛拧」之前,先让数字说话。

纯前端算真实公式:每卡显存 = 分片字节数 × P ÷ 2³⁰、气泡率 = (p−1)/(m+p−1)、通信对象 = batch × 序列长 × 隐藏维 × 精度字节,与知识库《并行训练》动手节三笔账逐字对齐,零 API、零延迟。

「加并行度前先算两笔账」——这笔账一共三本:分片账(ZeRO 切到哪级装得下)、 气泡账(流水线空转多疼)、 通信账(网络扛不扛得住)。拧卡数、级别、段数与微批数,看三本账实时变化。

第一本账 · 分片账:ZeRO 切到哪一级够用

DP 基线 · 每卡
106 GiB
16 字节/参数整份复制
ZeRO-1 · 每卡
36 GiB
8 卡分片 · 切优化器
相对 DP 省下
65.6%
通信与 DP 持平(免费省)

每卡显存:单卡复制 vs 切分(7B)

当前级别 超出 80 GB 卡
80 GB 卡容量106DP36ZeRO-125ZeRO-213ZeRO-3

柱子随卡数 N 变矮:DP 永远整份复制(不随 N 变),ZeRO 把切过的大件除以 N——文章静态表只给 8 卡单一配置,这里拧 N 看全貌。

卡数 N(分片度)8 卡

ZeRO 把切过的训练状态除以 N——8 卡是文章算例锚点

每卡显存 = (权重 2 + 梯度 2 + 优化器 12) 中未切项 + 切过项÷N,× P ÷ 2³⁰

ZeRO-1 先切优化器状态(12 字节/参数的大头):每卡 106 → 36 GiB,总通信量与 DP 完全相同——显存等于白省,7B 全量训练到这一级就够。(文章算例:8 卡实算 DP 106 → Z1 36 → Z2 25 → Z3 13 GiB)

第二本账 · 气泡账:流水线空转有多疼

气泡宽度
7 份
启动 + 收尾的空转(随 p)
总步宽
39 份
m 份实活 + 气泡宽度
气泡率
17.9%
m 是免费的气泡阀
流水线段数 p8 段

把层分组接龙的段数——气泡宽度就是 p−1 份

micro-batch 数 m32 份

把全局批次拆成多少份填流水线——拆得越多气泡越薄

气泡率 = (p−1) ÷ (m + p−1)

文章实测(8 段流水线),点一下复现

p=8 段流水线、m=32 份 micro-batch:气泡率 17.9%。气泡宽度固定是 p−1 份,m 是免费的气泡阀——全局批次多拆一份就摊薄一分,拆批前先看这行公式。

第三本账 · 通信账:每层搬多少、带宽扛不扛得住

每层通信对象
112 MiB
batch 4 × 序列 4096 × 隐藏 3584 × bf16
机内 NVLink 搬一次
0.13 ms
900 GB/s(TP 的地盘)
跨机网络搬一次
4.7 ms
25 GB/s(PP 扛得住)

通信对象 = batch × 序列长 × 隐藏维 × 精度字节

每层的通信对象是激活张量(batch 4 × 序列 4096 × 隐藏 3584 × bf16)≈ 112 MiB:机内 NVLink 搬一次约 0.13 ms,跨机网络要 4.7 ms——这就是「TP 每层都通信、必须放机内;PP 只传段边界、扛得住跨机」的量化根源(带宽为演示口径)。