并行策略与性能优化:把 GPU 榨干
一张卡装不下,就把问题切开
Section titled “一张卡装不下,就把问题切开”大模型训练的所有工程,本质上是在回答一个问题:模型、数据、计算,至少有一个要被切开,切哪几刀、怎么切?
三种经典切法,按「切的对象」划分:
| 并行方式 | 切什么 | 类比 | 通信特征 |
|---|---|---|---|
| 数据并行 (DP) | 数据 | 复印 100 份作业,每人做一页,最后汇总 | 每步一次梯度 all-reduce |
| 张量并行 (TP) | 单层内部的矩阵乘 | 一道大题四人接力,各自算一块 | 每层 2 次 all-reduce,最密 |
| 流水线并行 (PP) | 模型按层切段 | 工厂流水线,每人负责一道工序 | 相邻 stage 点对点传激活值 |
直觉规则:切的刀数越多,单卡负担越轻,但卡之间聊天越频繁。性能优化的全部艺术,就是在「算得快」和「聊得多」之间找到甜点。
先算显存账:每参数 16 字节
Section titled “先算显存账:每参数 16 字节”混合精度 AdamW 训练,每参数的静态开销:
- BF16 权重副本 2B + BF16 梯度 2B + FP32 主权重 4B + 优化器状态 8B ≈ 16 字节
70B 模型就是 1.12TB——单卡 80GB 的 H100 连权重都放不下。这是所有并行策略的第一推动力。
三种并行 + ZeRO:组合出整个配方
Section titled “三种并行 + ZeRO:组合出整个配方”DP 的进化:ZeRO/FSDP。朴素 DP 每张卡存完整模型,浪费。ZeRO 把冗余的东西切给整个 DP 组:
- ZeRO-1:切优化器状态(省 4/16,≈2× 于 DP)
- ZeRO-2:再切梯度(再省 2/16)
- ZeRO-3 / FSDP:参数也切(几乎全切,只剩通信时的临时副本)
PyTorch FSDP 就是 ZeRO-3 的官方实现。扩容逻辑很简单:卡数翻倍,每卡静态显存减半(通信量略增)。
TP:快而贵。Megatron-LM 把 attention 的 QKV 投影按列切、输出投影按行切,MLP 同理。每层前向后向各 2 次 all-reduce——通信极其密集,必须绑在 NVLink 域内(节点内或 NVL72 机柜内),跨节点就是灾难。
PP:慢而省。GPipe 按层切段,micro-batch 流水。气泡占比 ≈ (p−1)/(m+p−1):8 个 micro-batch 过 4 段,约 27% 时间空转。1F1B(one-forward-one-backward)先用稳显存,交错式 1F1B 把每段再切成 v 份把气泡除以 v。
并行策略探索器:切分你的模型
✅ 装得下,还有空间给激活与临时缓冲。
提示:TP 越大通信越密(每层两次 all-reduce),一般绑在 NVLink 域内;PP 增加流水线气泡;DP+ZeRO 是扩容最廉价的轴。
粗粒度估算:混合精度 AdamW(16 bytes/param),激活按 selective recompute + 序列并行经验公式;实际以 profilers 为准。
现代配方(以 DeepSeek-V3 为例):671B 模型用 16 路 PP × 64 路 EP(专家并行)× DP,完全不用 TP——MLA 注意力本身省显存,MoE 的 all-to-all 走 IB 比 TP 的 all-reduce 更划算。EP 里再用 EPLB 做专家负载均衡,DualPipe 让通信与计算重叠。这说明三维并行不是教条,是工具箱。
激活值:第二个显存黑洞
Section titled “激活值:第二个显存黑洞”静态状态之外,激活值(前向时各层中间结果,反向要用)随 batch×seq×层数膨胀。三招:
- 激活重计算(gradient checkpointing):只存每层输入,反向时重算中间结果。全量重计算 ≈ 多一次前向(+33% FLOPs);选择性重计算只重算 attention 核心、MLP 激活照存,用远小于 33% 的额外计算换大部分显存——Megatron-Core 的默认
- 序列并行(SP):把 LayerNorm/dropout 这类逐 token 的激活沿序列维切开,与 TP 互补(korthikanti2023)
- 上下文并行(CP)/ Ring Attention:超长上下文按 block 分布在多卡,KV block 沿设备环轮转,通信与计算重叠
算得快:FlashAttention 与 kernel 融合
Section titled “算得快:FlashAttention 与 kernel 融合”- FlashAttention(dao2022):不把 N×N 注意力矩阵物化到 HBM,分块在 SRAM 里算,显存从 O(N²) 降到 O(N),精确注意力下还更快。FA2 改进了 warpgroup 间的工作划分,逼近硬件上限;FA3 在 Hopper 上用 TMA、warp specialization、FP8 继续榨
- 算子融合:RMSNorm、旋转位置编码、损失计算融合成单 kernel,减少 kernel launch 与显存往返;
torch.compile自动做一批 - MoE 的 all-to-all 优化:DeepEP 把 dispatch/combine 的通信做成独立 kernel,与计算 SM 共享, expert 并行不再拖垮 MFU
MFU:终极成绩单
Section titled “MFU:终极成绩单”MFU(Model FLOPs Utilization)= 实际吞吐 ÷ 硬件峰值。算式:训练 FLOPs ≈ 6·N·D(N 参数量,D tokens),除以「峰值 FLOPS × 时间」。
业界水位:普通团队 30%~40%,Megatron-LM 论文在 3072 张 A100 上做到 52.8%,字节 MegaScale 在 12288 卡上做到 55%+。MLPerf Training v5.0 上,2496 张 GB200 跑出 1.8 PFLOPS 应用吞吐、90% 扩展效率——万卡之后还能不能线性,就是网络与调度功力的判决书。
排查顺序(经验之谈):先看 dataloader 是否喂不饱(GPU 等数据)→ 再看通信占比(MFU 低的头号嫌疑)→ 再看 kernel 是否小碎(fusor/compiler)→ 最后才怀疑硬件。
自动并行:把配方交给编译器
Section titled “自动并行:把配方交给编译器”手工调 TP×PP×DP×ZeRO 本质是组合爆炸里的搜索。Alpa 率先把「算子内并行(类 TP)× 算子间并行(类 PP)」做成编译问题:用动态规划在层次化策略空间里搜索,GPT-3 规模上追平甚至超过专家配方。后续工作(Galvatron、Oases、pipline-compiler 一系)在 MoE、异构集群上继续推进。2026 年的共识:自动工具适合当基线,最后的 5%~10% 仍靠人根据硬件拓扑手调。
流水线气泡的极限
Section titled “流水线气泡的极限”Zero Bubble Pipeline Parallelism 把 backward 拆成 B(算激活梯度)和 W(算参数梯度)两类任务重新排布,用 W 填气泡,逼近零气泡且显存不增。再进一步就是 DeepSeek 的 DualPipe:双向流水线让相邻 stage 的前向/反向交错,通信几乎全隐藏。气泡问题从 GPipe 的 ~27% 一路压到个位数百分比——流水线调度的红利还没吃完。
RL 训练:性能优化的新前线
Section titled “RL 训练:性能优化的新前线”agentic RL 把问题又翻新了一遍:rollout(采样轨迹)是带宽/延迟 bound、训练是 FLOPs bound,两者资源画像完全不同。解耦架构(RollArt、AgentRL)把两阶段拆开用异构硬件,靠有界队列和版本管理吸收速率差;async pipeline 里权重过期的尺度直接决定收敛。如果你在搭 agentic RL 基础设施,这里的每一个百分点都是真金白银——这和传统预训练的优化目标(纯吞吐)已经不是同一个游戏。
🔬 开放研究问题
该领域的关键问题与研究方向:
- 自动并行搜索能否在 MoE + 异构集群上稳定超过人类专家?还差哪些传感器信息(实时的拓扑、抖动、故障率)?
- Zero Bubble 之后,流水线气泡的理论下界在哪里?显存-气泡-通信的三方 tradeoff 有没有 Pareto 前沿的可操作刻画?
- 超长上下文训练(100K+)下,Ring Attention / CP 与序列并行的边界在哪里?显存墙会不会先撞在 position encoding 上?
- agentic RL 的 rollout-train 解耦里,异步性的容忍尺度(staleness budget)能否从经验超参变成可推导的量?
本文引用论文
- Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism
提出张量并行(TP):把 self-attention 和 MLP 的矩阵乘按列/行切分到多张 GPU,层内并行、层间保持全精度激活,单卡只需承载 1/N 的权重与梯度。显式、可控、通信模式规则,与现代流水线、数据并行组合成 3D 并行范式,是大模型并行训练的奠基工作。
- GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism
把模型按层切成多个 stage 流水执行,用 micro-batch 把流水线气泡摊薄(气泡占比约 (p-1)/(m+p-1)),并配合激活重计算控制显存。流水线并行的开山之作,后续 1F1B、交错式调度、零气泡都是在它的气泡模型上做文章。
- ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
不再让每个数据并行副本都完整持有优化器状态:ZeRO-1/2/3 分别把优化器状态、梯度、参数切分到 DP 组内各卡,用通信换显存,使单卡显存随卡数近似线性下降。ZeRO-3 的完全分片思想就是后来 PyTorch FSDP 的源头,让单机装不下的模型训练成为可能。
- Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM
Megatron-LM 系统论文:把 TP、流水线 1F1B、数据并行组合成完整配方,给出 3D 并行的放置原则(TP 绑在 NVLink 域内、PP 跨节点、DP 兜底)、交错式 1F1B 调度与流水线气泡分析,并在 3072 张 A100 上以 52.8% 峰值利用率训练 GPT-3 量级模型,定义了大集群训练的效率基线。
- Reducing Activation Recomputation in Large Transformer Models
Megatron-Core 的显存工程论文:把激活值分成「必存」与「可重算」两类,提出选择性重计算(只重算 attention 核心、MLP 激活整段存)加序列并行,用远小于全量重计算的额外 FLOPs 拿到大部分显存收益;还系统分析了 transformer 各层激活的构成公式,是大模型训练显存规划的参考标准。
- Ring Attention with Blockwise Transformers for Near-Infinite Context
把超长上下文切成 block 分布到多台设备上做分块注意力:每卡只保存自己那段 KV block,block 沿设备环逐个轮转复用,通信与计算重叠进行。在集群显存总和允许的范围内上下文长度可近乎无限扩展,是上下文并行(context parallelism)的奠基工作。
- Zero Bubble Pipeline Parallelism
把 backward 拆成「计算激活梯度(B)」和「计算参数梯度(W)」两步重新调度,让 W 的计算去填流水线气泡,实现接近零气泡的流水线并行,且在同等显存预算下吞吐优于 1F1B。证明流水线调度仍有结构性红利可挖。
- Alpa: Automating Inter- and Intra-Operator Parallelism for Distributed Deep Learning
第一个自动联合搜索算子内并行(类张量并行)与算子间并行(类流水线并行)的系统:把庞大的并行策略空间做层次化划分,用动态规划求解最优切分。在 GPT-3 规模模型上追平甚至超过专家手工调制的 3D 并行配置,把「人肉调并行」变成了一个编译器问题。
- FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
FlashAttention 通过 IO-aware 的分块计算,在不牺牲精度的前提下,将注意力计算的内存 从 O(N²) 降至 O(N),速度提升 2-4 倍。它改变了长上下文训练的可行性边界, 是现代高效 LLM 训练和推理不可或缺的底层优化。
- FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning
用更激进的 warp 级并行和 work partition 把 FlashAttention 再翻倍。今天 vLLM / SGLang / Megatron 训练后端基本都升级到 FA-2。
- FlashAttention-3: Fast and Accurate Attention with Asympotic IO Complexity
利用 H100 的异步 TMA 与 FP8,把 attention 推到 1.2 PFLOPs,并保持数值精度。是 Hopper 架构上长上下文 + FP8 训练的关键依赖。
- DeepSeek-V3 Technical Report
671B 参数(37B 激活)MoE,14.8T token 训练;首次大规模在生产 LLM 上跑通 FP8 训练 + Multi-Token Prediction,并把训练成本压到 $5.6M。震动整个行业。