一句话定义
百亿参数以上的模型无法装进单卡显存,训练系统工程通过数据并行、张量并行、流水线并行与 ZeRO 类显存切分、混合精度等技术的组合,把一次预训练摊到成百上千张加速卡上。
为什么重要
Scaling Law 给出「要多少算力」,本节回答「算力怎么真的用起来」。并行策略选择直接决定集群利用率(Model FLOPs Utilization,MFU):好配置与差配置可差数倍,对应数百万美元级的成本差。读懂技术报告中的「N 卡训练、T 词元」,需要这些概念作词典。
前置知识
- kp-007(Scaling Laws 与算力预算)
核心概念
- 数据并行(DP,Data Parallelism):每卡持有完整模型,切分数据,梯度 All-Reduce 同步。
- 张量并行(TP,Tensor Parallelism):把单个矩阵乘按行/列切开分到多卡,通信最频繁,一般限于机内 NVLink 域。
- 流水线并行(PP,Pipeline Parallelism):按层切成若干阶段,micro-batch 流水填充,减少气泡是关键。
- ZeRO / 分片优化器状态:把优化器状态、梯度、参数切分到数据并行各卡,消除冗余存储。
- 混合精度(Mixed Precision):前向/反向用 BF16/FP16,权重主本与累加用 FP32,配合损失缩放防下溢。
- 检查点与容错:定期保存可恢复状态,应对长周期训练的硬件故障。
原理与机制
显存账本:一个 7B 参数模型,BF16 权重约 14 GB,加上 FP32 主本与 Adam 状态(动量、方差)后仅权重相关就数倍于此,再叠激活值,单卡必然放不下——这就是必须切分的量化原因。实践采用 3D 并行组合:机内 TP(通信最快)× 机间 PP × 最外层 DP+ZeRO。BF16 相比 FP16 具有更大指数范围,训练更稳,已成为大模型默认精度。
公式或模型
Adam 优化器状态下每参数显存(无切分、BF16+FP32 主本):
M ≈ 2(权重 BF16) + 4(主本 FP32) + 4 + 4(动量/方差 FP32) = 16 字节/参数
7B 模型仅此一项即约 112 GB,远超单卡显存——切分是必然。
图示
数据并行: 卡1(全模型+数据A) 卡2(全模型+数据B) → 梯度同步
张量并行: 一层矩阵 A 按列切开 → 卡1 算一半、卡2 算一半 → 拼接
流水线并行: 层1-8 在阶段1, 层9-16 在阶段2, micro-batch 依次流动
直观类比
盖一栋楼:DP 是「多支施工队各自盖完整样楼再对图纸」(数据并行);TP 是「一层楼由两队各砌一半墙」(张量切分);PP 是「施工队 1 完成地基就交给队 2 建标准层,像流水线」(按层分段)。Team 之间交接次数越多(通信),整体越慢,所以要按「亲密程度」安排分工。
实例或案例
Megatron-LM(2019)系统化 TP/PP 实现,成为事实上的训练框架蓝本;Narayanan 等(2021)给出 3D 并行的吞吐优化配方;开源侧,主流框架(如 DeepSpeed、FSDP)把 ZeRO 思想产品化,使千卡级训练配置可复用(框架版本演进属时效信息)。
常见误区
- 「并行度越高越快」:通信开销随并行度上升,配置不当利用率反而骤降;TP 一般不跨机。
- 「混合精度 = 半精度省一半」:若不做 FP32 主本与损失缩放(FP16)会训崩;省显存的前提是数值安全设计。
- 「显存不够就减 batch」:激活重算(Activation Checkpointing)等手段往往更划算。
与其他知识点的关系
自测题
- 为什么 TP 通常限制在单机内而 PP 可以跨机?答案要点:TP 每层前后向都有频繁通信,对带宽敏感,依赖机内高速互联;PP 只在阶段边界传激活,通信频率低。
- 估算 13B 参数模型 Adam 训练态显存(不含激活)。答案要点:约 16 字节/参数 × 13B ≈ 208 GB,必须切分。
- BF16 相比 FP16 训练更稳的原因?答案要点:指数位更多、动态范围更大,不易上/下溢,对损失缩放的依赖低。
延伸阅读
- Megatron-LM(Shoeybi 等,2019)
- Efficient Large-Scale Language Model Training on GPU Clusters(Narayanan 等,2021)