Skip to content

分布式并行全景:从单卡到万卡 ​

摘要:训练一个放不进单卡显存的模型,本质上是回答三个问题:把什么切开(参数 / 梯度 / 激活 / 专家)、切到多少份(并行度)、切开后怎么同步(通信原语与网络拓扑)。本文从单卡出发,逐层推导出混合并行配置,并给出可直接套用的选型决策树。

1. 起点:单卡为什么装不下 ​

以 70B 参数、BF16 精度的大模型为例,仅模型权重就需要约 140 GB(70 × 10⁹ × 2 bytes),加上 Adam 优化器状态(2 份动量 + 1 份方差,约 420 GB)、梯度(140 GB)、激活值,单卡 H100 的 80 GB 显存远远不够。

单卡显存占用 = 权重 140G + 梯度 140G + 优化器状态 420G + 激活
             ≈ 700 GB 以上(70B BF16 全参训练)

这就是分布式训练的起点:显存放不下,就必须把状态切到多张卡上。

2. 并行策略:六种"切法" ​

2.1 数据并行(DP)—— 切数据 ​

每张卡持有完整模型副本,各吃一份不同的 batch,前向反向后做一次全归约(AllReduce)同步梯度。

  • 通信量:每步同步 2 × 模型参数量(梯度),与数据量无关。
  • 适用:模型单卡放得下,数据量 / 吞吐是瓶颈。
  • 瓶颈:显存不省,通信与 batch 呈反比(batch 越大同步占比越低)。

2.2 ZeRO(零冗余优化器)—— 切优化器状态 ​

数据并行的"省显存"变体:把优化器状态、梯度、甚至权重按 DP rank 分片,各卡只维护自己的分片,用时通过 AllGather 取回。

  • ZeRO-1 只切优化器状态;ZeRO-2 切优化器+梯度;ZeRO-3 三者全切(激活另算)。
  • 代价:通信量从 2× 参数涨到约 2.7×~3× 参数(多了 AllGather 权重)。
  • 适用:小规模(≤32 卡)微调、长上下文、低成本场景。DeepSpeed ZeRO / FSDP 都是工程实现。

2.3 张量并行(TP)—— 切权重矩阵 ​

把单个线性层的权重矩阵按行/列切成多份,分布在不同卡上,前向一次需要 2 次 AllReduce(forward 一次、backward 一次)。

  • 通信量:每层每次 2 × 该层激活,与参数量无关,随序列长度和 batch 放大。
  • 通信频率极高(每个 Transformer 层都要同步),要求卡间低延迟高带宽:优先放在同一节点内(NVLink)或同一 Pod 的同一 leaf 交换机下。
  • 适用:单机多卡起步的必然选择;千卡以上时 TP 度一般 ≤ 8,避免跨交换机放大。

2.4 流水并行(PP)—— 切层 ​

把 Transformer 层切成连续段(stage),每卡只算一段,数据像流水线一样逐段流过。

  • 通信量:每步仅 2 × 层间激活(一次 send/recv),是并行策略里通信最省的。
  • 代价:流水线气泡(bubble),微批数量 = 2×(PP-1) 时气泡理论最小(Gpipe);PP≥4 时通常配合微批调度(1F1B)。
  • 适用:显存紧张、跨节点时的显存扩展手段;与 TP 互补(TP 管单层内部,PP 管层之间)。

2.5 序列并行(SP)—— 切序列 ​

把序列长度维度切开,配合 TP 把 LayerNorm / Dropout 等逐 token 操作分片,省下激活显存,几乎不增加通信。

  • 适用:超长上下文(如 128K/1M tokens)训练,激活显存随序列线性增长的场景。
  • 实践中常以"TP + SP"组合出现(如 Megatron-LM 的序列并行)。

2.6 MoE 专家并行(EP)—— 切专家 ​

MoE 模型的专家网络按卡分片,token 通过 All-to-All 路由到对应专家卡,算完再路由回来。

  • 通信量:2 × 路由 token 量,随 batch 放大,且是 All-to-All(全局模式,最依赖网络拓扑)。
  • 适用:MoE 大模型(如 Mixtral、DeepSeek-MoE)训练与推理;通常需要大带宽 + 低拥塞网络(全连接拓扑 / 高 radix 交换)。

