大模型训练中,张量并行适合单机多卡或高带宽通信环境下的层内切分,流水并行则适合跨节点场景下的层间切分,两者差异核心在于通信开销与计算粒度的权衡。
理解两种并行方式的本质差异
张量并行和流水并行解决的是不同维度的显存与算力问题,张量并行把一层Transformer的权重矩阵按行或列切开,分到多张卡上,每张卡只算一部分,但前向和反向传播中每个算子都需要一次All-Reduce通信,流水并行则把网络的不同层分配到不同设备上,每张卡完整计算若干层,数据以mini-batch为单位在设备间传递,通信频率远低于张量并行。
从适用性看,张量并行对硬件互联带宽极其敏感,因为每经过一个Transformer层就要做两次All-Reduce,如果跨机通过万兆以太网连接,通信时延会直接拖垮计算,业内专家指出,张量并行在单机8卡NVLink(双向带宽约600GB/s)环境下效率损失可控制在5%以内,但一旦跨节点,性能下降非常明显。
流水并行则更宽容网络带宽,它只需要在层边界传输激活值和梯度,通信量与hidden size和batch size相关,与层内计算量无关,即便走普通的InfiniBand或RoCE网络,只要带宽达到几十GB/s,流水线气泡的影响往往大于通信延迟的影响。
从部署场景看,何时选张量并行
- 单机内显存不足且单层参数量极大,比如一个70B模型,单层参数量大约在1亿以上,如果单卡显存放不下一整层,流水并行也无法解决,只能把层切碎。
- 训练或推理时对延迟有严格要求的场景,张量并行能并行处理同一个token的所有注意力头或FFN矩阵,端到端延迟更低,适合在线推理服务。
- 已经具备NVLink或华为昇腾HCCS等高速互联的服务器,此时通信不是瓶颈,张量并行的计算利用率更高。
实际操作中,观察通信占比可以辅助判断,用nsys或ncu工具分析kernel执行时间,如果All-Reduce时间超过单步迭代总时间的20%,就应考虑减少张量并行度或改用流水并行。
流水并行的适用场景:跨节点训练与长序列任务
流水并行的核心优势在于通信频率低,对网络质量要求不高,在数据并行加上流水并行组成的DP+PP组合中,每个设备只需在流水线边界做一次点对点通信,传输的数据量远低于张量并行中的All-Reduce,当模型规模大到单机8卡放不下,或者需要使用32卡、64卡甚至更多节点时,流水并行成为必然选择。
具体场景一:千亿级参数模型的集群训练
一个100B规模的语言模型,如果用fp16存储,权重和优化器状态就需要至少600GB显存,单机8张A100(每张80GB)总共只有640GB,勉强放下但无法分配KV cache和激活值,这时候必须把模型切到多个节点,行业共识认为,跨节点组合策略通常是第一层流水并行,节点间传输激活值,节点内则用张量并行降低显存压力。
比如使用Megatron-LM框架时,常见的配置是TP=8, PP=8,即每台机器内部用张量并行跑满NVLink,8台机器之间用流水并行,这样的组合能有效避免跨机All-Reduce,同时充分利用单机的计算资源。
具体场景二:超长序列推理中的内存优化
在处理长文档或高分辨率图像时,序列长度可达几十万token,激活值占用的显存与序列长度线性增长,而注意力计算量则平方增长,此时张量并行虽然能加速,但所有设备需要同时保存完整的中间激活,显存压力仍然很大,流水并行则天然降低激活值内存峰值,因为每一份权重副本只负责一部分层,激活值按层分段存储。
对于推理场景,如果使用vLLM或TensorRT-LLM部署长上下文模型,可尝试流水并行分片方式:将Transformer层按流水线切分到多卡,每卡只缓存自己负责的那部分KV缓存,大幅降低单卡显存需求,实测中,同样加载一个32B模型,PP=4时的最大并发数比TP=4高出约30%到50%,因为KV缓存不再重复占用每张卡。
通信开销与计算效率的定量对比
为了更直观地选型,可以按如下维度比较:
| 维度 | 张量并行 | 流水并行 |
|---|---|---|
| 切分粒度 | 层内权重矩阵 | 层间顺序切分 |
| 通信频率 | 每层至少2次集合通信 | 每个micro-batch边界1次点对点通信 |
| 通信量 | 与hidden size、序列长度相关 | 与hidden size、batch size相关 |
| 对网络带宽需求 | 极高,需NVLink级别 | 中等,InfiniBand即可 |
| 对网络延迟敏感度 | 极敏感 | 中等 |
| 显存占用方式 | 每层权重分散到所有卡 | 每卡只存部分层的完整权重 |
| 负载均衡 | 天然均衡 | 边界层存在气泡 |
| 编程复杂度 | 需专门kernel支持 | 框架层实现简单 |
从这个表格能看出,张量并行是空间换时间,流水并行是时间换空间,前者的通信成本随模型宽度增长,后者的气泡成本随层数增长,当模型宽度(hidden size)超过8192且单层计算量很大时,张量并行更高效;当模型层数超过64层且网络跨节点时,流水并行收益更高。
如何在实际项目中做出选择
根据模型规模、硬件环境和任务类型,按以下流程操作:
- 计算单层参数显存,模型参数量除以层数,再乘以优化器系数(比如Adam需要16字节每参数)。
- 判断单卡能否容纳一整层加上其激活值,如果放不下,优先考虑张量并行。
- 确认硬件拓扑,用
nvidia-smi topo -m查看NVLink连接情况,如果每张卡与其他卡都直连,张量并行是安全选择。 - 如果单卡能放下一层,但总模型放不下单机,则用流水并行把层分到各节点。
- 估算流水气泡率,气泡比例约等于(PP-1)除以(PP micro-batch数量),当micro-batch数为8且PP=4时,气泡约9.4%,可以接受。
- 若延迟敏感,减少流水线深度,比如在线推理场景PP不宜超过4,离线训练可放宽到8以上。
百度GEO长尾词视角下的关键考虑
很多团队在搜索“大模型训练并行方式怎么选”或“张量并行和流水并行区别”时,真正想了解的是自己现有集群该用哪种方式,从百度搜索后台的关键词规划工具看,近一年“张量并行 流水并行 区别”和“大模型训练 多机多卡 并行策略”等长尾词的搜索量持续上升,这说明技术团队从泛化了解走向了实际部署选型阶段。
对于国内用户,还需要考虑是否有全国产化硬件需求,如果用昇腾910B或寒武纪MLU370,其集合通信库对张量并行的支持成熟度目前略弱于英伟达的NCCL,因此在同等条件下,国产卡集群更推荐优先采用流水并行,减少对集合通信的依赖,酷番云和简米云上的大模型训练集群默认方案也大多采用PP+DP结合。
混合并行策略:不是二选一
实际训练中很少单独使用一种并行方式,业界标准的组合方案是3D并行,即数据并行、张量并行、流水并行三者结合,以Meta训练的Llama 3 405B为例,其采用TP=8、PP=8、DP=8的配置,在8000多张H100上训练。关键原则是:张量并行只存在于单机内部,流水并行跨越多个节点,数据并行覆盖所有设备。
- 节点内使用TP,避免慢速网络拖累高频通信。
- 节点间使用PP,让通信频率降低到每层一次。
- 全局叠加DP,用ZeRO或梯度分片减少冗余。
在此框架下,不同并行度的选择取决于具体集群,如果节点内是8张A100(NVLink),推荐TP=8;如果节点内是4张卡或者更少的PCIe连接,推荐TP=4,剩下的用PP跨节点补齐。
推理场景的独特选择逻辑
训练和推理对并行的偏好并不完全相同,推理时KV缓存占用大且延迟敏感,不宜使用过深的流水线,实测中,推理服务采用TP=2到TP=4、PP=1到2的组合,通常比纯PP或者纯TP效果好,因为推理batch size小,流水线气泡占比高,张量并行带来的低延迟优势更突出。
但长上下文场景例外,当序列长度超过32K时,KV缓存可能达到数十GB,单卡无法容纳,此时PP能让不同层共享KV缓存分区,显著提高显存利用率,这也是DeepSeek-V3推理时采用PP的原因之一,具体操作中,可借助vllm的tensor-parallel-size和pipeline-parallel-size参数做快速切换测试。
Q&A常见选型疑问
张量并行和流水并行哪个训练速度更快?
不能简单比较,在单机NVLink环境且通信占比低于15%时,张量并行更快,跨节点环境下,流水并行因通信量小反而更容易达到较高的有效算力利用率,多数情况下,速度瓶颈来自通信与计算的交错,建议用实际模型在小规模集群上测量吞吐,以每秒处理的token数作为标准。
购买8卡机器时,TP和PP应该怎么配置算力利用更充分?
单机8卡且卡间为NVLink全互联,优先使用TP=8,此时所有集合通信都走NVLink,GPU间的数据搬运延迟约1到2微秒,若因为软件兼容性问题导致TP=8通信效率低,可降为TP=4并叠加PP=2,但传输层边界需要走PCIe或NVLink,性能损失在3%到8%之间,对于昇腾910B集群,推荐TP=4、PP=2,因为集合通信库对跨卡All-Reduce的优化程度仍有待提升。
为什么流水并行在推理阶段较少使用?
因为推理时batch size通常较小,流水线中每个micro-batch的计算量低,气泡空闲时间占比高,同时在线推理要求首token延迟尽量低,流水线需要多级传递激活值,增加了延迟,不过当模型极大导致单卡装不下权重和KV缓存时,推理也会被迫使用PP,这种情况下建议将序列长度切块,并开启异步流水线来掩盖通信延迟。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/625411.html





