分布式训练(MP,常见架构等)

张开发
2026/6/12 4:52:01 15 分钟阅读

分享文章

分布式训练(MP,常见架构等)
分布式训练是指将机器学习或深度学习任务分解成多个子任务并在多个计算设备上并行训练。分布式训练的总体目标就是加快总的训练速度减少模型训练的总体时间。总训练速度正比于单设备计算速度*计算设备总量*多设备加速比其中单设备计算速度由单块加速芯片的运算速度和数据I/O能力简单来说数据 I/O 能力就是指计算机的存储系统向计算核心如 GPU/CPU搬运数据的速度。决定主要的技术手段有混合精度训练、算子融合、梯度累加等由于受通信效率的影响计算设备数量增多会造成加速比急剧降低多设备加速比是由计算和通信效率决定的需要结合算法和网络拓扑结构进行优化分布式训练并行策略的主要目标就是提升分布式训练系统中的多设备加速比。多设备加速比Speedup是衡量并行计算性能的核心指标它反映了通过增加处理器或计算设备如CPU核心、GPU等数量能让一个任务的执行速度提升多少倍。加速比的计算非常直观其基本公式为 加速比 (Sp) T1 / Tp * T1使用单个设备完成该任务所需的串行运行时间。 * Tp使用 P 个设备并行完成相同任务所需的运行时间。 例如如果一个程序在单台机器上需要运行 100 秒而将其分配到 4 台机器上后仅需 30 秒那么加速比就是 100 / 30 ≈ 3.33 倍。随着设备数量的增加加速比往往会逐渐降低主要受限于以下几个因素1. 通信开销多个设备之间需要频繁交换数据网络传输和数据同步会消耗大量时间。2. 串行部分限制任何程序都有一部分代码是无法并行化的必须按顺序执行。根据著名的阿姆达尔定律Amdahls Law系统的最大加速比受到这部分串行代码的严格限制。即使你有无限多的处理器整体速度也无法超越串行部分的瓶颈。3. 负载不均衡如果任务分配不均有的设备早早完成了工作处于空闲状态而有的设备还在忙碌这会拉低整体的效率。4. 资源竞争与同步多个设备同时访问内存、缓存或进行线程同步如加锁/解锁时会产生竞争和等待。分布式训练系统需要克服计算墙单个设备的计算能力和模型所需计算能力之间的差异、显存墙模型的完整参数、通信墙各设备之间的传输和同步等挑战。如果进行并行加速可以对数据进行切分将同一个模型复制到多个设备中称为数据并行DP对模型进行划分称为模型并行MP对数据和模型同时切分称为混合并行HP数据并行每个设备根据本地样本计算误差得到梯度然后对梯度进行广播最后所有设备聚合梯度值后使用平均梯度对模型进行更新完成该批次的训练。数据并行系统可以通过增加计算设备有效提升每秒全局批次数。模型并行一种是按模型的层切分到不同设备即层间并行或流水线并行一种是将同一层的参数切分到不同设备即层内并行或张量并行。流水线并行使得前后阶段能够流水式、分批工作。但是下游设备需要长时间空闲状态等待上游设备计算完成形成了流水线气泡。GPipe方法将mini-batch划分为更小的micro-batch每次处理一个micro-batch的数据。缺点是只有当一个小批次中的所有前向计算都完成后才能执行后向计算。保存所有micro-batch的前向中间结果导致OOM。解决方法是1F1B流水线并行策略包括非交错式和交错式两种模式。1F1B非交错式调度模式的过程分为三个阶段第一个阶段是热身阶段比如说先让所有设备都被填满并完成至少一次前向计算。第二个阶段是稳定阶段每台设备进入做一次新数据前向再做一次旧数据后向的循环状态。第三个阶段是结尾阶段当所有前向计算结束后完成剩余的后向计算的过程。优势包括两个首先极大的减少了前向计算产生的中间变量排除了OOM显存溢出第二是更早的反向传播训练反馈延迟更低。1F1B交错式让设备负责多段不连续的层每个设备被分配到多个阶段可以进一步压缩流水线中的空闲等待时间但是会增加通信开销。* 模型层的交错分配 传统的做法是把连续的层分给同一个设备例如4个设备跑16层模型设备0负责1-4层设备1负责5-8层...。而交错式调度会将模型切成更多、更细的“模型块”并交错地分配给设备。 * 举个例子同样是4个设备跑16层模型设备0可能负责第1、2层和第9、10层设备1负责第3、4层和第11、12层以此类推。这样每个物理设备上都运行着多个不连续的“虚拟阶段”。* 极高的资源利用率 由于每个设备负责了多个虚拟阶段数据流的旅程变短了粒度更细。这使得设备可以在执行其中一个模型块的前向计算时并行处理另一个模型块的反向计算。这种高度交错的安排让流水线中的“空泡”时间大幅缩短GPU几乎时刻都在高效运转。不过1F1B非交错式和GPipe完成一轮计算的时间是相同的因为流水线空闲时间的总量是等价的。张量并行将参数切分到不同设备主要由嵌入式表示、矩阵乘和交叉熵损失构成。嵌入式表示将词维度切分分别存储当每个节点查询各自的词表时如果无法查到那么该词表示为0各设备查询后得到结果张量最后通过ALLREDUCESUM通信跨设备求和得到完整的全量结果。矩阵乘的张量并行要充分利用矩阵的分块乘法原理。交叉熵损失可以按照类别维度切分同时通过中间结果通信得到最终的全局交叉熵损失。混合并行将多种并行策略如数据并行、流水线并行和张量并行等混合使用ZeRO零冗余优化器包含三种方法对优化器状态进行分区对模型梯度进行分区对模型参数进行分区。分布式训练集群属于高性能计算集群目标是提供海量的计算能力两种常见架构包括参数服务器架构和去中心化架构。参数服务器架构包括两种服务器角色训练服务器和参数服务器。参数服务器提供充足的内存资源和通信资源训练服务器提供计算资源。训练服务器都拥有完整的模型对数据集进行切片并计算再将梯度推送到相应的参数服务器参数服务器会等待训练服务器完成梯度推送再计算平均梯度并更新参数。参数服务器架构包括同步训练和异步训练两种模式同步训练会等到收到所有的梯度后进行参数更新异步训练不会等收到所有的梯度而是直接基于已收到的梯度进行参数更新。去中心化架构中没有中央服务器或控制节点由节点之间进行直接通信和协调。好处是减少通信瓶颈提高系统的可扩展性可以通过集合通信技术实现分布式训练常用通信原语包括 broadcast, scatter, reduce, all reduce, gather, all gather, reduce scatter, all to all 等。broadcast 主节点把自身的数据发送到集群中的其他节点scatter 主节点对数据进行划分并散布至其他指定的节点reduce 将不同节点上的计算结果进行聚合到一个节点上all reduce 将聚合后的节点再广播到各个计算设备上gather 将多个节点上的数据收集到单个节点上all gather 收集数据后的节点在进行广播reduce scatter 将每个节点中的张量切分为多个块再把每个块分配到不同的节点并进行特定操作all to all 将每个节点中的张量切分为多个块再把每个块分配到不同的节点参考书籍大规模语言模型理论与实践__第二版

更多文章