3. 混合并行:怎么组合 ​

真实训练几乎不会只用一种并行。以典型 LLM 训练为例:

大模型训练 = 数据并行(最外层) × 张量并行(单机内) × 流水并行(跨节点) × 序列/专家并行(可选)

组合原则:

  1. TP 优先打底:8 卡 H100 节点内 NVLink 全互联,TP=8 通信成本可接受;TP 不跨节点(除非节点内卡数 < 8)。
  2. PP 按显存缺口决定:70B 在 8×80G 节点上,TP=8 仍放不下,就需要 PP=2 或更大,此时 PP 跨节点是允许的(通信量小)。
  3. DP 填满算力:剩下不够用的算力全部用 DP(或 ZeRO/FSDP)补齐。
  4. EP 只给 MoE:普通稠密模型用不到 All-to-All。

典型配置速查(BF16 全参训练) ​

模型规模单卡显存典型并行最少卡数说明
7B80 GBDP/ZeRO-38~32单节点即可,主要瓶颈是通信占比
13B80 GBTP=8 + DP16~64单节点 TP=8 打底
70B80 GBTP=8 + PP=2~4 + DP64~256节点内 TP,节点间 PP
175B+80 GBTP=8 × PP=8~16 × DP512+需要 3D 混合并行 + 密集网络
MoE 千卡级80 GBTP=4~8 × EP + DP1000+All-to-All 流量大,需高 radix 拓扑

4. 通信量估算:网络够不够 ​

选型前先算通信占比(training-time communication overhead)。核心公式:

每步通信量 ≈ 2×参数(梯度同步) + 2×TP层间激活(TP) + 2×层间激活(PP) + 2×路由token(EP)
网络需求 ≈ 通信量 ÷ (全局带宽 × 训练步数 × 利用率)

工程经验值:

  • AllReduce 梯度同步(DP/ZeRO):7B 每步约 14 GB,千卡集群 IB NDR 400G 单卡带宽约 50 GB/s,通信占比约 5~15%。
  • TP=8 的层间 AllReduce:激活随序列增长,序列 4K、batch 512 时单层通信可达 GB 级;TP 通信占比通常 10~25%。
  • 若估算通信占比 > 30%,先降 TP 或加大 batch,而不是盲目加卡——加卡在通信占比高时可能负收益(通信时间超过计算节省)。

5. 选型决策树 ​

模型放不进单卡?
├─ 显存缺口小(≤2×):ZeRO-3 / FSDP 最省事
├─ 显存缺口大但节点内可容纳:TP=8 → 不够再 PP
├─ 必须跨节点:PP 跨节点(通信省) + TP 不跨节点
└─ MoE 模型:EP + 高 radix 网络,先验证 All-to-All 带宽

网络侧配套检查:
├─ 节点内:NVLink(TP 必需)
├─ 节点间:IB/RoCE 全连接或高 radix(PP/EP 必需)
└─ 机柜/集群级:ECMP 散列均匀 + PFC/ECN(AllReduce/All-to-All 必需)

6. 常见误区 ​

  • "卡越多越快":通信占比超过计算占比后,扩展效率(scaling efficiency)断崖下跌,7B 在 512 卡以上通常不如加大 batch。
  • "TP 度越大越好":TP 通信最密集,TP=16 跨节点时,AllReduce 延迟可能抵消全部收益。
  • "ZeRO-3 万能":ZeRO-3 通信量比 DP 高约 50%,千卡级训练优先用真实 DP + 完整模型副本,而不是 ZeRO-3。
  • "只看模型并行不看拓扑":EP/大 DP 的 AllReduce 需要全网均匀带宽,胖树(Fat-Tree)与 Dragonfly 的散列行为差异极大,务必先用 nccl-tests 实测。

下一步:并行策略定好后,网络能不能兜住,见 NCCL 网络调优实战。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com