把大模型训练想成开一家中央厨房。数据并行(Data Parallelism, DP)是“同一本菜谱,多份订单”:每张 GPU 都保存一份完整模型,喂不同的训练数据(batch),各自算梯度,再通过 all-reduce 把梯度加起来求平均,更新一模一样的权重。好处是实现简单、扩数据吞吐;代价是每张卡都要装下整个模型,显存有冗余,卡越多通信越重。
张量并行(Tensor Parallelism, TP)是“把一道菜里的刀工切开”:模型某一层里的大矩阵乘法,比如 Y=XA,按行或列切成几块,分给不同 GPU 算,再把结果拼起来。它切的是层内参数,所以单卡不再有完整层,必须频繁通信。好比切土豆丝,一个人案板放不下,三个人各切一段,但要不停把切好的丝递来递去。TP 通信最频繁,通常放在同一台机器内,依赖高速互联。
流水线并行(Pipeline Parallelism, PP)是“把做菜流程分段”:前几层在 GPU 0,中间几层在 GPU 1,后面几层在 GPU 2,一个 micro-batch 从前向后流过。不同 GPU 可以同时处理不同 micro-batch,像流水线一样。问题是启动和收尾时有人闲着,这叫气泡(bubble),需要用更多 micro-batch 填充。PP 通信相对少,适合跨节点放不同层。
| 维度 | 数据并行 DP | 张量并行 TP | 流水线并行 PP |
|---|---|---|---|
| 切什么 | 训练数据 batch | 层内矩阵/张量 | 模型层 |
| 每卡模型 | 完整副本 | 部分层内参数 | 部分层 |
| 通信频率 | 每步梯度同步 | 每层都通信,最高 | 段间传激活,较低 |
| 典型位置 | 节点内/跨节点 | 节点内 | 跨节点 |
| 主要问题 | 显存冗余 | 通信密集 | 气泡 |
三者不互斥。实际大模型训练常把它们组合成“3D 并行”:节点内用 TP,跨节点用 PP,再用 DP 扩数据。对从业者,先看模型能否单卡放下、互联有多快,再决定切法;对普通人,理解“算力不够不是简单堆卡,而是选择拆数据、拆矩阵还是拆层”,就能看懂训练成本为什么高。具体框架支持哪种组合、怎么配置,以官方页面为准。
