开云网址·(中国)官方网站大规模神经网络最新文献综述:训练高效DNN、节省内存使用、优化器设计
2024-03-26 次
开云网址·(中国)官方网站大规模神经网络最新文献综述:训练高效DNN、节省内存使用、优化器设计在本综述论文中,研究者解释了不同技术的工作原理、评估和比较,还分析了一些实现这些技术的框架。
现代深度学习和人工智能技术的发展涉及使用深度神经网络(DNN)来解决图像开云网址、视频、音频、自然语言处理、图像形式的内容生成等各种问题,或生成给定格式主题的文本等任务。
俄罗斯斯科尔科沃科学技术研究所、法国里尔大学、波尔多大学、Inria 等科研机构联合发表了一篇论文《Survey on Large Scale Neural Network Training》,它试图解决的问题是:若给定模型和计算平台的情形下,如何训练才是最有效率的。为了使训练高效,其必须可行,最大程度地利用资源的计算能力,在并行情况下,它不能让信息传输成为瓶颈。训练的效率从根本上取决于计算内核在计算资源(CPU、TPU、GPU)上的有效实现以及 GPU 之间和不同内存之间通信的有效实现。
在这两种情况下,人们为优化计算内核的算术强度,及有效实现硬件网络上的通信做了很多工作。对于使用者来说,已存在强大的分析工具来识别硬件瓶颈,并可用于判定本调查中描述哪些策略可用于解决算术强度、内存和控制交换数据量的问题。
该综述研究涵盖了应对这些限制的通用技术。如果由于模型、优化器状态和激活不适合内存而无法先验执行计算,则可以使用内存交换计算(重新实现)或数据转移(激活和权重卸载)。我们还可以通过近似优化器状态和梯度(压缩、修剪、量化)来压缩内存使用。
并行方法(数据并行、模型并行、流水线模型并行)也可以将内存需求分布到多个算力资源上。如果计算的算力强度不足以充分利用 GPU 和 TPU,一般是因为 mini-batch 太小,那么上述技术也可以增加 mini-batch 的大小。最后,如果使用数据并行引起的通信开销昂贵到拖累计算速度,则可以使用其他形式的并行(模型并行、流水线模型并行),梯度压缩也可以限制数据交换的数量。
在本次调查中,研究者解释了这些不同技术是如何工作的,其中描述了评估和比较所提出方法的文献,还分析了一些实施这些技术的框架。
研究者根据目的区分了以下方法:首先讨论减少 GPU 内存使用,随后考虑对不适合 GPU 的模型使用并行训练,最后讨论为训练存储在多个设备上的模型而开发的优化器的设计。
在前向传播期间,神经网络存储执行反向传播所需的激活。在某些情况下,这些激活会消耗大量内存,让模型无法训练。减少内存使用的主要方法有两种:重新实现(也称为 checkpointing)和卸载。
重新实现的策略仅在前向传播期间存储一小部分激活,并在反向传播期间重新计算其余部分。重新实现方法可以通过它们处理的计算图来区分。第一组来自自动微分(AD),它们为同构顺序网络(多层按顺序执行并具有相同计算和内存成本的 DNN)找到最佳调度。第二组专注于过渡模型,例如异构序列网络(可以是由任意复杂模块组成的任何序列神经网络,如 CNN、ResNet、一些 transformer),它将解决方案从 AD 调整为异构设置。
卸载(又被称为内存交换)是一种通过在前向传递期间将激活转移到 CPU 内存并将它们预取回 GPU 内存,以进行相应的向后计算来节省 GPU 内存的技术。
由于 CPU 和 GPU 之间 PCI 总线的带宽有限,必须优化选择传输激活开云网址,以及何时传输的选择。
在 vDNN [Rhu et al., 2016] 研究中,作者通过仅卸载卷积层的输入来遵循对 CNN 有效的启发式方法,然而它不能很好地推广到一般 DNN 上。另有研究 [Le et al., 2018] 考虑了激活生命周期来选择卸载的内容,并使用图搜索方法来识别插入卸载 / 预取操作的时刻。AutoSwap [Zhang et al., 2019] 通过为每个变量分配优先级分数来决定卸载哪些激活开云网址。
前面提到的很多方法也适用于卸载权重,这是因为卸载权重依赖于适用于任何张量的通用技术,比如 TFLMS、AutoSwap 或者 SwapAdvisor。
在模型并行化中,只需要传达激活信息,并且传输只发生在分配给不同处理器的连续层之间。本章节提到的工作如下表 4 所示。
如果多个小批量被 pipeline 化 ,则可以加快模型并行化中的执行速度,从而同时激活了多个训练迭代,具体可见 [Huang et al., 2019]。一旦在所有这些小批量上计算了前向和后向阶段,权重就会更新。这种方法实现起来相当简单,但也导致计算资源大部分处于空置状态。[Narayanan et al., 2019] 中提出的 PipeDream 方法仅强制前向和后向任务针对给定的小批量使用相同的模型权重,改进了这一训练过程。
有些论文专门处理具有挑战性的拓扑。比如,为了解决高通信成本和异构网络能力的问题,[Zhan and Zhang, 2019] 中的 Pipe-torch 提出了一种更新的动态规划策略,该策略假设计算和通信之间没有重叠。[Park et al., 2020] 中的 Pipe 解决了异构 GPU 的其他问题,采用的方法是将这些异构 GPU 分成虚拟 worker,并在每个虚拟 worker 中运行 pipeline 并行化,同时依赖 worker 之间的数据并行化。
为了进一步减少内存使用,低精度优化器(low-precision optimizer)有了用武之地。这些方法使用低精度格式拉力表示优化器状态以及状态的辅助向量。并且,误差补偿技术可以被用来维持跟踪统计的近似准确率。
另一种加速大规模深度学习模型的方法是减少节点之间的通信时间以及在适当局部最小值收敛所需的 epoch 数量。
关于通信成本的降低。在将梯度在计算节点之间迁移之前对它们进行压缩已经出现了不同的方法,具体有三类,分别是分裂(sparsification)、量化(quantization)和低秩(low-rank)方法。
最后一种降低通信成本的方法是低秩方法,其中在更新参数向量之前构建、迁移和使用梯度的低秩近似来恢复完整格式的梯度。低秩近似可以通过块能量(block power)方法或者最小化策略来构建,各自的代表工作分别是 Vogels et al., 2019 和
大批量训练。另一种加速优化器收敛的方法是针对每个批使用大量的样本。这种训练设置可以减少每个 epoch 中的迭代次数,并提升 GPU 的利用率。在 Goyal, P 等人 2017 年的论文《Accurate, Large Minibatch SGD》中,研究者提出使用线性缩放规则来更新学习率和批大小。这一设置可以稳定优化过程,并将模型的最终性能收敛至相同。
本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问。