TP DP PP 并行训练方法介绍

张量并行TP

挖坑

流水线并行 PP

经典的流水线并行范式有Google推出的Gpipe,和微软推出的PipeDream。两者的推出时间都在2019年左右,大体设计框架一致。主要差别为:在梯度更新上,Gpipe是同步的,PipeDream是异步的。异步方法更进一步降低了GPU的空转时间比。虽然PipeDream设计更精妙些,但是Gpipe因为其“够用”和浅显易懂,更受大众欢迎(torch的pp接口就基于Gpipe)。因此本文以Gpipe作为流水线并行的范例进行介绍。https://zhuanlan.zhihu.com/p/613196255

gpipe论文 https://arxiv.org/pdf/1811.06965.pdf

naive模型并行

在这里插入图片描述
图片来自https://arxiv.org/pdf/1806.03377.pdf

如果一个模型一个gpu放不下,就某些层放在一个卡,上图表示一共四个卡,F0表示第0个batch,灰色的第一个卡计算完第0个batch交给黄色的卡。黄卡上放的模型的层的输入是灰色的卡上放的模型的输出。一次只有一个gpu工作。

GPipe

把mini batch分成micro batch,这样多个gpu可以同时计算。

在大模型训练中,EP(Expert Parallelism,专家并行)、TP(Tensor Parallelism,张量并行)、PP(Pipeline Parallelism,流水线并行)和DP(Data Parallelism,数据并行)是四种主要的并行策略。它们在通信流量上的占比和影响各有不同,具体分析如下: ### 1. EP(专家并行)的通信流量占比 EP主要用于稀疏激活的MoE(Mixture of Experts)模型中,其核心思想是将不同的“专家”分配到不同的设备上进行计算。由于每个输入token只选择部分专家进行处理,因此EP的通信流量取决于top-k选择机制下的专家分配均匀程度。 - 在理想情况下,当专家分配完全均匀时,EP的通信量与TP相近,尤其是在topk=2的情况下,两者通信量一致[^5]。 - 实际训练过程中,由于专家分配不均(木桶效应),EP的通信延迟通常高于TP,这导致EP在某些场景下可能成为通信瓶颈[^5]。 ### 2. TP(张量并行)的通信流量占比 TP通过将模型参数切分到多个设备上来实现并行计算,常见于稠密模型的训练。它涉及大量的参数同步操作,如all-reduce、all-gather等。 - TP的通信流量通常较大,特别是在模型规模较大或设备间带宽受限时更为明显。 - 相比SP(Sequence Parallelism),TP的通信开销更高,因为SP+TP的通信操作为reduce-scatter + all-gather,而TP单独使用的是all-reduce,两者的总通信量相同[^4]。 ### 3. PP(流水线并行)的通信流量占比 PP通过将模型划分为多个阶段,并按阶段顺序执行来实现并行化。每个阶段之间的中间结果需要通过通信传输。 - PP的通信流量相对较小,主要是相邻阶段之间的中间激活值传输。 - 在大规模模型中,PP的通信开销通常低于TP,但其效率受制于负载均衡问题,例如PP bubble现象,这会影响整体训练吞吐量[^2]。 ### 4. DP(数据并行)的通信流量占比 DP是最常见的并行方式,通过将数据分割成多个副本并在不同设备上并行训练,最后通过梯度聚合完成更新。 - DP的通信发生在梯度同步阶段,通常使用all-reduce操作。 - 通信量取决于模型参数量大小和设备数量。对于超大规模模型,DP的通信开销可能显著增加,尤其在没有重叠通信与计算的情况下。 ### 综合比较与趋势 | 并行策略 | 通信操作类型 | 通信流量占比(大致) | 主要影响因素 | |----------|--------------------|----------------------|--------------------------------| | EP | all-to-all | 中等至高 | 专家分配均匀性、topk设置 | | TP | all-reduce | 高 | 模型规模、设备间带宽 | | PP | send/recv(点对点)| 低至中等 | 流水线阶段数、负载均衡 | | DP | all-reduce | 中等至高 | 参数量、设备数量 | 此外,在混合并行策略(如EP+TP+PP+DP)中,通信流量的总体占比会更加复杂,需综合考虑各维度并行策略的交互影响。例如,在MoE模型中,TP可能导致较大的通信开销,而EP则在实际训练中因专家分配不均而引入更高的延迟[^3]。 ### 示例:通信操作的代码片段(PyTorch) ```python import torch.distributed as dist # AllReduce 示例(用于DPTP) def allreduce(grads): dist.all_reduce(grads, op=dist.ReduceOp.SUM) # AllGather 示例(用于TP) def allgather(tensor, world_size): tensors = [torch.empty_like(tensor) for _ in range(world_size)] dist.all_gather(tensors, tensor) return torch.cat(tensors) # AllToAll 示例(用于EP) def alltoall(tensor): input_list = list(torch.chunk(tensor, dist.get_world_size())) output_list = [torch.empty_like(input_list[0]) for _ in range(dist.get_world_size())] dist.all_to_all(output_list, input_list) return torch.cat(output_list) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值