【进群了解最新免费公开课、技术沙龙信息】
作者 | Jesus Rodriguez
译者 | 陆离
编辑 | Jane
出品 | AI科技大本营(ID:rgznai100)
【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型,最近,谷歌和微软分别发布了新的用于分布式深度学习训练的框架——GPipe 和 PipeDream。下面的内容就带领大家了解一下这两个工具。
模型的训练是深度学习应用程序生命周期中的一个部分,在模型达到一定的规模之前,我们认为它不会遇到什么挑战性。虽然在实验过程中训练基本模型是较为平常的工作,但复杂度与模型的质量和大小成线性关系。例如,2014年ImageNet视觉识别挑战赛(ImageNet visual recognition challenge)的获胜者是GoogleNet,它以400万个参数获得了74.8%的Top-1准确率;而仅仅在三年之后,2017年ImageNet挑战赛的获胜者则成了Squeeze-and-Excitation Networks(SENet),它用了1.458亿个(是之前的36倍以上)参数获得了82.7%的Top-1准确率。然而,在同一时期,GPU的内存只增加了大约3倍。
随着模型的发展,为了达到更高的精确度,这些模型的训练变得越来越具有挑战性。前面提到的例子表明,仅仅依靠GPU硬件设施的改进来实现更好的训练效果是不可持续的。相反,我们需要分布式的计算方法,将不同节点上的训练工作负载并行化,以便进行扩展训练。可并行化训练的概念听起来可能比较简单,但实际上却是极其复杂的工作。如果你思考一下,我们将要讨论通过跨不同节点来划分模型的知识获取部分,并在完成之后将这些部分再重新组合成为一个模型。然而,为了扩展深度学习模型,必须进行并行训练。为了应对这些挑战,微软和谷歌投入了数月进行研究和设计,分别发布了GPipe 和PipeDream。
GPipe(Google)
GPipe专注于扩展深度学习应用程序的训练负载。从基础设施的角度来看,训练过程的复杂性是在深度学习模型中经常被忽视的因素。训练数据集越来越大,就越复杂。例如,在医疗保健领域,经常会遇到需要使用数百万高分辨率的图像进行训练的模型。因此,训练过程通常需要很长的时间才能完成,并且由于内存和CPU的消耗而导致付出非常高的代价。
对于深度学习模型并行性的一种有效思考方法是将其划分为数据并行和模型并行的方式。数据并行方式使用大型的计算机集群来分割所输入的数据。模型并行性则是试图将模型转移到加速器上,GPU或TPU,它们具有加速模型训练的特殊硬件。在较高的层次上,几乎所有的训练数据集都可以按照一定的逻辑进行并行化工作,但在模型上却不一定是这样的。例如,一些深度学习模型是由可独立进行训练的并行分支组成的。在这种情况下,典型的策略是将计算任务划分到多个分区,并将不同的分区分配给不同的分支。然而,这种策略在按顺序进行层堆叠的深度学习模型中存在着很大不足,这就给高效的并行计算带来了挑战。
GPipe通过一种叫做流水线的技术将数据并行和模型并行相结合起来。从概念上讲,GPipe是一个分布式机器学习库,它使用同步随机梯度下降和流水线并行的方式进行训练,适用于任何由多个有序的层组成的深度神经网络(Deep Neural Networks, DNN)。Gpipe通过跨不同的加速器来分割模型,并自动将一小批训练示例划分成更小的批量。该模型允许GPipe的加速器进行并行操作,最大限度地提高了训练过程中的可扩展性。
下图说明了具有多个有序层的神经网络的GPipe模型被划分到了四个加速器上。Fk是kth分区的复合正向计算函数。Bk是其相对应的反向传播函数。Bk依赖于来自上层的Bk+1和Fk的中间激活函数。在上面的模型中,我们可以看到网络的顺序性是如何导致资源利用不足的。图中的下半部分显示了GPipe方法,在该方法中,输入的小批量示例被划分为更小的微批量,这些微批量可以由加速器同时处理。
PipeDream(微软)
几个月以前,微软研究院宣布了Fiddle项目的创立,其包括了一系列的旨在简化分布式深度学习的研究项目。PipeDreams是Fiddle发布的第一个侧重于深度学习模型并行训练的项目之一。
PipeDream采用一种有别于其它方法的方式,利用称为“流水线并行”的技术来扩展深度学习模型的训练。这种方式试图解决当前数据和模型并行技术所面临的一些挑战,例如在Gpipe中使用的一些技术。通常来说,当在云基础设施上进行训练的时候,数据并行方法在规模上承受着很高的通信成本,另外也可以随着时间的推移来提高GPU的计算速度。类似地,模型并行技术经常会通过无效地硬件资源利用,同时给程序员带来不必要负担的情况下,来确定如何在给定硬件部署环境的情况下进行特定模型的拆分。
PipeDream试图通过一种叫做流水线并行的技术来克服数据模型并行方法上的一些挑战。在概念上,流水线并行计算技术涉及将DNN模型的层划分为多个阶段,每个阶段是由模型中的一组连续的层组成的。每个阶段都被映射到一个单独的GPU上,该GPU对当前阶段中的所有层将执行前向传递和后向传递。
给定一个特定的深度神经网络,PipeDream会根据在单个GPU上执行的一个简短的评测运行,自动确定如何划分DNN模型的操作者,并在不同阶段之间均衡计算的负载,同时也会最小化目标平台的通信任务。即使存在模型的多样化(计算和通信)和平台的多样化(互连拓扑和分层带宽),PipeDream也能有效地进行负载均衡。PipeDream的并行训练方法对比数据模型并行方法提供了一些额外的优势。首先,PipeDream在工作节点之间需要更少的通信,因为在管道执行中的每个工作节点只需传递梯度和输出激活的子集,给其它的单个工作节点。此外,PipeDream以一种更容易并行的方式来分离计算和通信任务。
并行训练方法是构建更庞大、更精确的深度学习模型的关键挑战之一。作为深度学习社区中的一个非常活跃的研究领域,并行训练方法需要将有效的并发编程技术与深度学习模型的本质相结合起来。虽然仍处于初期阶段,但谷歌的GPipe和微软的PipeDream作为两种最具创造性的技术,为深度学习的开发人员提供了并行训练方法。
原文地址:
https://towardsdatascience.com/gpipe-and-pipedream-two-new-frameworks-for-scaling-the-training-of-deep-neural-networks-32d17fd32c07

