大规模神经网络最新文献综述:训练高效DNN、节省内存使用、优化器设计

选自arXiv
作者:JuliaGusak等
机器之心编译
编辑:杜伟、泽南
在本综述论文中 , 研究者解释了不同技术的工作原理、评估和比较 , 还分析了一些实现这些技术的框架 。
现代深度学习和人工智能技术的发展涉及使用深度神经网络(DNN)来解决图像、视频、音频、自然语言处理、图像形式的内容生成等各种问题 , 或生成给定格式主题的文本等任务 。
俄罗斯斯科尔科沃科学技术研究所、法国里尔大学、波尔多大学、Inria等科研机构联合发表了一篇论文《SurveyonLargeScaleNeuralNetworkTraining》 , 它试图解决的问题是:若给定模型和计算平台的情形下 , 如何训练才是最有效率的 。 为了使训练高效 , 其必须可行 , 最大程度地利用资源的计算能力 , 在并行情况下 , 它不能让信息传输成为瓶颈 。 训练的效率从根本上取决于计算内核在计算资源(CPU、TPU、GPU)上的有效实现以及GPU之间和不同内存之间通信的有效实现 。
大规模神经网络最新文献综述:训练高效DNN、节省内存使用、优化器设计
文章图片
论文链接:https://arxiv.org/abs/2202.10435
在这两种情况下 , 人们为优化计算内核的算术强度 , 及有效实现硬件网络上的通信做了很多工作 。 对于使用者来说 , 已存在强大的分析工具来识别硬件瓶颈 , 并可用于判定本调查中描述哪些策略可用于解决算术强度、内存和控制交换数据量的问题 。
该综述研究涵盖了应对这些限制的通用技术 。 如果由于模型、优化器状态和激活不适合内存而无法先验执行计算 , 则可以使用内存交换计算(重新实现)或数据转移(激活和权重卸载) 。 我们还可以通过近似优化器状态和梯度(压缩、修剪、量化)来压缩内存使用 。
并行方法(数据并行、模型并行、流水线模型并行)也可以将内存需求分布到多个算力资源上 。 如果计算的算力强度不足以充分利用GPU和TPU , 一般是因为mini-batch太小 , 那么上述技术也可以增加mini-batch的大小 。 最后 , 如果使用数据并行引起的通信开销昂贵到拖累计算速度 , 则可以使用其他形式的并行(模型并行、流水线模型并行) , 梯度压缩也可以限制数据交换的数量 。
在本次调查中 , 研究者解释了这些不同技术是如何工作的 , 其中描述了评估和比较所提出方法的文献 , 还分析了一些实施这些技术的框架 。
下表1为文章讨论的不同技术及其对通信、内存和计算效率的影响 。
大规模神经网络最新文献综述:训练高效DNN、节省内存使用、优化器设计
文章图片
研究者根据目的区分了以下方法:首先讨论减少GPU内存使用 , 随后考虑对不适合GPU的模型使用并行训练 , 最后讨论为训练存储在多个设备上的模型而开发的优化器的设计 。
单GPU情况下减少内存使用
在前向传播期间 , 神经网络存储执行反向传播所需的激活 。 在某些情况下 , 这些激活会消耗大量内存 , 让模型无法训练 。 减少内存使用的主要方法有两种:重新实现(也称为checkpointing)和卸载 。
激活的重新实现
重新实现的策略仅在前向传播期间存储一小部分激活 , 并在反向传播期间重新计算其余部分 。 重新实现方法可以通过它们处理的计算图来区分 。 第一组来自自动微分(AD) , 它们为同构顺序网络(多层按顺序执行并具有相同计算和内存成本的DNN)找到最佳调度 。 第二组专注于过渡模型 , 例如异构序列网络(可以是由任意复杂模块组成的任何序列神经网络 , 如CNN、ResNet、一些transformer) , 它将解决方案从AD调整为异构设置 。
一些方法可以对一般计算图执行重新实现 , 尽管确切的计算成本可能指数级上升 , 如下表2所示 。