Microsoft和Google一直在积极开发用于训练深度神经网络的新框架,并且最近开源了各自的成果——Microsoft的PipeDream和Google的GPipe。原则上,它们都遵循相似的原则来训练深度学习模型。这两个项目在各自的研究论文(PipeDream、GPipe)中都有详细描述,本文将对其进行总结。先放上GitHub开源地址👇微软:https://github.com/msr-fiddle/pipedream谷歌:https://github.com/tensorflow/lingvo/blob/master/lingvo/core/gpipe.py众所周知,在实验过程中,在训练基础模型是微不足道的,复杂度随着模型的质量和大小线性增加。例如,2014年ImageNet视觉识别挑战赛的获胜者是GoogleNet,它以400万个参数实现了74.8%的TOP1准确率,而仅仅三年后,2017年ImageNet挑战赛的获胜者使用了1.458亿个参数(增加了36倍)最新神经网络达到了TOP1准确率——82.7%。然而,GPU内存在同一时期仅增加了约3倍。随着模型扩展以实现更高的准确性,训练这些模型变得越来越具有挑战性。之前的示例还表明,依靠GPU基础设施改进来实现更好的训练是不可持续的。我们需要分布式计算方法来并行化不同节点的训练工作量以扩展训练。分布式训练的概念听起来微不足道,但实际上极其复杂。Google的GPipeGPipe专注于扩展深度学习程序的训练工作量。从基础设施的角度来看,训练过程的复杂性是深度学习模型经常被忽视的一个方面。训练数据集越来越大,越来越复杂。例如,在医疗保健领域,使用数百万高分辨率图像训练模型的情况并不少见。因此,训练过程通常需要很长时间才能完成,并且非常占用内存和CPU。考虑深度学习模型分布的一种有用方法是将其分为数据分布和模型分布。数据分布方法采用大型机器集群并在它们之间拆分输入数据。模型分发试图将模型移动到具有特定硬件(例如GPU或TPU)的加速器,以加速模型训练。从概念上讲,几乎所有的训练数据集都可以按照一定的逻辑进行分布,只是模型不尽相同。例如,一些深度学习模型由可以独立训练的并行分支组成。在这种情况下,经典的策略是将计算划分为分区,并将不同的分区分配给不同的分支。然而,这种策略在层顺序堆叠的深度学习模型中是不够的。GPipe通过利用一种称为流水线的技术将数据和模型分布在一起。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线分布进行训练,适用于任何由多个顺序层组成的DNN。GPipe在不同加速器之间对模型进行分区,并自动将一小批训练样本拆分为更小的微批次。该模型允许GPipe的加速器并行运行,最大限度地提高训练过程的可扩展性。下图说明了神经网络的GPipe模型,其中连续层分布在四个加速器中。Fk是第k个分区的复合前向计算函数。Bk是对应的反向传播函数。Bk取决于上层Bk+1和Fk的中间激活。在顶层模型中,我们可以看到网络的顺序性质如何导致资源利用不足。下图显示了GPipe方法,其中输入小批量被分成更小的宏批,可以由加速器同时处理。图片来源:https://arxiv.org/pdf/1811.06965.pdf微软的PipeDream几个月前,微软研究院宣布创建ProjectFiddle,这是一系列旨在简化分布式深度学习的研究项目。PipeDreams是Fiddle项目的首批发布之一,专注于深度学习模型训练的并行化。PipeDream采用与其他方法不同的方法,通过利用一种称为管道分布的技术来扩展深度学习模型的训练。这种方法试图解决数据和模型并行技术的一些挑战,例如GPipe中使用的技术。通常,在云基础设施上进行训练时,数据并行方法会面临大规模通信成本高的问题,并且随着时间的推移会提高GPU计算速度。类似地,模型分发技术在利用硬件资源方面通常效率较低,给程序员带来了不必要的负担来决定如何在给定硬件部署的情况下拆分他们的特定模型。图片来源:http://www.microsoft.com/en-us/research/uploads/prod/2019/08/fiddle_pipedream_sosp19.pdfPipeDream试图通过使用一种称为pipedream的技术来克服分布式数据模型方法的一些挑战分配。从概念上讲,流水线分布式计算涉及将DNN模型的层划分为多个阶段,其中每个阶段由模型中的一组连续层组成。每个阶段都映射到一个单独的GPU,该GPU对该阶段中的所有层执行前向传递(和反向传递)。给定一个特定的深度神经网络,PipeDream基于在单个GPU上执行的简短分析分析自动确定如何划分DNN的运算符,平衡不同阶段之间的计算负载,同时最小化与目标平台的差异。沟通。即使存在模型多样性(计算和通信)和平台多样性(互连拓扑和分层带宽),PipeDream也能高效地实现负载均衡。PipeDream训练的分布式方法的原理与数据模型的分布式方法相比有几个优点。对于初学者来说,PipeDream需要较少的工作节点之间的通信,因为管道执行中的每个工作人员只需要将梯度子集和输出激活传递给其他单个工作人员。图片来源:https://www.microsoft.com/zh-cn/research/uploads/prod/2019/08/fiddle_pipedream_sosp19.pdf训练分布是构建更大更准确的深度学习模型的关键挑战之一。分布式训练方法是深度学习社区中一个活跃的研究领域,需要将有效的并发编程技术与深度学习模型的性质相结合。谷歌的GPipe和微软的PipeDream虽然还处于早期阶段,但它们本身已经是优秀的产品,并且是深度学习开发人员可用的两种最具创新性的分布式训练方法。
