深度学习已经在计算机视觉、自然语言理解、语音识别、信息检索等领域掀起了一场革命。然而,随着深度学习模型的不断改进,其参数数量、延迟时间、训练所需资源等都有了显著增加。因此,关注模型的度量也变得很重要,而不仅仅是它的质量。我们提出深度学习中的效率问题,随后对模型效率的五个核心领域(包括建模技术、基础设施和硬件)以及其中的开创性工作进行了全面调研。我们还提供了一个基于实验的指南和代码,供从业者优化他们的模型训练和部署。我们相信,这是在高效深度学习领域的第一次全面综述,涵盖了从建模技术到硬件支持的模型效率景观。我们的希望是,这个综述将为读者提供心理模型和必要的理解,应用通用的效率技术,立即获得显著的改进,并促使他们的想法,进一步的研究和实验,以实现额外的收益。
https://www.zhuanzhi.ai/paper/0f8f07193a10367d2246a95c3c7785bb
引言
在过去的十年里,利用神经网络进行深度学习一直是训练新的机器学习模型的主要方法。它的崛起通常归功于2012年的ImageNet竞赛[45]。那一年,多伦多大学的一个团队提交了一个深度卷积网络(AlexNet[92],以首席开发人员Alex Krizhevsky的名字命名),其表现比排名第二的好41%。这一开创性工作的结果是,人们竞相创造具有越来越多参数和复杂性的更深度网络。一些模型架构,如VGGNet [141], Inception [146], ResNet[73]等,在随后几年的ImageNet竞赛中连续打破了先前的记录,同时它们的占用空间(模型大小,延迟等)也在增加。
这种效应在自然语言理解(NLU)中也得到了关注,其中主要基于注意力层的Transformer[154]体系结构刺激了通用语言编码器(如BERT[47]、GPT-3[26]等)的开发。BERT在发布时击败了11个NLU基准测试。GPT-3还通过其API在行业的多个地方得到了应用。这些域之间的共同方面是模型占用空间的快速增长(参见图1),以及与训练和部署它们相关的成本。
深度学习研究一直专注于提高现有SOTA性能,图像分类、文本分类等基准的逐步改进与网络复杂度、参数数量、训练网络所需的训练资源数量、预测延迟等的增加有关。例如,GPT-3包含1750亿个参数,仅训练一次迭代([26])就要花费数百万美元。这排除了试验/尝试不同超参数组合的成本,这在计算上也是昂贵的。
虽然这些模型可以很好地执行它们所接受的任务,但它们可能不足以在现实世界中进行直接部署。在培训或部署模型时,深度学习从业者可能面临以下挑战。
可持续的服务器端扩展: 训练和部署大型深度学习模型的成本很高。虽然训练可能是一次性成本(或者如果使用的是预先训练的模型,则可能是免费的),但是部署并让推理运行很长一段时间,在服务器端RAM、CPU等方面的消耗仍然是昂贵的。对于谷歌、Facebook、亚马逊等机构来说,数据中心的碳足迹也是一个非常现实的问题,这些机构每年在数据中心的资本支出上都要花费数十亿美元。
终端设备上部署: 某些深度学习应用程序需要在物联网和智能设备上实时运行(模型推断直接发生在设备上),原因有很多(隐私、连通性、响应性)。因此,必须为目标设备优化模型。
隐私和数据敏感性: 当用户数据可能很敏感时,能够使用尽可能少的数据进行训练是至关重要的。因此,使用一小部分数据高效地训练模型意味着所需的数据收集较少。
新的应用: 某些新的应用提供了新的约束(关于模型质量或足迹),现有的现成模型可能无法解决。
模型爆炸: 虽然一个单一的模型可能工作得很好,但为不同的应用在相同的基础设施(托管)上训练和/或部署多个模型可能会耗尽可用资源。
高效深度学习
围绕上述挑战的共同主题是效率。我们可以进一步细分如下:
推理效率: 这主要处理部署推理模型(计算给定输入的模型输出)的人会问的问题。型号小吗?它快吗,等等?更具体地说,模型有多少参数、磁盘大小、推断期间的RAM消耗、推断延迟等。
训练效率: 这涉及到训练模型的人会问的问题,比如模型需要多长时间来训练?有多少设备?模型能适应内存吗?等。它可能还包括这样的问题,模型需要多少数据才能在给定的任务上实现期望的性能?
在本节中,我们将介绍mental模型来思考与高效深度学习相关的算法、技术和工具的集合。我们提出在五个主要领域构建它们,前四个集中在建模上,最后一个围绕基础设施和工具。
(1) 压缩技术: 这些是用于优化模型架构的通用技术和算法,通常是通过压缩层数。一个经典的例子是量化[82],它试图压缩一层的权矩阵,通过降低其精度(例如。(从32位浮点值到8位无符号整数),质量损失最小。
(2) 学习技术: 这些算法专注于不同的训练模型(做出更少的预测错误,需要更少的数据,收敛更快等)。如果需要的话,通过削减参数的数量,可以将改进的质量转换为更小的内存占用/更高效的模型。学习技术的一个例子是蒸馏[75],它通过学习模仿较大的模型来提高较小模型的准确性。
(3) 自动化: 这些是使用自动化改进给定模型的核心度量的工具。一个例子是超参数优化(HPO)[61],优化超参数有助于提高精度,然后可以用较少参数的模型进行交换。类似地,体系结构搜索[167]也属于这一类,其中体系结构本身进行了调优,搜索有助于找到一个模型,该模型既优化了损耗/准确性,又优化了一些其他指标,如模型延迟、模型大小等。
(4) 高效架构: 这些是从头开始设计的基本块(卷积层、注意力等),是对之前使用的基线方法(分别是完全连接层和RNN)的重大飞跃。例如,卷积层引入了参数共享用于图像分类,避免了为每个输入像素学习单独的权值,也使其对过拟合具有鲁棒性。同样,注意力层[21]解决了Seq2Seq模型中的信息瓶颈问题。这些架构可以直接用于提高效率。
(5) 基础设施: 最后,我们还需要基础设施和工具来帮助我们构建和利用有效的模型。这包括模型训练框架,如Tensorflow[1]、PyTorch[119]等(以及部署高效模型所需的工具,如Tensorflow Lite (TFLite)、PyTorch Mobile等)。我们依赖于基础设施和工具来利用高效模型的收益。例如,要获得量化模型的规模和延迟改进,我们需要推理平台支持量化模式下的常见神经网络层。