IBM高级研发工程师武维:如何分布式训练深度学习模型?| 分享总结

AI 研习社按:随着深度学习神经网络规模越来越大,训练一个深度神经网络(Deep Neural Networks, DNNs)往往需要几天甚至几周的时间。为了加快学习速度,经常需要分布式的 CPU/GPU 集群来完成整个训练。本文就就来为大家简单简单介绍一下如何进行分布式训练深度学习模型。

在近期 AI 研习社的线上公开课上,来自 IBM 系统部研发工程师武维博士为大家做了一期主题为「深度学习中的分布式训练」的在线分享,错过了直播的同学们如果看了本文有疑惑之处还可以到雷锋网(公众号:雷锋网) AI 慕课学院观看视频回放(进入原文阅读观看视频回放)。

武维,IBM 系统部研发工程师,曾就职于华为大数据产品部及 IBM 中国研究院,担任系统工程师/研究员;西安交通大学系统工程博士,目前主要研发方向为深度学习中的分布式训练框架与模型。

以下是雷锋网对视频直播内容做的简要回顾:

分享提纲:

  • 为什么要分布式训练深度学习模型及分布式TensorFlow架构。
  • TensorFlow图内复制和图间复制。
  • 深度学习模型异步训练和同步训练。
  • Case Study:如何把单机模型分布式化。
  • 分布式模型训练性能介绍。

分享内容:

大家好,我是武维,今天分享的第一部分介绍一下为什么要采用分布式训练以及分布式 TensorFlow 的架构,第二部分讲 TensorFlow 图内复制和图间复制,第三部分是关于分布式训练中的同步训练和异步训练的简要介绍。第四部分是关于如何把单机模型分布式化成分布式模型,第五部分是关于分布式训练的性能介绍。

为什么要采用分布式训练呢,分布式训练主要处理什么问题,以及如何处理的?

下图是关于TPU架构数据中心的图

第一个原因,是增加训练的吞吐量;第二个原因是是针对大模型训练,大模型通常在一个设备中放不下。

下面左图中的横坐标可以认为是 GPU 个数,纵坐标为处理图片的速度。

针对大模型怎么去训练?现在的办法是把模型拆解到不同的GPU卡里面,每个GPU卡里面训练一部分,这样就可以把一个大模型分布式训练起来。

如何实现这个流程

左边是TensorFlow的一个基本的运行流程。

TensorFlow 的发展过程

分布式TensorFlow架构,它的架构是基于Master 和 Slaver的架构。

以上是从master 和slaver 的角度讲深度学习分布式架构,下面从worker 的角度来看:

深度学习首先要训练参数,在分布式里面会把参数存放在参数服务器,如果 worker 需要运算的话,首先从参数服务器读取参数到到 CPU 上。目前来说,大多数的深度学习训练都是在 GPU 设备上进行的,所以需要把读取的数据复制到 GPU 上,GPU 就可以从左往右开始运算。最后通过求导找到变量所对应的梯度,然后在将梯度复制到机器上所对应的的 CPU 上,CPU 再通过网络通信把他发送给参数服务器,这是从整个 worker 角度去看分布式架构。

TensorFlow 在分布式训练里面有两个比较重要的概念分别是「图内复制」和「图间复制」。分布式训练意味着有一个集群,先定义一个分布式集群。下面是图内复制,这种情况适合单机多卡。

如果是多台计算机的时候,分发数据带来的数据瓶颈就会比较大,如果采用图内复制,数据传输会产生瓶颈。这个时候需要用图间复制,两个图可以中间共享变量,解决了训练数据分发的问题,这种方式适用于多机多卡训练。图间复制有多个客户端,图内复制只有一个客户端。

TensorFlow 封装了高级 API,会自动把参数部署到参数服务器上,把运算操作设定到 worker 上,这些就实现了一份代码可在多个 worker 上运行,简化了客户端程序的编写。

如何分布式寻找最优W?同步训练和异步训练有什么区别?

随机梯度下降法:第一个式子数值求偏导,计算量太大,不实际。通常用微积分求导,解析解。

分布式随机梯度下降法

异步训练过程:异步训练为TensorFlow上每个节点上的任务为独立训练方式,不需要和其他节点在参数服务器上同步梯度。

同步训练过程:同步训练需要和其他节点在参数服务器上Reduce梯度。

第四部分是如何编写分布式训练模型示例,大家可以观看视频回放。

下图是单机版线性回归模型示例

第五部分是分布式训练的性能比较

评价指标通常分为模型方面和平台方面。在模型方面常用指标是:准确率、召回率、AP等。平台方面

主要看吞吐量、加速比。

异步训练的吞吐量比同步训练好,所以异步训练要比同步训练的快。

同步算法和异步算法的比较

以上就是本次分享的主要内容,代码实现部分建议同学们直接观看回放视频,也可关注嘉宾武维的GitHub地址。

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

资源 | 深度学习图像标注工具汇总

1891
来自专栏AI科技大本营的专栏

10行代码实现目标检测,请收下这份教程

作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学。该领域主要包括图像识别,目标检测,图像生成,图像超分辨率等多个方向。...

1351
来自专栏CreateAMind

强化学习基础概念ppt视频讲解

1293
来自专栏人工智能头条

10行代码实现目标检测,请收下这份教程

1181
来自专栏玉树芝兰

如何用Python和深度神经网络识别图像?

(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)

1992
来自专栏AI研习社

MXNet 宣布支持 Keras 2,可更加方便快捷地实现 CNN 及 RNN 分布式训练

AI 研习社按,近期,AWS 表示 MXNet 支持 Keras 2,开发者可以使用 Keras-MXNet 更加方便快捷地实现 CNN 及 RNN 分布式训练...

1297
来自专栏目标检测和深度学习

深度学习图像标注工具

对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上限。世界上最遥远的距离就是我们用同一个模型,但是却有不同的任务。但是数据标注是个耗时耗力的...

2876
来自专栏应兆康的专栏

5. 开发集和测试集

让我们回到之前关于猫咪图片的例子: 你开发了一个移动APP, 用户可以上传许多不同的图片到你的APP上,你想识别出用户上传的图片中所有包含猫咪的图片。 你的团队...

3146
来自专栏量子位

深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

问耕 编译自 Source Dexter 量子位 出品 | 公众号 QbitAI 作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题。Sour...

5869
来自专栏应兆康的专栏

开发集和测试集

2051

扫码关注云+社区

领取腾讯云代金券