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 研习社」长期提供免费视频直播课程,欢迎关注!
。