并行训练三本账
并行训练的每一次「加并行度」都该先算账:显存是否真不够(分片账)、气泡是否可控(气泡账)、网络扛不扛得住(通信账)。拧卡数、ZeRO 级别、流水线段数与微批数,看三本账实时变化——「把并行度当性能旋钮猛拧」之前,先让数字说话。
纯前端算真实公式:每卡显存 = 分片字节数 × P ÷ 2³⁰、气泡率 = (p−1)/(m+p−1)、通信对象 = batch × 序列长 × 隐藏维 × 精度字节,与知识库《并行训练》动手节三笔账逐字对齐,零 API、零延迟。
第一本账 · 分片账:ZeRO 切到哪一级够用
每卡显存:单卡复制 vs 切分(7B)
柱子随卡数 N 变矮:DP 永远整份复制(不随 N 变),ZeRO 把切过的大件除以 N——文章静态表只给 8 卡单一配置,这里拧 N 看全貌。
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)
第二本账 · 气泡账:流水线空转有多疼
把层分组接龙的段数——气泡宽度就是 p−1 份
把全局批次拆成多少份填流水线——拆得越多气泡越薄
气泡率 = (p−1) ÷ (m + p−1)
p=8 段流水线、m=32 份 micro-batch:气泡率 17.9%。气泡宽度固定是 p−1 份,m 是免费的气泡阀——全局批次多拆一份就摊薄一分,拆批前先看这行公式。
第三本账 · 通信账:每层搬多少、带宽扛不扛得住
通信对象 = batch × 序列长 × 隐藏维 × 精度字节
每层的通信对象是激活张量(batch 4 × 序列 4096 × 隐藏 3584 × bf16)≈ 112 MiB:机内 NVLink 搬一次约 0.13 ms,跨机网络要 4.7 ms——这就是「TP 每层都通信、必须放机内;PP 只传段边界、扛得住跨机」的量化根源(带宽为演示口径)。