打开

训练并行性:微软谷歌再放大招,开源新框架

subtitle
读芯术2020-11-26 11:15

全文共2669字,预计学习时长7分钟

打开网易新闻 查看更多图片

图源:Stanford

微软和谷歌一直积极致力于开发训练深度神经网络的新模型。最近,他们发布了两个新框架:微软的PipeDream和谷歌的GPipe。

这两个框架都遵循相似的原则,来扩展深度学习模型训练,二者在各自的研究论文中都有详细介绍,今天我将尝试对其进行总结。

训练是深度学习项目生命周期中的一个领域,在模型达到一定规模前,通常认为其挑战性不高。虽然在实验过程中训练基本模型比较简单平常,但其复杂性会随着模型的质量和大小呈线性增长。

例如,2014年ImageNet视觉识别挑战的冠军是GoogleNet,精确度最高,为74.8%,拥有参数达400万。而仅仅三年之后,2017年ImageNet挑战的冠军是压缩-激发(Squeeze-and-Excitation)网络,精确度最高,为82.7%,拥有参数达1.458亿(是之前的36倍多)。然而,在同一阶段,GPU内存仅增加了约3倍。

随着模型缩放,为达到更高精确度,这些模型训练的挑战性也会随之增高。前例表明,依靠GPU基础架构的完善来实现更好的训练过程不可持续,相反,为扩展训练规模,需要能够在不同节点进行并行化训练工作量的分布式计算方法。

可并行化训练的概念可能听起来比较简单,但在实际操作中极其复杂。如果你认真思考就会发现,我们真正说的是在不同节点之间划分模型的知识获取,然后将各个部分重新组合成一个内聚模型方面的问题。

然而,为缩放深度学习模型,训练可并行化必不可少。为应对这些挑战,微软和谷歌投入了数月的研究和工程研发,最终分别发布了GPipe和PipeDream两个框架。

谷歌的Gpipe

图源:unsplash

GPipe专注于扩展深度学习计划的训练负载。从基础架构的角度来看,培训过程的复杂性是深度学习模型经常被忽视的一个方面。

训练数据集越来越大,也愈加复杂,例如,在医疗保健领域,经常遇到需要使用数百万个高分辨率图像进行训练的模型。结果,完成训练过程通常耗时很长,且由于消耗内存和CPU,耗资不菲。

思考深度学习模型的并行性的有效方法是,将其划分为数据并行性和模型并行性。数据并行性方法采用大型机器集群,将输入数据拆分到它们之间。模型并行性尝试将模型移至具有专用硬件以加速模型训练的加速器,如GPU或TPU。

从高层次上讲,几乎所有训练数据集都能按照一定的逻辑进行并行化,但关于模型的说法却不尽相同。例如,一些深度学习模型由可以独立训练的并行分支组成,在这种情况下,通常采取的策略是将计算划分为多个分区,并将不同的分区分配给不同分支。但是,该策略在按顺序堆叠各层的深度学习模型中存在缺陷,给高效并行化计算提出了挑战。

GPipe通过利用一种称为流水线的技术将数据和模型并行性结合在一起。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线并行性进行训练,适用于由多个连续层组成的任何DNN(深度神经网络)。

GPipe在不同的加速器之间划分模型,并自动将小批量训练示例拆分为更小的微批量,该模型使GPipe的加速器可以并行运行,从而最大限度提高训练过程的可扩展性。

下图说明了GPipe模型的神经网络序列层被划分为四个加速器的过程:Fk为第k个分区的复合正向计算函数,Bk为对应的反向传播函数,Bk依赖于上层的Bk+1和Fk的中间激活函数。在模型顶部,可以看到,网络的顺序性质是如何导致资源利用率不足的。

下图显示了GPipe方法,输入的小批量被划分成可以由加速器同时处理的较小宏批量。

图源:arxiv

微软的PipeDream

图源:unsplash

几个月前,微软研究院宣布创建Project Fiddle,这是一系列旨在简化分布式深度学习的研究项目。PipeDreams是Fiddle项目发布的首个专注于深度学习模型训练并行化的项目之一。

PipeDream采用了有别于其他方法的方式——一种称为流水线并行的技术,来扩大深度学习模型的训练规模,这种方法试图解决数据和模型并行技术的一些挑战,比如在GPipe中使用的技术。

通常,在云基础架构上进行培训时,数据并行化方法在规模上会承受较高的通信成本,且随着时间推移,会提高GPU的计算速度。与此类似,模型并行化技术通常不能有效利用硬件资源,在决定如何在给定硬件部署的情况下拆分其特定模型方面,给程序员带来了不必要的负担。

图源:Microsoft

PipeDream试图通过使用称为流水线并行的技术来克服数据模型并行性方法的一些挑战。从概念上讲,流水线并行计算涉及将DNN模型的各层划分为多个阶段,其中每个阶段均由模型中的一组连续层组成。每个阶段都映射到一个单独的GPU,该GPU对该阶段中的所有层执行正向传递(和反向传递)。

对于某个特定深度神经网络,PipeDream会根据在单个GPU上执行的简短概要分析,自动决定如何对DNN的运算符进行分区,在不同阶段之间平衡计算负载,同时最小化与目标平台的通信。

即使存在模型多样性(计算和通信)和平台多样性(互连拓扑和分层带宽),PipeDream也能有效实现负载平衡。与数据模型并行性方法相比,PipeDream训练并行性方法的原理具有多个优势。

对于初学者来说,PipeDream需要在工作程序节点之间减少通信,因为管道执行中的每个工作节点只需要与梯度和输出激活的子集通信,且只与单个其他工作节点通信。此外,PipeDream以一种更容易实现并行的方式将计算和通信分离开来。

图源:Microsoft

训练并行性是构建更庞大、更精确的深度学习模型的重大挑战之一。作为深度学习社区中活跃的研究领域,训练并行方法需要结合有效的并发编程技术和深度学习模型的本质。

虽然还处于早期阶段,谷歌的GPipe和微软的PipeDream仍各有所长,是深度学习开发人员训练并行能力最富创造性的方法。

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布平台。
8赞
大家都在看打开应用 查看全部
网易热搜每30分钟更新
打开应用 查看全部
打开