当前位置: 首页 > 网络应用技术

[大规模培训]大型培训的技术挑战

时间:2023-03-06 14:36:32 网络应用技术

  wen @露文文文文文文

  该共享是大型培训技术系列的第一部分,主要包括两个部分:

  在深度学习的发展中,改善模型准确性取决于神经网络的结构变化。

  例如,从Alexnet到RESNET50再到从NAS搜索的有效网络,Imagnet Top-1的精度已从58升至84。

  但是,随着神经网络结构设计技术的逐渐成熟度,很难通过优化神经网络结构来打破准确性极限。

  近年来,随着数据量表和模型量表的增加,模型的准确性得到了进一步提高。一系列研究实验表明,从大型和大数据开始以提高模型准确性是可行的。

  通常,可以通过通过现有模型结构扩大,加深和缝线来获得大型模型。

  更多的功能意味着更强的学习能力,因此与相同结构的小型模型相比,大型模型具有更好的准确性。在Google的大型转移(BIT)中进行实验:一般视觉重复学习学习1作为一个例子:

  在该图中,ILSVRC-2012数据集的不同尺寸可以从RESNET5050(2600万参数)增加到RESNET152X4(2.4亿参数)(2.4亿参数),增加4.3%。

  同样,扩大数据尺度也可以提高准确性,例如使用ILSVRC-2012(128万图片,1000个类别)和JFT-300M(3亿图片,18291个类别)来培训Resnet50,准确性为77%和79%和79%和79%%, 分别。

  可以发现,仅使用大数据集或大型模型就可以带来一定的准确性提高。

  这些准确性的提高似乎相对有限,甚至在某些情况下几乎没有改进,但是当我们同时使用大型模型和大数据集时,会有明显的突破。训练RESNET152X4。与ILSVRC-2012+RESNET50相比,准确性可以上升到87.5%,增长10.5%。

  NLP领域的大规模训练迅速发展。从BERT到GPT-3,再到交换变压器,模型大小和计算资源职业都在增长。尺度在多大程度上?GPT-3的参数达到1750亿,训练数据超过45TB。所需的计算能力(FLOP)超过1900次BERT,3.14E23 FLOPS。

  换句话说,即使在理论情况下(100%的计算功率利用率),单卡完整培训GPT-3的使用也需要355年的V100培训。

  目前,CNN字段中的模型参数通常少于1亿。

  但是在最新研究中,CNN大型模型也开始出现。不合理的JFT-300M数据集

  可以看出,模型和数据量表的增加确实可以突破现有的准确性限制。

  模型和数据量表的增加意味着训练时间的增加。为了提高模型训练的速度,可以增加计算资源以缩短训练时间,因此出现分布式培训。

  简而言之,分布式培训本质上是为了删除单卡的负载到多张卡。

  通过减少负载,分布式训练可以减少单卡的负载。一方面,它极大地改善了训练任务的吞吐量(减少负载)。在内存负载中占用)。

  更详细的分析是基于数据的平行示例:

  假设有深度学习模型,参数就足够了,可以放在单个GPU上。但是,由于培训数据集很大,因此总体任务的计算非常大。

  目前,数据平行的作用可以反映:对于这些深度学习培训,直接增加数据并行的计算资源更有效。几次投资的计算资源基本上可以获得相应的加速度倍数。

  但是,随着培训数据集的进一步增加,将同时出现一些限制:

  当培训资源扩展到一定规模(例如数百张卡片)时,由于存在通信瓶颈,添加资源的边际效应将变得越来越明显,甚至更多的资源将不再加速。

  就系统性的说话而言,随着数据和模型的继续增加,它们将遇到问题。大数据和大型模型(是否可以运行模型)和计算墙的问题(是否可以训练可以是在合理的时间内完成)使普通分布式培训不再适用于此类任务。

  目前,需要引入大型训练技术。

  在解决记忆墙以实现有效训练的同时,计算出的墙将不会停止大型训练技术。

  与普通的分布式培训相比,考虑大型训练技术的问题更为复杂:

  在本系列中,大规模训练技术面临的挑战分为三个部分:内存,沟通和计算,每个部分都将详细介绍。

  其中,记忆部分主要解释了如何在大规模训练中解决记忆墙问题,而其他两个部分是解决计算墙问题。

  大型模型训练遇到的第一个问题是记忆墙。

  实际上,在Resnest269(1亿参数)的Imagenet训练期间,内存存储器接近V100 32GB的上限,训练占28GB(注意:批次大小为16,输入大小为416×416)。当模型进一步增加或批处理大小增加时,模型训练的记忆占用也将增加。最后,图形卡的内存能力很高。当它触及内存墙时,无法训练模型。

  要了解节省墙的问题的本质,您需要了解明显增长的本质。

  您可以分析该图中的一些有趣信息:

  首先,可以发现,将模型训练的占领可以分为两个部分:部分是在模型转发时保存的临时变量。当反向传播时,视频内存的这一部分将逐渐发布。另一部分是由参数,渐变和其他状态信息占据的内存。该部分通常称为模型状态。

  其次,向前末尾的内存的内存占用确定它是否会遇到内存墙。减少内存其余部分的关键是切断峰值。

  接下来,在峰值引入模型状态和激活。

  2.1.1模型指出,尽管在Resnest269中的模型指示占1.2GB。但是,还必须考虑唯一的Resnest269参数,远离当前的大型模型。

  但是实际上,大型模型指出的职业非常可怕。您可以通过以下公式感受到这一点。

  因此,v100 32GB可以放下最高2亿的型号。否则,即使可以放下它也没有意义,因为激活没有多余的内存。

  2.1.2激活

  激活通常是指签名中使用的中间变量。如表3所示,向前输出,输出梯度和CUDNN工作区。

  因为深神经网络层的数量非常大,并且需要将每一层的正向输出保存到向后,这将导致巨大的内存开销。从Resnest269中,我们还可以粗略地看到,激活的职业远大于模型。国家(1.2GB vs 26.8GB)。

  实际上,CNN模型中的激活解释了大型内存的头部,而激活对于CNN模型来说是一个非常困难的问题。

  另一类模型:变压器模型的情况相对较好。主要原因是变压器中的内部操作主要乘以大矩阵,并且可以将大型矩阵乘法拆分为模型平行(CNN IS IS Model(CNN IS)非常困难),这大大减少了活动的职业。

  这就是为什么近年来基于变压器的大型模型出现的原因。该模型的规模已达到1000亿级,基于CNN的大型模型仍然为1亿。

  模型状态和活动都可能导致记忆墙问题。它们是独立的,但彼此限制。任何一侧的增加都会导致记忆空间留给另一侧的记忆空间变得更小,因此不足以单独优化一侧。必须同时优化它以优化模型状态和活动。

  在分布式培训中,我们进行了神经网络的各个部门,但是神经网络的训练任务仍然是一个整体。因此,分数需要沟通才能汇总。

  汇总产生的沟通要求暗示了许多问题。首先,深度学习迭代培训的特征导致频繁更新,需要大量交换。专用加速芯片的速率,例如GPU或TPU。

  一些朋友可能会问,您不能用更大的带宽直接解决这些问题吗?

  答案是没有!

  从数字可以看出,随着带宽的增加,带宽利用率将变得越来越低,高带宽的增益非常有限。实际上,基本原因是网络协议堆栈的开销,即网络协议堆栈已导致培训有效地使用带宽。不幸的是,我们可以通过某些方法解决这一部分开销(将在相应的文章中详细说明)。

  但是,即使解决了协议堆栈的开销,在面对大规模培训任务时仍会出现一些新问题:

  目前,通常采用同步通信步伐。桶效应很容易拥有一百张卡和一百张卡。单卡上的波动和单个通信的延迟变得疯狂。

  通常,大规模深度学习中的沟通瓶颈不仅是由大型沟通量引起的,而且是更复杂的系统问题。还需要从分布式培训架构和沟通策略等许多方面解决。

  大型模型+大数据不仅带来了高计算能力需求,而且还引入了各种技术,同时还要降低计算资源的利用。在我们的内部实验之一中,在优化估计达到473.8之前,使用128张卡在使用128张卡片之前使用128张卡片。天。

  尽管计算能力挑战的本质来自大规模培训任务的巨大计算能力需求,但总的来说,我们不能直接降低任务的计算能力需求,因此我们只能考虑提高计算效率。

  计算效率问题可以分为三个级别:操作员级别,图形级别和任务级别。

  2.3.1操作员级别级别可以理解为对操作级别的优化。

  大规模培训中的操作员级问题类似于单卡培训。

  喜欢:

  2.3.2图级级级是指如何优化计算图,从而加速大规模训练。

  喜欢:

  2.3.3任务级可以理解为训练阶段的系统设计。

  与传统培训不同,在包括大规模培训技术在内的培训系统的设计中,不仅考虑了大量节点,而且还考虑了系统级别在解决视频记忆和通信问题的问题时所带来的系统级别。,任务级别的关键挑战是如何在最终计算中给出具有最高效率的系统设计。

  喜欢:

  因此,大规模培训中的计算能力问题是一个全面的问题,无法用单个技术解决,但需要一个整体解决方案。本解决方案不仅需要足够的计算资源,而且还取决于深层的运行效率学习框架以及通过各种大型培训优化和优化的权衡。

  感谢您的阅读,欢迎在评论区域留言?

  P.S.如果您喜欢这篇文章,请喜欢它,让更多的人看到我们:D

  请注意公共帐户“ Sensepartots”,并获得行业动态和技术思维的人工智能框架。

  原始:https://juejin.cn/post/7096007029596094478