概览
流水并行(Pipeline Parallelism):在不同的GPU上运行模型的不同层;
流水线并行(Pipeline Parallelism)是一种在分布式计算环境中实现模型并行的技术,主要用于深度学习领域,特别是在处理大规模神经网络模型时。通过将模型的不同部分(如神经网络的层)分配到不同的计算节点上,流水线并行能够在不牺牲训练效率的情况下,利用集群中的多台机器共同完成模型训练。
1. 简单流水并行
我们将模型拆分成多个部分,并将每个部分分配给一个 GPU。然后,我们在小批量上进行常规训练,在拆分模型的边界处插入通信步骤。
我们以 4 层顺序模型为例: 我们将计算划分到两个 GPU 上,
前向传递,itermediate 在 GPU1 上进行计算并将结果张量传输到 GPU2。然后,GPU2 计算模型的输出并开始反向传递。
反向传递,intermediateGPU2 的梯度发送到 GPU1。然后,GPU1 根据发送的梯度完成反向传递。
我们可以观察到一些简单模型并行的低效率。
GPU 利用率低:在任何给定时间,只有一个 GPU 处于繁忙状态,而另一个 GPU 处于空闲状态。低利用率表明可以通过将有用的工作分配给当前处于空闲状态的 GPU 来加快训练速度。
通信和计算不交错:当我们通过网络发送中间输出 (FWD) 和梯度 (BWD) 时,没有 GPU 执行任何操作。
高内存需求:GPU1 一直到最后都需要缓存整个批次的激活状态。如果批量很大,这可能会产生内存问题。
GPipe 算法,与简单流水并行算法相比,该算法的 GPU 利用率要高得多。
2. GPipe算法
(1)Gpipe原理
GPipe 通过将每个 minibatch 分割成更小、大小相等的 microbatches 来提高效率。我们可以为每个 microbatches 独立计算前向和反向传递。如果我们将每个 microbatches 的梯度相加,我们就会得到整个批次的梯度。该过程称为“梯度积累”。
由于每一层只存在于一个 GPU 上,因此 microbatches 梯度的累加可以在本地执行,无需任何通信。 让我们考虑一个跨 4 个 GPU 划分的模型。对于简单的管道并行性,最终的调度将如何?
在任何给定时间点,只有一个 GPU 处于繁忙状态。此外,每个时间步骤都会花费相当长的时间,因为 GPU 必须为整个小批量运行前向传递。
使用 GPipe,我们现在将 minibatch 分成多个 microbatches,假设有 4 个。由于模型各个层之间的依赖关系,流水线中还是存在没有进行任何有用工作的点,称为气泡。
GPipe 气泡
浪费在气泡上的时间比例取决于管道深度 n 和 microbatches 数量 m,其实就是计算气泡的面积占整体的比例: 因此,增加 m,即 microbatches 数量可以降低气泡的占比。
(2)GPipe 空间复杂度
增加批量大小会线性增加缓存激活的内存需求,在 GPipe中,利用 gradient checkpointing 来降低内存需求。在 gradient checkpointing 中,我们不会缓存计算梯度所需的所有激活,而是在反向传递过程中动态重新计算激活,这降低了内存需求但增加了计算成本。
3. PipeDream算法
PipeDream 在最终管道阶段完成相应的前向传递后立即开始 microbatches 的反向传递。我们可以在执行相应的反向传递后立即丢弃第 m 个 microbatches 的缓存激活。使用 PipeDream,此反向传递比在 GPipe 中发生得更早,从而减少了内存需求。
对于 GPipe 和 PipeDream,缓存激活的空间复杂度可以形式化为(无 gradient checkpointing):就气泡比例而言,PipeDream 和 GPipe 之间没有区别,由于 PipeDream 释放显存的时间更早,因此会降低对显存的需求。
4. 流水线总结
流水线并行特别适用于那些层与层之间可以清晰划分的模型,例如由多个 Transformer 层组成的语言模型。这种方法已经被成功应用于训练大规模的预训练模型,如 BERT、GPT 系列等。
(1)优点
内存优化:通过将模型分割成多个阶段并在不同的设备上处理,可以显著降低单个设备的内存需求,使得能够训练更大的模型。
计算效率:利用多个设备并行处理不同阶段的任务,可以大大提高计算效率。
扩展性:理论上可以无限扩展,只要设备足够,就能处理更大的模型。
(2)缺点
通信开销:不同阶段之间的数据交换需要额外的通信开销,这可能会成为性能瓶颈。
负载均衡:如果各个阶段的计算复杂度不一致,可能会导致某些设备空闲而其他设备忙于计算,造成负载不平衡。
同步问题:需要精确控制各个阶段的同步,以确保数据正确传递,这增加了实现难度。
天津联才科技发展有限公司是一家为企业提供互联网系统技术方案和网站建设服务的企业。公司创立于2015年,主要为政府、国企、国内上市公司、国外公司提供专业的品牌服务和技术开发服务。
自2015年成立以来,我们一直在帮助企业实现具有影响力的、行业特定的品牌、官网及软件系统解决方案。我们为企业提供从需求分析、功能规划、交互设计、原型设计、系统运维的整体软件开发技术解决方案。 联才科技始终关注有前景的软件开发集成框架和培养经验丰富的技术开发团队,为我们的客户提供优异的互联网解决方案。