原文链接:https://thesequence.substack.com/p/edge74 大规模培训是在现实世界中构建深度学习解决方案最具挑战性的方面之一。正如一句古老的谚语所说,你最大的优点可以成为你最大的缺点,这当然适用于深度学习模式。整个深度学习空间之所以成为可能,部分原因在于深度神经网络能够跨GPU拓扑进行扩展。然而,同样的扩展能力必然需要计算密集型程序的开发,这对大多数组织来说是操作上的挑战。从训练到优化,深度学习项目的生命周期需要强大的基础设施构建块,以便能够并行化和扩展计算工作负荷。虽然深度学习框架的发展速度很快,但相应的基础设施模型仍然相对较新。在过去的几年里,科技巨头谷歌、微软、Uber、DeepMind和其他公司定期公布各自的努力,以便在大型GPU基础设施上实现深度学习模型的并行化。 分布式计算和并行计算的原理几乎贯穿于深度学习程序生命周期的任何阶段。 训练一个深度学习模型可能是一个非常昂贵的事情,它的执行也是如此。显而易见的方案是利用大型GPU网络来分配深度学习项目的工作量,但这远不是一件容易的事。并发和并行编程是出了名的复杂,当应用于大型神经网络时更是如此。大型科技公司每天都要面对这些挑战,因为它们为任务关键型应用程序操作极其复杂的深层神经网络。本文回顾一下Google、DeepMind、Microsoft和Uber使用的一些顶级体系结构,这些体系结构用于并行化大规模深度学习模型的培训: Google GPipe Uber Horovod DeepMind TF-Replicator Microsoft DeepSpeed Google’s GPipe GPipe专注于扩展深度学习项目的训练工作量。从基础设施的角度来看,训练过程的复杂性是深度学习模型经常被忽视的一个方面。训练数据集越来越大,越来越复杂。例如,在医疗领域,经常会遇到需要使用数百万高分辨率图像进行训练的模型。因此,训练过程通常需要很长时间才能完成,导致内存和CPU消耗非常昂贵 深度学习模型并行性可以分为数据并行和模型并行。这数据并行性这种方法使用大型机器集群来分割输入数据。 模型并行性 尝试将模型移动到加速器上,例如GPU或TPU,这些加速器有特殊的硬件来加速模型训练。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化,但是对于模型却不能这样。例如,一些深度学习模型由可独立训练的并行分支组成。在这种情况下,经典的策略是将计算划分为多个分区,并将不同的分区分配给不同的分支。然而,这种策略在按顺序堆叠层的深度学习模型中存在不足,这对有效地并行计算提出了挑战 GPipe通过一种称为流水线的技术将数据和模型并行性结合起来。从概念上讲, GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线并行进行训练,适用于任何由多个连续层组成的DNN。 GPipe将一个模型划分到不同的加速器上,并自动将一个小批量的训练示例分割成更小的小批量。此模型允许GPipe的加速器并行运行,最大限度地提高培训过程的可伸缩性。 下图说明了GPipe模型,其中一个具有连续层的神经网络被划分为四个加速器。Fk是第k个分区的复合正向计算函数。Bk是相应的反向传播函数。Bk依赖于上层的Bk+1和Fk的中间激活函数。在顶层模型中,我们可以看到网络的连续性如何导致资源利用不足。下图显示了GPipe方法,其中输入的batch被划分为更小的batch,这些batch可以由加速器同时处理。 Uber Horovod Horovod 是在社区中非常流行的uberml栈之一,并已被DeepMind和OpenAI等人工智能强国的研究团队采用。从概念上讲, Horovod是一个大规模运行分布式深度学习训练框架。 Horovod利用消息传递接口(例如 OpenMPI )使模型训练能够在高度并行和分布式的基础设施上运行,而无需任何修改。在Horovod运行分布式TensorFlow训练可通过四个简单步骤完成: hvd.init() 初始化Horovod. config.gpu_options.visible_device_list… Read More »[翻译]大型企业如何进行分布式机器学习?