Skip to content

训练系统与分布式总览

一句话:当一份大模型放不进、也算不动单卡时,训练系统的核心任务就是把「参数 + 梯度 + 优化器状态 + 激活」这四份显存,以及它们之间的通信,沿数据 / 张量 / 流水 / 专家 / 序列五个维度切到成百上千张卡上。 关键年份:Megatron-LM(arXiv:1909.08053, 2019)、ZeRO(arXiv:1910.02054, 2019)、PyTorch FSDP(arXiv:2304.11277, 2023)、Megatron 序列并行(arXiv:2205.05198, 2022) 前置阅读:MoE 架构推理框架QLoRA

一、为什么必须分布式:显存墙与通信墙

单卡训练失败的根因通常不是「算不动」,而是「放不下」。先把显存账算清楚。

显存墙:四份占用

混合精度 + Adam 训练时,单个参数的常驻显存可以按字节估算(设参数量为 Ψ):

占用项内容字节 / 参数
fp16 参数前向 / 反向用的工作副本2
fp16 梯度反向累积2
fp32 参数主副本优化器更新基准4
Adam 一阶动量 m优化器状态4
Adam 二阶动量 v优化器状态4
小计16

也就是说,模型状态约需 16Ψ 字节(来源:ZeRO 论文 arXiv:1910.02054)。一个 7B 模型仅模型状态就约 7×109×16112GB,已远超单张 80GB 卡。

这还没算第四份——激活(activation)。激活显存与 batch、序列长度、层数线性相关,长上下文场景下常常反超模型状态,成为真正的瓶颈。

Mtotal16Ψ参数+梯度+优化器+Mact(b,s,L)激活

通信墙

切卡之后,卡间必须交换数据:DP 要 all-reduce 梯度,TP 要在每层内 all-reduce / all-gather 激活,PP 要在 stage 间传递激活与梯度。通信量、通信频率与硬件带宽(NVLink、IB)共同决定了「能扩到多大、扩得多快」。分布式训练的本质,是在显存墙和通信墙之间做权衡:切得越细越省显存,但通信越重。

二、并行维度全景

主流框架围绕五个相互正交的维度切分一份模型,可任意组合:

维度切什么通信特征典型代表
数据并行 DP复制模型,切分数据 batch每步 all-reduce 梯度DDP / ZeRO / FSDP
张量并行 TP切分单层权重矩阵(行/列)层内高频 all-reduce,带宽敏感Megatron-LM
流水并行 PP按层分段到不同卡stage 间 P2P 传激活,存在 bubbleGPipe / Megatron PP
专家并行 EP把 MoE 的专家分到不同卡token all-to-all 路由MoE
序列并行 SP沿序列维切 LayerNorm/Dropout 激活与 TP 配合,省激活显存Megatron SP(arXiv:2205.05198)

组合成 3D / 4D 并行

实际千卡训练几乎都是多维并行的笛卡尔积。经典的 3D 并行 = DP × TP × PP

  • TP 通常限制在单机内(NVLink 高带宽域),因为层内通信最频繁;
  • PP 跨机切分层段,降低单机显存压力;
  • DP 在最外层复制整套并行组,吃更多数据。

引入 MoE 后再叠加 EP,配合 SP,就成了 4D / 5D 并行。总卡数 = DP×TP×PP×EP

三、ZeRO / FSDP 与 Megatron 的定位

两条主线,解决两类问题:

  • ZeRO / FSDP —— 把 DP 做到不冗余。 朴素 DP 在每张卡上都存一份完整的 16Ψ,纯属冗余。ZeRO(arXiv:1910.02054)分三个 stage 逐步消除冗余:ZeRO-1 切优化器状态、ZeRO-2 再切梯度、ZeRO-3 连参数也切。PyTorch FSDP(arXiv:2304.11277)是 ZeRO-3 思路的工业级原生实现:参数平时分片存放,用到某层时临时 all-gather,用完即丢。它本质仍是「数据并行」,但显存接近模型并行。

  • Megatron-LM —— 把单层 / 单段切开。 当单层权重本身就放不下,或要在单机内跑满算力时,就需要 TP/PP。Megatron-LM(arXiv:1909.08053)给出了 Transformer 张量并行的标准切法(attention 与 MLP 的行列分块),并扩展出流水并行与序列并行,是大规模训练系统的事实标准。

工程实践中二者常叠加:Megatron 负责 TP/PP/EP/SP,ZeRO/FSDP 负责最外层 DP,例如 Megatron-DeepSpeed、Megatron-Core 都走这条组合路线。推理侧的切分思路(如 TP)与之同源,可对照 推理框架

四、本章导航

页面主题关键词
数据并行DDP、ZeRO 三阶段、FSDP梯度 all-reduce、分片、参数 all-gather
模型并行张量并行 TP、流水并行 PPMegatron 切法、pipeline bubble
训练效率激活重计算、混合精度、通信重叠MFU、selective recompute、FlashAttention

五、一份大模型怎么切到多卡

下图展示一份模型如何沿多个维度被层层切分到 GPU 集群:

切分顺序通常遵循「通信越重,放得越近」:TP 锁在机内,PP 跨机分段,DP/ZeRO 放最外层。后续三页分别下钻每个维度的具体机制与权衡。

参考文献

  • Shoeybi et al. Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism. arXiv:1909.08053
  • Rajbhandari et al. ZeRO: Memory Optimizations Toward Training Trillion Parameter Models. arXiv:1910.02054
  • Korthikanti et al. Reducing Activation Recomputation in Large Transformer Models(序列并行 / 选择性重计算). arXiv:2205.05198
  • Zhao et al. PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel. arXiv:2304.11277