爆火的大规模深度学习模型是如何有效训练的?首篇综EBET易博官网述一探究竟!

  新闻资讯     |      2023-09-21 13:59

  近年来,深度学习领域取得了重大进展,特别是在计算机视觉(CV)、自然语言处理(NLP)和语音等领域。根据大量数据训练的大规模模型的使用为实际应用、提高工业生产力和促进社会发展带来了巨大的希望。然而,它极易受到不稳定的训练过程和对计算资源的严格要求的影响。随着对计算能力自适应的要求越来越高,尽管许多研究在一定程度上探索了高效训练领域,但对训练大规模深度学习模型的通用加速技术的全面总结/指导仍然备受期待。本文对训练加速的一般技术进行了详细的回顾。论文考虑了基本更新公式,并将其基本组成部分分为五个主要角度:(1)“以数据为中心”:包括数据集正则化、数据采样和以数据为核心的课程学习技术,这可以显著降低数据样本的计算复杂度;2)“以模型为中心”:包括基础模块的加速、压缩训练、模型初始化和以模型为核心的课程学习技术,重点是通过减少参数计算和提供更好的初始化来加速训练;3)“以优化为中心”:包括学习率的选择、大批量的使用、有效目标的设计和模型平均技术,注重训练策略,提高大型模型的通用性;4)”预算训练”:包括在源约束情况下的一些独特的加速方法,例如对总迭代的限制;5)“以系统为中心”:包括一些高效的分布式框架和开源库,为上述加速算法的实现提供足够的硬件支持。通过介绍这种全面的分类法,本文的调查提供了一个全面的综述,以了解每个组件内的一般机制及其联合交互作用。同时进一步对通用加速技术发展的未来工作进行了详细的分析和讨论,这可能会激励我们重新思考和设计新的高效范式。总的来说,我们希望这项调查将成为普遍有效训练的宝贵指南。

  近年来,大规模深度学习模型的高效训练已成为机器学习的一个关键研究领域。虽然在这一领域取得了重大进展,但现有的许多研究都集中在特定的模型架构或服务于特定的社区。相比之下,本文的研究对任何大规模深度学习模型的实际加速技术进行了全面的回顾,与任务或模型架构无关。从实践效率的角度来看,论文认为高效训练主要集中在两个明确的目标上:

  强烈推荐!自动驾驶与AI学习社区:欢迎加入国内首个自动驾驶开发者社区!这里有最全面有效的自动驾驶与AI学习路线(感知/定位/融合)和自动驾驶与AI公司内推机会!

  求职社群来了!面向自动驾驶与AI相关的算法/开发求职,面试题目/面经/日常吐槽应有尽有!

  表1总结了符号及其相应的研究领域。通过细化和拆分组件的不同角色,论文将先前的工作根据其固有的启发式见解和理论场景分为5大类。每个对应于分类组下的计算效率的优化目标。此外本文对上述组件进行了细化,以对当前用于训练具有实际实现可行性的大型模型的通用加速技术进行分类。具体而言,它们是:

  以数据为中心的高效训练:在深度学习中,预期与训练样本的分布之间往往存在差距。这可以提高训练中后期的测试准确性,尽管在早期阶段表现有效。为了解决这个问题并提高泛化性能,采用了以数据为中心的方法,通过有效的数据扩充和正则化策略来扩展训练集的样本容量。它需要额外的预处理计算来增强多样性,并保持更高的稳定性,从而在现实世界的应用中获得更好的泛化性能。同时,为了实现有效的加速并进一步提高模型的通用性,以数据为中心的方法研究了随机优化过程中选择关键子集的有效采样技术。它有效地减少了计算梯度所需的样本数量。此外,它还可以保护模型在训练中不过度拟合那些已经学习得足够好的不重要的样本或数据。最近的进展表明,课程学习提供了一个渐进的过程,并输出了有效的训练。它在训练的早期阶段使用正则化程度较低的低分辨率样本,并逐渐将其恢复为高质量样本。总之,以数据为中心的方法的核心考虑因素是如何在不影响性能的情况下降低数据处理需求;以模型为中心的高效训练:深度模型是一个从数据域到GT的精细映射函数。过去的工作已经探索了许多成熟的架构来构建用于高效训练的网络,例如基于卷积的神经网络(CNN)、多层感知器(MLP)和Transformer模型。以模型为中心的方法更多地关注DNN的计算复杂性,通过高效的架构近似、压缩和高效的初始化来获得更好的通用性。这些方法侧重于减少DNN的参数大小,同时保持良好的性能。具体而言,架构近似侧重于采用简化的运算符组合,以降低训练中的计算成本。它期待着探索通用加速的基本模块的表达替代方案。压缩涉及低精度计算和稀疏训练的效率,这也需要在硬件实现上得到充分支持。模型初始化注重寻找具有更高稳定性和通用性的更好的初始状态,这可以有效地加快收敛速度,防止训练过程在早期崩溃。总之,以模型为中心的方法为降低深度模型的计算复杂度以进行高效训练提供了一种很有前途的方法,它具有很强的实用性,并且可以在任何深度学习框架中轻松实现;以优化为中心的高效训练:为了提高优化效率,论文总结了三个主要因素,即学习率、batch大小和优化目标。在不同阶段正确选择学习率和衰减策略是深度网络训练中的一个关键问题。然而,要找到一种适用于不同模型和优化器的通用方法是很有挑战性的。因此,以学习率为中心的方法旨在开发高效灵活的策略,以高效稳定地训练模型。第二个因素,批量大小,在优化中也起着关键作用。借助GPU设备的并行计算能力,增加单个mini-batch中的样本数量可以提高训练效率,尤其是在计算资源充足的情况下。因此,以batch大小为中心的方法通常侧重于采用大型小型批量训练来提高优化速度。从优化的角度来看,我们总是努力实现具有高度稳定性的目标,这是以目标为中心的方法最关心的问题。这些方法侧重于优化目标,这些目标提供了在数据分布和模型架构方面具有鲁棒性的概括。总之,以优化为中心的方法研究了训练过程中的高效迭代计算,为高效训练提供了坚实的保证;预算高效的训练:预算训练是一种在实际训练中考虑到可用资源的方法。它主要关注源约束场景中的训练效率,其中计算资源是有限的。预算训练的主要目标是确保高效和稳定的训练,同时在给定的限制条件下最大限度地发挥模型的潜力。这种方法可以在训练的早期阶段取得重大成果。通过采用预算训练,研究人员和从业者可以充分利用可用资源,避免将其浪费在低效的模式或训练程序上。这种方法还可以促进更实用的模型的开发,并适用于资源往往有限的现实世界应用程序;以系统为中心的高效训练:以系统为中心的方法侧重于在硬件支持下的实际实现,可以将算法设计转化为真正的可执行项目。训练大规模模型通常采用多节点多设备环境来实现并行计算。它主要涉及设计底层逻辑,以解决跨设备通信中的瓶颈问题,并有效地协调整个训练过程。已经开发了几个开源框架,以显著加快深度网络的训练。为了有效地利用分布式训练,训练过程被分配到较小的计算任务中,这些任务在不同的节点或设备上并行执行。这些节点相互通信以交换梯度更新并同步整个训练过程。这种分布式系统能够训练大型数据集和无法在单机上执行的复杂模型。已经开发了几个开源分布式培训框架,如TensorFlow、PyTorch和Horovod。这些框架实现了在多节点多设备集群上的高效分布式训练,并显著减少了大规模深度学习模型的训练时间。

  总之,本文的调查回顾了高效训练的一般训练加速。在“以数据为中心”、“以模型为中心”和“以优化为中心”以及“预算训练”部分,本文主要侧重于从算法设计和方法论的角度进行综合研究,而在“以系统为中心”部分,则侧重于从范式创新和硬件支持的角度进行实际实施。本次调查的主要贡献如下:

  从“数据”、“模型”、“优化”、“预算训练”和“系统”的角度回顾了训练大型模型的一般加速技术,总结了它们的技术路线和每个组件的实施,这有助于为无任务和无模型的高效训练提供坚实的指导;

  比较了训练加速中每个组成部分的优势和劣势,并展示了它们的见解和互动,这可能会激励重新思考训练大规模深度学习模型的高效范式的设计;

  论文对每一条技术路线及其在实际场景中的主要挑战进行了全面分析,可以为其未来的发展提供指导。

  本节首先介绍了大规模深度学习模型中的几个基本模块。然后介绍了一些常用的数据集,并描述了本次调查中的几种符号。

  本综述重点关注普通深度学习主干的高效训练。它们中的大多数是由基本经典模块的复杂组合堆叠而成的,主要包括MLP(线性模块)、CNN(卷积模块)和Transformer(多头注意力模块)。在这一部分中,我们只提到它们的一般概念。

  不断增加的参数数量和不断增长的数据集大小都使得大规模深度学习模型的训练过程更加耗时,这也要求开发更先进的框架和系统,以进一步加快训练过程并降低成本。下面首先介绍几种常用的大规模深度学习模型和相应的训练数据集。

  大模型:自从Vaswani等人在2017年提出Transformer以来,它已经成为NLP中的主导模型,导致了大型语言模型(LLM)和ViT的蓬勃发展。几个(预训练的)Transformer模型展示了高效训练的发展,包括模型结构的改进和高效训练技术的应用。对于NLP,自GPT(117M个参数)以来,模型参数的数量有快速增长的趋势,GPT是第一个预训练的Transformer,它由Transformer解码器构建,并在BookCorpus上无监督预训练。与GPT的结构不同,BERT(340M)由多层双向Transformer编码器组成,可以捕捉位置之间的关系。GPT-2(1.5B)的参数比GPT-1多得多,并且在更大的数据集上进行训练。使用大规模网络训练语言模型已被证明是一种非常有效的策略,数据集的增长、高效的模型结构以及硬件和软件的突破使其成为可能,激励了Turing-NLG(17.2B)、GPT-3(175B)等模型,Megatron-Turing NLG(530B)和Switch Transformer(1.6T)[60],以进一步增加参数数量。至于CV,ViT(86M表示ViT Base)是Transformer在该领域应用的里程碑。最近,受不断增大Transformer驱动的大型语言模型突破的启发,Dehghani等人提出了一种高效稳定的训练方法,将ViT扩展到22B参数(ViT-22B)。在跨模态或多模态领域,CLIP通过联合训练图像编码器和文本编码器,将分类任务转化为图像-文本匹配任务,其中ResNet-50或ViT作为视觉骨干,Transformer作为语言骨干。它还与DALLE一起发布,这是GPT-3的12B参数版本,能够基于文本图像对的预训练从输入文本生成图像。上述大多数模型都是Bommasani等人定义的基础模型之一或基于基础模型,即在广泛的数据上训练的模型,通常使用缩放的自监督,并且可以适应(例如微调)广泛的下游任务。随着Wang等人提出的通用大规模模型BEiT-3,他们指出,不同领域对大规模模型的研究正逐渐接近“大收敛”:首先,Transformer已经成为一种常见的骨干架构,其次,生成预训练已经成为最重要的自监督学习方法,第三,放大数据和模型大小进一步提高了大型模型的性能。尽管模型多种多样,但即使是最庞大的模型也由线性、卷积和注意力层的基本模块组成。因此,论文总结了训练大规模深度学习模型的通用加速方法和技术,学习了主流的预训练基础模型和其他一些不限于自监督训练的工作。

  大型数据集可能包含经过过滤的网页、书籍、文章、Wiki、新闻、源代码和社交媒体对话。该模型可以基于数据集不同部分的数量和质量加权采样进行学习。在计算机视觉中,ImageNet是一个著名的注释照片的大型数据集。它最常用的子集,ILSVRC(ImageNet大规模视觉识别挑战),包含超过100万张跨越1000个对象类的图像。作为预训练模型数据集的一个例子,最近的ViT-22B是在JFT的一个版本上训练的,该版本扩展到大约4B个图像。

  大规模模型的最新进展大放异彩,而它们对数据集的需求急剧增加。大量的数据样本被用来驱动训练过程并获得出色的性能。因此,以数据为中心的研究对于实际加速至关重要。数据处理的基本作用是在没有额外标记的情况下有效地增加数据样本的多样性。数据注释往往过于昂贵,负担不起,这突出了以数据为中心的领域研究的重要性。同时,它还侧重于提高数据样本的并行加载效率。

  本节将所有这些高效的数据处理称为“以数据为中心”的方法,这些方法将显著提高训练大规模模型的性能。并从以下角度回顾和研究技术:

  :数据正则化是通过一系列变换来增强原始数据样本多样性的预处理技术。它等效地改进了训练样本在特征空间中的表示,而不需要额外的标记信息。高效的数据正则化已被广泛应用于训练过程中,并显著提高了大型模型的泛化性能;

  :数据采样是从大批量中选择样本子集以执行更新的有效方法。采用小批量训练有利于忽略当前批次中那些不重要或不好的样本。通常,采样数据更为重要,可以产生与全批训练相当的性能。每次迭代的概率随着训练过程逐渐调整,以确保无偏采样;

  :课程学习研究训练过程中不同阶段的渐进训练设置,以降低总计算成本。一开始,使用低质量数据集进行训练就足以学习低级特征。然后,采用高质量的数据集(更多的扩充和复杂的预处理方法)逐渐有助于学习复杂的特征,并实现与整个训练相同的精度。

  在一个大的、高质量的数据集上进行训练将比在一个小的、组织不良的数据集中进行训练产生更好的性能。对于个体研究人员来说,手动收集和处理大数据往往不切实际,他们需要选择一些开源数据集,并考虑将多领域、多语言的数据集相结合,以提高数据的多样性,从而提高模型的泛化能力。因此,可能需要应用相应的预处理和清理方法,如重复数据消除(通常使用位置敏感哈希)、去除具有较少标记的文档以进行去噪等。此外,研究高效的数据集正则化有助于提高大规模模型的训练性能和通用性。数据正则化的目的是减少过拟合,使模型更容易适应,并在不太影响训练过程的情况下提高模型的泛化能力。然而,它通常会引入额外的计算成本,有时会成为训练过程中的瓶颈。为了进行有效的训练,从一系列技术中进行选择和测试并决定使用哪种技术至关重要。

  数据增强是高效训练的另一个重要正则化策略。通过更好地利用原始数据集,如变换后的图像,人为有效地增加训练数据,以提高模型的泛化能力。甚至一些反直觉的数据扩充方法也能有效地提高模型的性能。我们注意到,先进的数据增强方法提高了鲁棒性,但也带来了额外的负载,而且它们通常比较小的模型更适合参数更多、尺寸更大、训练时间更长的模型。特别是,当训练过程的其他部分存在瓶颈,并且执行数据增强计算不会影响最终时间时,可以添加数据增强方法来增强效果并提高吞吐率。

  在训练过程中,对一批批样本进行更新,并且对一批样本中的所有样本一视同仁。然而,这可能会导致训练过程在正常的例子上花费更多的时间或信息较少的例子。为了加快训练并避免这个问题,可以采用数据采样,包括重要性采样、设计新的目标等,以实现数据效率。重要性抽样是一种蒙特卡罗方法,它涉及从不同的分布中进行抽样,以帮助评估特定分布的财产并减少方差。在随机梯度下降中,重要性抽样侧重于对模型参数影响最显著的样本,这降低了梯度估计的方差。当它是固定的或当批量大小增加时,这种方法有助于降低计算成本。重要的是选择一个适当的重要性抽样分布,准确地表示原始数据分布,以避免引入偏差。

  基于采样的加速方法侧重于直接减少计算中涉及的数据总量。这些研究间接验证了训练中的数据冗余。换句话说,训练所涉及的数据量与总数据集中数据量的比率成为衡量样本利用效率的重要指标之一。如何设计高利用率和低计算成本的算法将在加速过程中继续探索。

  课程学习基于从简单任务开始学习并逐渐增加任务复杂性的直觉。这种方法也以各种方式应用于预训练,并在许多作品中表现出良好的加速性能。Wu等人表明,当训练时间预算有限或存在嘈杂数据时,课程学习可以提高成绩。在应用课程学习中,更重要的挑战之一是找到一个合适的标准来判断样本的难度。

  本节将从以数据为中心的角度回顾高效的培训技术。我们关注数据集正则化的数据效率,包括增强和预处理以增强其多样性,从大批量(或整个数据集)中采样有效子集以提高训练效率,以及课程学习方法以缓解训练早期的昂贵消耗。

  数据正则化是在没有额外标记的情况下扩展数据样本多样性的有效方法。由于变换复杂且随机,数据集相当于被多次扩展,这有助于训练具有更好泛化性能的大规模模型。然而,过度使用数据正则化会带来巨大的偏差,导致质量低下。随着越来越多的正则化方法可用,选择有效的组合是很重要的。在数据采样方面,它可以通过小批量训练实现相同甚至更好的性能。通过精心设计的算法进行数据采样可以有效地增加训练模型的容量。通常,在训练过程开始时,模型从性能较差的样本中获益更多。忽略好的样本有助于加快学习不同标记样本特征的平衡。而且,课程学习为处理数据集提供了一个渐进的管道。它允许以较少的增强来馈送低分辨率数据以提取粗粒度特征,并逐渐提高数据质量以捕获细粒度特征。它在保持高性能的同时实现了实际的加速。

  设计高效的模型架构一直是深度学习领域最重要的研究之一。一个优秀的模型是一个有效的提取器,可以投影到易于分离的高级特征中。与其他特别关注那些高效的新型结构的工作不同,我们以模型为中心的研究更关注普通模块的平等替代方案,这些模块以可比的性能实现了更高的效率。几乎所有的大型模型都是由小型模块或层组成的。因此,我们的综述可以为有效地训练大型模型提供良好的指导。

  :随着深度模型中参数的快速增加,它也引入了巨大的计算消耗。因此,实现一种有效的替代方案来近似香草架构成为一个热门话题。这种替代不仅是数值计算的近似,还包括深层模型中的结构简化和融合。在这一部分中,论文根据不同的架构来区分现有的加速技术,并展示它们的见解;

  :压缩一直是计算加速的研究方向之一,在数字信号处理(多媒体计算/图像处理)中发挥着关键作用。传统的压缩由两个主要分支组成:量化和稀疏性。本文将详细介绍他们现有的成就以及对深度训练的贡献;

  :在现有的理论分析和实际场景中,模型参数的初始化都是一个非常重要的因素。糟糕的初始化状态甚至会导致整个训练在早期训练阶段崩溃和停滞,而良好的初始化状态有助于在平稳的损失环境中加快整个收敛。在这一部分中,论文主要从模型初始化的角度研究评估和算法设计;

  :从以模型为中心的角度来看,课程学习通常开始在大规模模型中训练一个小模型或部分参数,并逐渐将其恢复到整个架构中。它显示了在没有显著负面影响的情况下加速训练过程的有利能力。在这一部分中,本文回顾了其在培训过程中的实施和效率。

  本文调查的技术是采取有效的替代方案来加速对现有模型模块的计算。作为大型模型的基石,每个基本模块都有不同的财产,应该单独研究。本节主要研究以下模块的效率,这些模块广泛用于大型模型的构建。本综述从以模型为中心的角度清楚地指出了通用加速技术的效率。架构效率主要包括:

  压缩也是目前最主流的加速方法之一。从整个训练过程的时间消耗来看,大部分时间都花在了推理(约30%)和反向传播(约60%)上。提高计算效率可以显著加快整个训练过程。量化是一种有效的方法。减少原始数据所占用的位数可以节省计算设备上的推理时间。另一种方式是稀疏训练。大量研究表明,大型神经网络在训练过程中存在参数冗余和梯度冗余,这意味着可以适当降低几个参数的更新频率。在这一部分中,将重点关注那些在整个训练过程中保持参数总数的参数。

  量化加速训练的基本原理是,如果参数和输入转换为低精度存储,深度网络将消耗更少的内存和计算。然而,它总是在量化和准确性之间进行权衡。一系列研究调查了量化和准确性之间的联系,并提出了如何在实践中最大限度地保持训练准确性。

  目前,常见的算法默认使用标准的FP32浮点类型进行参数的推理和反向传播。这种数据类型可以满足当前深度训练中的高精度要求,尤其是在大数据集和庞大模型上。相应地,半精度数据类型FP16保持5 bits和10 bits,并成为当前训练中FP32的替代品。在一些评估中,它甚至可以在不到一半的常规训练时间内接近基于单精度的计算结果。然而,有限的精度往往面临梯度溢出,尤其是在训练的早期阶段,这会导致NaN的core dump。而且,低精度的计算对训练过程的后期阶段有更大的影响。为了平衡效率和准确性,建议在深度训练中广泛使用AMP(自动混合精度)。它利用经验主义对一些不重要的参数使用FP16,对其他参数使用FP32,以获得最佳性能,这是目前最有效的加速技术之一。

  稀疏计算需要硬件的支持,否则,在实际场景中无法实现加速。总之,稀疏加速训练的主要方法集中在以下几个方面:

  :梯度决定了每次迭代中参数的偏移量。对于更新中梯度值较小的参数,其偏移量也较小。与其他参数相比,暂停它们的更新不会影响训练性能。因此,通过更新稀疏梯度来减少反向传播的计算可以有效地加速训练;

  :参数冗余是深度模型中非常常见的问题之一。许多研究指出,在不同的数据样本上,选择性更新往往更为普遍。因此,在训练中冻结部分参数的基于修剪和重构的技术可以极大地节省前向和后向过程的时间和内存成本;

  。输入样本中存在大量冗余。通常,在一个小批量数据中,对不同类别的样本进行不同程度的训练。批量维度的降维可以通过一些独特的采样方法来实现,例如重要性采样。这允许支持更大的批量以加速整个训练过程;

  :特征是中间层输入样本的函数映射,它们占用大量的计算和内存消耗。特征上也有很大的冗余。通过聚合或额外注意力机制聚合中间层的特征可以有效地加速深度网络上的训练。

  对模型初始化的研究表明,任意的初始化策略可能会导致收敛缓慢,甚至在训练开始时完全停滞,尤其是在大模型上。因此,适当的初始化可以用更少的有效训练做更多的事情。先前的几项研究从不同的角度揭示了初始化和训练之间的关系,并提出了一系列有效的方法来更好地初始化模型。预训练技术的最新进展也表明,更好的初始状态有助于理解无任务的一般知识,并提高下游任务的性能。在这一部分中,我们主要关注有效的初始化方法和预训练技术。

  :模型初始化在从头开始有效地训练模型方面发挥着重要作用。Sutskever等人[237]发现,模型初始化和动量更新在训练中都很重要。它们表明,如果模型从初始化不良的状态开始,训练过程可能会因动量更新而失败。先前的研究表明,随机初始化引起的失败可能来自深层特征的方差缩小。

  :预训练微调模式是实现下游任务优异性能的有效范例。它来自迁移学习,它允许在广泛的数据集上训练大规模模型,以学习良好的特征提取器。然后,它冻结主干并微调部分参数以获得良好的性能。预训练阶段可以被认为是为下游任务寻找更好的初始化状态。最近的进展在预训练中给预训练带来了耀眼的光芒。

  以模型为中心的课程学习主要关注规避大规模模式中的训练困难。它探索了大型模型在训练早期的小容量,并建议相应地减少计算中涉及的参数数量。随着训练的进行,模型的容量逐渐增加,所有参数都被恢复以完成整个训练过程。它在高效训练方面显示出巨大的潜力,尤其是在大型模型上。

  本节将重点讨论如何在特定的大型模型中实现高效的训练加速。我们从基本训练过程的角度考虑加速的一般方法,包括采用替代的高效架构来降低计算复杂度,压缩参与训练过程的张量以消耗更少的内存和计算成本,以及用于快速收敛的高效模型初始化方法。

  在模型架构方面,本文的重点是审查基本模块的有效替代方案,而不是探索设计有效的模型,包括基本组件线性、卷积、注意力、激活和归一化。简单的结构通常对参数更敏感。当采用低参数替代方案时,线性层和卷积层等基本模块的性能很容易受到影响。这限制了实际加速比的上限。利用有效的替代计算比减少参数在通用性和稳定性方面表现得更好。然而,设计等效备选方案是一项非常困难的任务,主要集中在其计算的近似性上。另一个主流解决方案是压缩训练。本文专注于量化和稀疏方法,这些方法在实践中被证明是有效的,现在被广泛用于大型模型训练或是基础设计。不同的模块对量化的影响表现出不同的敏感性。因此,在选择低精度存储和计算时,可以优先考虑那些具有模糊错误的模块,例如激活层。稀疏性是加速训练的一个很好的实现,同时它需要严格的硬件支持来提高其实际效率。GPU的并行单元不能直接应用稀疏计算,这是训练过程中的主要缺陷。在模型初始化方面,良好的初始状态保证了训练大规模模型的稳定性和效率。最近的进展也表明,预训练有很大的潜力来获得更好的表现。为了缓解预训练中的巨大压力,模型层面的课程学习发挥着关键作用。它允许训练过程从浅层模型或部分参数开始,并逐渐恢复整个模型。这项技术将在其他领域产生巨大的推动作用,以提高培训效率。

  :具有几个单独层的加速备选方案的累积误差很容易导致大的偏差。将一些复杂的模块作为一个整体来设计它们的替代方案可以缩小输出误差;

  :相邻步骤中运算符的组合可以极大地提高计算效率和精度,例如FlashAttention。这些设计有效地利用了硬件的特性,提高了训练的吞吐率,从而提高了速度;

  :可训练的高效初始化和预训练一样,是未来一个很有前途的研究方向。探索模型初始化在不同模块上的相互作用也是一个值得研究的方向,这将为理解超大型模型训练的本质提供有效的指导;

  :设计新的渐进式时间表来指导大型模型的训练过程,这可能是未来一项很有前途的研究。一个关键问题是探索模型大小与训练所需数据样本之间的关系,这可能为理解课程学习提供坚实的见解。

  优化方法的加速方案一直是机器学习领域的一个关键研究方向。在达到最佳条件的同时降低复杂性一直是学术界追求的目标。近年来,高效、强大的优化方法在训练深度神经网络方面取得了重要突破。

  作为机器学习中广泛使用的基本优化器,SGD型优化器成功地帮助深度模型实现了各种实际应用。然而,随着问题变得越来越复杂,它总是更有可能陷入局部极小值,并且不能稳定地推广。为了解决这些困难,Adam及其变体被提议在更新中引入自适应性。这种做法在大规模网络训练中取得了良好的效果,例如BERT、Transformer和ViT模型。除了所设计的优化器本身的性能外,加速训练技术的组合也很重要。我们从优化的角度将当前关于加速训练的思考总结为以下几个方面:

  :学习率是非凸优化的一个重要超参数,也是当前深度网络训练的关键。像Adam及其变体这样的自适应方法已经在深度模型方面取得了出色的进展。一些基于高阶梯度调整学习率的策略也有效地实现了加速训练。学习率衰减的实施也会影响训练过程中的表现;

  :采用大batchsize将有效提高训练效率。它直接减少了完成一个epoch训练所需的迭代次数。同时,由于其额外的内存利用率和通信瓶颈,处理一个大批量比处理具有相同样本总量的几个小批量花费更少的成本;

  :Vanilla ERM在最小化问题中发挥着关键作用,这使得许多任务能够被实际应用。随着对大型网络的深入研究,一些工作更加关注优化和泛化之间的差距,并提出了减少测试误差的有效目标。他们从不同的角度解释了泛化的重要性,并在训练中对其进行了联合优化,这大大提高了测试的准确;

  :加权平均是一种提高模型通用性的实用技术。它考虑了具有一组冻结或可学习系数的历史状态的加权平均值,这显著加速了训练过程。

  学习率是控制训练中更新的最重要的超参数之一。它应该通过联合考虑优化器和批量大小来精心选择。从适应政策的实施角度来看,论文将其分为三种类型,比例系数、元素自适应和基于矩阵的预条件器。它们分别采用单个值来衰减学习延迟,采用向量来平衡梯度,以及采用矩阵来搜索最优。

  适当地采用大批量训练可以减少时间消耗,提高存储利用率,生成平滑的梯度,并保持稳定的训练过程。然而,过大批量的训练会适得其反,这可能会极大地损害训练的稳定性,甚至导致分歧,尤其是在大型模型上。Keskar等人表明,小批量训练倾向于在离初始状态更远的地方收敛到平坦的极小值,而大批量训练则倾向于在初始状态附近收敛到尖锐的极小值并在测试数据集上推广得更差。因此,学习如何在保证性能的同时进行大批量训练是一项重要的研究。

  大批量训练是一种广泛使用的加速技术,但它需要选择细粒度的超参数,如学习率,以防止陷入意外的局部极小值[85]。如Golmant等人所述,在特定状态(关键批次)后增加批次大小会导致计算效率低下,并且无法加快收敛速度。同时,如果参与训练的设备之间的聚合批量太小,则在通信期间会发生额外的等待冲突。因此,随着训练数据和规模的不断增加,为了进一步在大规模模型上实现高效训练,大批量的自适应仍然是一个值得进一步探索的热门话题。

  目标始终是优化中最重要的因素之一,这是我们想要针对任务进行优化的原则。优化目标直接决定了最终目标和训练效率。在这一部分中,回顾了以优化为中心的加速技术,这些技术得益于设计新目标的考虑。本文总结了旨在构建方程(3)中的更新向量G的方法,而不是狭义的目标,以提供全面的综述。

  客观改进考虑了普通企业风险管理中更多的见解和实际问题。如何表示泛化差距和错误正成为未来值得研究的研究课题。结合经验评估方法,在合理的搜索空间内,使用大规模搜索来找到最优优化器显示出显著的效率。

  模型平均是通过几个历史状态生成具有泛化效率的模型的重要技术。生成的模型通常显示出比训练模型更高的测试精度。平均模型不需要训练,仅用于测试,这不会在计算和内存利用方面带来额外成本。

  模型平均值来自Anderson acceleration,在随机非凸优化方面取得了良好的进展。Scieur等人提出了RNA(正则化非线性加速度),通过一组优化的权重来聚合历史状态,这些权重通过正则化项的最小化来解决。它搜索每个状态的缩放系数,并将它们合并为下一个初始点。EMA(Exponential Moving Average,指数移动平均)是一种简单的模型合并技术,它使用指数衰减权重来计算每个先前训练步骤中参数的加权平均值。它显著提高了训练中期的测试准确性。

  模型平均有助于在训练过程中接近一组更好的广义状态。尽管这种方法不直接涉及优化更新,但它们在通用性方面的显著改进有助于提前停止具有可比参数的训练。它大大减少了所需的训练时间。在高效训练领域,它在实际应用中是一项很有前途的研究。

  本文将从以优化为中心的角度回顾一般的加速技术。主要关注选择有效的学习率来加速训练、采用大批量训练、设计有效的目标以及利用模型平均技术来提高通用性的实际应用。这些技术意味着加速优化过程和提高泛化性能这两种主流场景。本文对每个组成部分进行了全面的分析。

  学习率选择方面的最新进展表明,自适应是以可接受的额外计算成本保持高效率的右手,这得益于梯度不同维度上的逐元标量。需要注意的一个主要问题是,平方动量的标量可能会导致学习率急剧下降,从而导致收敛速度减慢。预处理器的应用是引入曲率校正的一种很有前途的方法,这可能会导致快速收敛。然而,在实际训练中,尤其是在大型模型上,更新预处理器的成本很高。同时,不准确的曲率方向可能会将优化误导到局部最小值。大批量训练显示出对超参数选择的强烈依赖性。高效大批量训练的解决方案通常采用调整其他超参数或设计新的目标。这两条路线侧重于加速优化过程,这有助于实现更好的收敛。

  另一种场景更注重提高泛化效率。以前的许多工作都研究了优化和泛化之间的差距,并提出在平坦损耗表面上搜索合适的状态。基于有效的平面度测量策略,提出了几个目标,以增强大型模型的通用性并取得巨大成功。尽管不能忽视一些额外的计算消耗,但这种基于目标的改进仍然非常有效。与目标设计相比,模型平均是一种简单有效的提高通用性的方法。它可以在不增加任何额外计算成本的情况下实现有效的加速,并且在训练的中期显示出巨大的潜力。随着培训的完成,它的改进最终消失了。

  :在训练大规模模型时,进一步平衡由不稳定梯度引起的偏差有助于实现更高的效率。考虑曲率信息来构建用于细粒度调整的低成本预处理器矩阵是值得探索的,这可能有助于在训练中适应更大的批量;

  :采用几种测量方法来评估局部稳定性和平坦性,例如hessian的顶部特征值、梯度范数、邻域中的最差状态,并在训练加速度方面取得了很大的效率。探索低成本的表示有助于改进具有高泛化性能的训练过程。同时,利用合理的奖励和政策来寻找更新公式的最佳组合,显示出提高训练效率的巨大潜力;

  :具有良好泛化性能的平均模型可以被认为是下一次迭代的更好初始状态。设计更好的优化算法来充分利用这种聚合状态将是一个很有前途的方向。

  最近,一些工作专注于用更少的资源训练深度学习模型,但尽可能实现更高的准确性。这类问题被定义为预算培训,即在给定预算下进行训练(对可衡量成本的限制),以实现最高的模型性能。为了系统地考虑硬件支持以更接近真实情况,我们将预算训练定义为使用给定设备和有限时间进行训练,例如,在单个低端深度学习服务器上训练一天,以获得具有最佳性能的模型。对预算训练的研究可以阐明如何为预算培训制定培训方案,包括决定模型大小、模型结构、学习率计划和其他影响绩效的几个可调因素的配置,以及结合符合可用预算的高效培训技术。在本节中,我们主要回顾预算培训的最新进展。

  由于预算带来的影响,研究人员开发了许多更有针对性的技术,用于高效的预算训练。在这一部分中,我们从数据、模型和优化的角度总结了预算高效培训的方法。然后介绍了提供预算训练配方的过程,并总结了为预算训练提出或调整的技术。

  :从数据的角度来看,预算训练侧重于数据集的预算分配和与数据相关的算法。扩大训练中处理的数据量或模型大小可以提高训练性能。

  :正如我们所提到的,在给定计算预算的情况下,可以导出模型参数的最佳数量和数据量,Kaplan等人建议在中等数据上训练非常大的模型,并在收敛前提前停止。

  :Izsak等人显示了几个重要的超参数,用于优化预算训练中的更高性能,包括批量大小、峰值学习率、学习率的预热比例和训练天数。预算培训中的超参数配置与大规模框架中的不同,需要进行调整以适应固定预算。为了找到最佳的超参数配置,可能需要在估计的超参数范围内用不同的超参数进行几次测试。

  :预算训练的总体方案应包括配置关键超参数,并建立一个包含多种有效训练技术的训练管道。为了启动预算训练,决定几个对最终绩效有重大影响的超参数是很重要的。可以基于有限的训练时间和所使用的设备的计算能力来估计总的计算预算。除了超参数的配置,本文总结并呈现了表4,作为由各种技术组成的预算训练配方。

  本节从预算训练的角度回顾了高效的训练技术。分别从数据、模型和优化方面总结了高效预算训练的技术,并提出了一个全面的技术配方。

  权衡的思想,即为了另一方的利益而牺牲一方,在预算培训中发挥着重要作用。例如,已经开发出了通过时空权衡来减轻记忆限制的技术。此外,鉴于训练预算有限,不同的技术和影响模型性能的超参数之间往往存在权衡。当这些参数被单独缩放时,或者当有效的技术被单独使用时,它们通常可以提高模型性能。但在固定的计算预算下,需要在这些超参数之间以及计算密集型技术之间进行权衡。几项对各种培训配置进行审查的系统研究为决定实践中的权衡提供了经验建议,并提出了有效的预算分配方案[93110]。问题是,这些结论可能仍然是片面的,即仅对一定范围内的参数有效,或者这些结论给出了有偏见的定律,因为它们只是从实验中得出的经验定律。这些定律可能仍然需要未来的工作来训练更多的模型,以在新的设置中验证它们,这将比遵循现有模型训练的配置来获得良好的结果产生更多的成本。从小规模、低预算的培训机构开始,决定一个有效的预算培训方案,然后扩大到更大的规模,这似乎相对可行。另一个可能有价值的想法是设计更多的预算意识训练组件,即可以根据剩余预算调整参数的训练组件,例如最近一些研究[24]中提出的学习率调度器。

  :可以研究一个相同且实用的预算基准,例如,在低端GPU服务器上进行一天的训练。对于研究人员来说,在不同的配置下进行系统研究的成本太高。相反,对于相同的实际预算,未来的工作可以遵循现有的训练配方,并引入进一步的优化;

  :有效的学习率计划等算法可以根据剩余预算进行调整,这有助于快速收敛并提高性能。更多能够动态响应剩余预算的技术仍有待开发。

  以系统为中心的研究为所设计的算法提供了具体的实现方法。它研究了能够真正实现高效训练的硬件的有效和实用的执行。本文重点关注通用计算设备的实现,例如多节点集群中的CPU和GPU设备。从硬件的角度解决设计算法中的潜在冲突是核心问题。本节主要回顾现有框架和第三方库中的硬件实现技术,它们有效地支持数据、模型和优化的处理。然后介绍了一些现有的开源平台,这些平台为模型构建、高效使用数据进行训练、混合精度训练和分布式训练提供了坚实的框架。本节内容如下:

  :高效的数据处理和数据并行是系统实现中的两个重要问题。随着数据集的快速增加,低效的数据处理逐渐限制了训练效率,尤其是在多节点的大规模训练中。设计更硬件友好的计算方法和并行化可以有效地避免训练中的时间浪费;

  :随着模型参数数量的急剧增加,从模型角度来看,系统效率已成为重要的瓶颈之一。大规模模型的存储和计算效率给硬件实现带来了巨大的挑战。在这一部分中,我们主要回顾了如何实现高效的部署I/O和模型并行的简化实现,以加快实际训练;

  :优化过程表示每次迭代中的反向传播和更新,这是训练中最耗时的计算。因此,以系统为中心的优化的实施直接决定了培训的效率。为了清楚地解释系统优化的特征,我们关注不同计算阶段的效率,并回顾每个过程的改进;

  :高效的开源框架有助于将培训作为移植算法设计和硬件支持的桥梁。本文调查了一系列开源框架,并分析了每种设计的优势和劣势。

  尽管数据处理在训练中的时间成本比例不高,但低效的处理仍然会导致训练时间的急剧增加。特别是在大规模模型上训练大批量时,合理使用非冲突过程来加速数据处理,可以有效减少额外的消耗。为了实现有效的数据处理,已经在系统级别提出了许多工作。在这一部分中,主要回顾了数据处理和数据并行的高效实现。然后介绍了一些可以在实际场景中采用的高效库。

  高效的数据处理可以为加速训练带来显著的好处,从而实现高效的训练,并节省系统中多余的等待时间。Bai等人提出了PaGraph,以支持在多GPU设备上进行通用且高效的基于采样的图神经网络训练。在多个GPU的情况下,可以使用数据并行来加快计算速度。通过数据并行,每个节点都有一个模型副本,获取不同的数据碎片,然后执行前向和后向计算以获得梯度。在集中式架构中,这些节点将其计算的梯度发送到参数服务器,参数服务器聚合参数,更新模型,并将参数发送回每个节点。相反,在去中心化架构中(在深度神经网络训练的情况下更常见),每个节点在执行多节点通信后更新其相应的模型权重部分。随着模型越来越大,分布式训练成为一个工程问题,训练器需要优化分布策略以及网络通信和内存。例如,在多个GPU上训练PyTorch模型可以通过简单地修改代码以使用torch.nn.DataParallel来完成。然而,当在大批量上训练大型模型(如语言模型)时,有必要平衡GPU负载,例如,通过进一步分配损失准则计算来避免收集结果的服务器节点过载。

  高效的库:高效的库为训练过程提供了坚实的支持。当数据集大小较小时,所有数据样本都可以在训练前存储在计算设备中,这不会在数据I/O上花费额外成本。然而,随着深度神经网络的快速发展,数据集的大小呈几何级数增长。如此庞大的数据量导致它们被存储在本地存储器上,并且样本在参与训练时被交替地分批读取。在实际场景中,数据加载器并不是严重的瓶颈(通常低于总数的10%)。每个框架中的传统数据加载器都使用多线程线在CPU中执行数据I/O和预处理,这需要有保证的内核数量。

  硬件设计和算法设计是相辅相成的过程。对于研究人员来说,基于他们对模型的理解,他们可以根据设备的内存、计算和通信特性,如CPU、GPU和其他硬件架构,优化计算和内存的算法。在这一部分中,重点关注大规模模型部署的高效存储,并通过模型并行减少其实际训练消耗。

  Channel Last是一种高效的存储格式,可作为训练中4D NCHW张量的替代方案。这种方法逐像素存储张量,将通道作为最后一个维度。在混合精度训练下,在张量核上以通道最后一种格式训练的模型可以增加训练吞吐量。另一种有效的方法是采用量化的低精度来存储和计算张量。混合精度训练是一种适用于单GPU和多GPU情况的技术,通过混合使用单精度和半精度浮点格式来加速网络训练过程。

  从以模型为中心的角度来看,硬件支持主要针对存储和计算。高效的存储使该模型能够节省大量时间,并在设备的传输和分配过程中实现加速。并且,使用混合精度的数据类型也可以在保持效果的同时有效地避免等待时间的冗余。基于特定模块或特定层优化的一些基本方法也带来了显著的好处,为大规模模型的有效训练奠定了坚实的基础。

  优化对应于反向传播和参数更新过程,这是训练中耗时最大的计算。这对加速度至关重要。受反向传播机制的影响,传统范式在优化过程中的操作空间相对有限。因此,训练效率的主要决定因素之一是实现有效的底层优化过程的能力。在这一部分中,本文主要回顾了实际实现,包括通过计算图重建、流水线并行、融合运算符、跨设备高效通信和零冗余优化(Zero)进行的再物质化。

  对于那些想简单地应用并行技术来训练大型模型的研究人员来说,各种现有的开源框架提供了方便的实现。要从单个GPU扩展到多GPU甚至多机,通常只需导入库、定义训练策略和环境以及包装优化器即可。下面将介绍一些其他平台、开源框架和库,以及它们如何有利于大规模模型的(分布式)训练。本文整理了表5,总结了每个框架库的好处,并清楚地显示了它们对高效培训的主要贡献。正如我们已经提到的,训练大型模型需要综合使用通用技术。已经设计了几个深度学习框架,为训练加速提供有效支持。本文专注于有效的实施,这有助于实现更高的效率。随着时间的推移,更多的技术仍在不断涌现和探索中。

  本节将从以系统为中心的角度回顾训练加速。EBET易博真人平台系统实现中进行了算法设计,这决定了实际场景中的训练效率。所设计的算法和技术的效率也在很大程度上依赖于声音硬件支持以获得最大性能。在本节中研究了当前系统级的数据处理、模型训练和优化执行技术。我们将现有方法的优点和缺点总结如下。

  在以系统为中心的数据处理方面,这方面的关键路线包括高性能数据处理和数据并行。随着数据集的快速增长,训练数据样本的预处理变得复杂而繁重。这对大批量培训的发展是非常不利的。当数据处理时间与训练消耗不匹配时,训练过程进入等待状态,导致效率非常低。越来越多的研究倾向于减少通信并保持数据处理的本地化,从而产生高效的处理和并行性。同样的想法也应用于模型级别。与数据处理不同,模型通常存储在计算设备上。因此,我们必须面对大规模模型部署的挑战。一系列基于定量压缩的技术和混合精度模型有效地保证了训练加速度。此外,在大规模训练中,分布式架构的优化也有助于提高模型的计算效率。除了数据处理和模型部署外,优化过程的硬件支持是实践培训中最重要的部分。当前的主流技术路线围绕着重建计算图上的高效计算、用于阶段性训练的流水线并行性、高效优化器的融合实现以及跨多节点和多设备的高效通信。图形和流水线决定了硬件计算的简化计算流程,通信效率解决了训练中系统挂钟时间冗余的问题。在硬件系统的良好支持下,可以最大限度地发挥所设计算法的效果。

  :可以充分利用GPU设备中高效的并行计算来实现大批量训练中的数据正则化等预处理。有一些高效的库可以实现这一技术,但它还没有完全普及。许多操作仍有待发现;

  :随着模型尺寸的增大,计算设备的局限性将变得更加明显。同时,由于梯度的链式规则,大型模型中单个模块的计算无法完全并行化。多节点多设备的垂直训练研究成为一个值得探索的方向。垂直训练的优化算法也有望得到进一步的研究;

  :开发新颖高效的范式可以进一步加速大型模型的训练。它应该共同考虑每个单独模块的加速技术及其潜在的相互作用和冲突,这可以为有效培训提供有力的实施所设计的框架。例如,考虑到大规模边缘计算设备,在去中心化设置中协同训练模型也是未来一项很有前途的研究[289]。

  本文回顾了有效训练大规模深度学习模型的通用训练加速技术。论文考虑了基于梯度的更新公式(3)中的所有组成部分,这些组成部分涵盖了深度学习领域中的整个训练过程。并提出了一种新的分类法,将这些技术总结并分类为五个主要方向:“以数据为中心”、“以模型为中心”,“以优化为中心””、“预算训练”和“以系统为中心”。在前四部分中,主要从算法设计和方法论的角度进行综合研究。在“以系统为中心的高效训练”部分,从范式创新和硬件支持的角度总结了实际实施。本文回顾和总结了与每个组成部分相对应的常用或最新开发的技术,它们的优点和所提出技术的权衡,并讨论了它们的局限性和未来有希望进行的有效训练研究。

  在提供全面的技术审查和指导的同时,本文的调查还提出了当前在有效训练方面的突破和瓶颈。我们希望这项调查不仅能帮助研究人员有效地实现一般训练加速,还能为高效训练的未来发展提供一些有意义和有前景的启示。除了在每一节结尾提到的一些潜在进展外,还提出了一些更广泛和有前景的观点:(i)高效的个人资料搜索。高效的训练可以从数据扩充组合、模型架构、优化器设计等角度为模型设计预构建和可定制的概要文件搜索策略。这项研究已经取得了一些进展。此外,它还值得探索新的模型结构和压缩模式、新的预训练任务以及“模型边缘”知识的开发。在未来,它一定会取得更辉煌的成就。(ii)自适应调度器。使用优化的调度器,例如针对课程学习、学习率和批量大小以及模型复杂性,可以实现更好的性能。动态适应剩余预算的预算感知调度器在这些方面降低了手动设计的成本。自适应调度器可用于探索更强大的并行性和通信方法,同时考虑更通用和更实用的场景,例如在跨广域的异构网络和数据中心上进行大规模分散训练。

  自动驾驶感知:国内首个BEV感知全栈学习教程(纯视觉+多传感器融合方案)

  自动驾驶感知:国内首个多模态3D目标检测全栈教程(前融合/特征级融合/后融合)

  自动驾驶感知:多传感器融合与多目标跟踪全栈教程(Camera/Lidar/Radar)

  自动驾驶感知:多传感器融合中的毫米波雷达-视觉融合感知全栈教程(深度学习+传统方式)

  自动驾驶感知:彻底搞懂Transformer在检测/分割/3D视觉/自动驾驶/视觉大模型上的应用

  自动驾驶感知:YOLOv3~YOLOv8/YOLOX/PPYOLO系列全栈学习教程

  自动驾驶多传感器标定:Lidar+Radar+Camera+IMU离线+标定方案

  自动驾驶模型部署:基于TensorRT的CNN/Transformer/检测/BEV模型四大部署代码

  建了自动驾驶之心AIGC交流群!想要进交流群的同学,可以直接加微信号:AIDriver001。加的时候备注一下:AIGC+学校/公司+昵称,即可。然后就可以拉你进群了。

  自动驾驶之心 IV 2023 LMR:基于车道距离的轨迹预测评价新方案!

  自动驾驶之心 清华大学&英伟达最新|Occ3D:通用全面的大规模3D Occupancy预测基准

  自动驾驶之心 CVPR23最新 PVO:全景视觉里程计(VO和全景分割双SOTA)!

  自动驾驶之心 CVPR2023 3D目标检测在常见极端场景下的鲁棒性基准(激光+视觉27种方案)

  自动驾驶之心 CVPR 2023 ACL-SPC:用于自监督点云补全的自适应闭环系统

  自动驾驶之心 CVPR 2023 PiMAE:用于3D目标检测的点云和图像交互式自动编码器(港中文&北大)

  自动驾驶之心 小内存有救了!Reversible ViT:显存减少15倍,大模型普及曙光初现!

  自动驾驶之心 车道图新方案!LaneGAP:基于路径的在线车道图构建(华科&地平线)

  自动驾驶之心 CVPR 2023 基于多视图投影和方向一致性的弱监督单目3D检测