(*本文为 AI科技大本营编译文章,转载请微信联系 1092722531

精彩推荐

2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。5 折票倒计时 1 天!

推荐阅读

Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream相关推荐

  1. 开源公告|分布式深度学习训练工具PatrickStar正式开源

    PatrickStar是一款分布式深度学习训练工具,它的设计目标是支持以GPT.Bert为代表的超大预训练模型训练.在性能表现上远超目前业界DeepSpeed效果.它可以显著降低PTM的使用成本,使我 ...

  2. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  3. 一种分布式深度学习编程新范式:Global Tensor

    撰文|姚迟.许啸宇.左益豪.程国良 Global Tensor 是指多机多设备执行的 Tensor,它是实现全局视角(Global View)编程的接口. 当前的并行程序,大都采用单程序多数据(SPM ...

  4. 分布式深度学习最佳入门(踩坑)指南

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Lyon@知乎(已授权) 来源丨https://zhuanla ...

  5. Kubernetes-native 弹性分布式深度学习系统

    9月11日,蚂蚁金服在 Google Developer Day Shanghai 2019 上宣布开源了基于 TensorFlow 2.0 eager execution 的分布式深度学习系统 El ...

  6. ElasticDL: Kubernetes-native 弹性分布式深度学习系统

    9月11日,蚂蚁金服在 Google Developer Day Shanghai 2019 上宣布开源了基于 TensorFlow 2.0 eager execution 的分布式深度学习系统 El ...

  7. 20+汇总|计算机视觉深度学习训练推理框架

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[领域综述]获取自动驾驶全栈近80篇综述论文! 后台回复[ECCV2 ...

  8. 微软和谷歌分别开源分布式深度学习框架,各自厉害在哪?

    微软和谷歌一直在积极研究用于训练深度神经网络的新框架,并且在最近将各自的成果开源--微软的PipeDream和谷歌的GPipe. 原则上看,他们都遵循了类似的原则来训练深度学习模型.这两个项目已在各自 ...

  9. 【分布式】分布式深度学习DDLs系统Review——分布式学习通俗理解Distributed Deep Learning Systems(最全面的论述)

    分布式深度学习系统 (DDLS) 通过利用集群的分布式资源来训练深度神经网络模型. DDLS 的开发人员需要做出许多决定,以在他们选择的环境中有效地处理他们的特定工作负载. 基于 GPU 的深度学习的 ...

最新文章

  1. Android移动开发之【Android实战项目】DAY7-项目结构
  2. 白皮书下载 |《产品用户体验的数据化评估》
  3. 前端学习(2742):重读vue电商网站52之路由懒加载
  4. 浅谈面向对象的javascript几个特性
  5. EL与JSTL注意事项汇总
  6. python判断序列符号变化的次数
  7. Javascript 强制浏览器渲染Dom文档
  8. JOPL的配置文件Bug
  9. Wordpress 错误ERROR: Cookies are blocked or not supported by your browser.
  10. Python3入门机器学习经典算法与应用 第3章 Numpy中的比较和FancyIndexing
  11. linux如何进入超级终端,使用telnet和超级终端登录控制Ubuntu
  12. 蛮牛教育Unity Shader从入门到精通:第十节课Shader问题
  13. PDF旋转保存居然还能如此高效的办法
  14. 【Spring系列】 Ioc 实现原理,Spring获取bean的方式,创建对象的方式和懒加载
  15. [经]信用体系,金融改革
  16. 多维泰勒网matlab,非线性定常系统的多维泰勒网优化跟踪控制
  17. python火车票自我编写_自己动手写100行Python代码抢火车票!
  18. Centos6下Redis学习(一)——Java客户端Lettuce的使用、Springboot整合
  19. DirectX 9.0c游戏开发手记之RPG编程自学日志之11: 题外话
  20. 基于Python3.6实现Java版murmurhash算法

热门文章

  1. C# MoreLinq 扩展安装
  2. Quartz定时任务学习(四)调度器
  3. python 没反应 生成exe_通过 pyinstaller 将 python 脚本打包成可执行程序!
  4. std::function简介
  5. 2018-3-13 目标改动---智能算法
  6. 使用CruiseControl.Net全面实现持续集成
  7. Java 学习笔记(4)——java 常见类
  8. 0409-0416的笔记
  9. Scrapy爬虫-必备插件
  10. tensorflow入门(二)