会员登录 注册新帐号电脑店行业门户 | U盘启动工具

首页

 电脑店主页 > 产品技术 > 服务器储存 > 服务器 > HPC > 百度开源深度学习库,HPC技术正推动DL不断进步

百度开源深度学习库,HPC技术正推动DL不断进步

发布时间:2017-03-01 10:38      点击:     关注官方微博:

  百度硅谷AI实验室(SVAIL)的研究人员已经采用了一种知名的HPC通信技术,以提高他们神经网络训练的速度和规模,现在他们与更大的深度学习社区分享他们的实施经验。

  该技术是OpenMPI算法“ring all-reduce”的修改版本,百度正在利用它,使他们的语音识别模型Deep Speech 2并行化,以通过大量GPU节点进行训练。近日,百度宣布了两个程序 ——allreduce C库以及TensorFlow的补丁,该补丁允许已经在TensorFlow中建模的人们编译这个新版本,并用它在多个设备上并行化。该程序代码可在GitHub上获取。

  allreduce C库链接:javascript:void(0)

  TensorFlow补丁链接:https://github.com/baidu-research/tensorflow-allreduce

  百度的SVAIL团队在两年前开发了内部深度学习框架的方法,并命名为Gene & Majel,为的是纪念《星际迷航》的创作者Gene Roddenberry和Majel Barrett。这种技术在HPC圈子中很常见,但是根据百度的说法,在人工智能和深度学习中并未充分利用。

Gene Roddenberry

Majel Barrett

  在SVAIL中,许多研究人员都来自高性能计算领域,他们认为该技术非常有竞争力。

Ring all-reduce——所有GPU同时发送数据

  “该算法实际上是OpenMPI的一部分,但OpenMPI实现起来不是那么快,”百度科学家Shubho Sengupta说。“我们偶然发现它,是源自于我们开始使用OpenMPI进行训练,渐渐意识到它并没有扩展到我们想要扩展的程度。我开始挖掘OpenMPI源码,找到算法,发现它效率不高,并试着重新实现它。”

百度科学家Shubho Sengupta

  SVAIL研究人员编写了自己的环算法,以实现更高的性能和更好的稳定性。与OpenMPI版本的主要区别是SVAIL实现避免了CPU和GPU之间的无关副本。

  Sengupta解释道:“一旦OpenMPI实现这些矩阵的通信,如果矩阵储存在GPU存储器中,实际上只是复制到CPU内存实现它的缩减部分——这实际上是相当浪费。你真的不需要做一个副本,你可以只写一个小内核,减少GPU本身的内存空间。这特别有助于当你在一个节点内做all-reduce,所有的GPU都在一个PCI根复合体内,那么实际上,它不会做任何副本——它所有的动作都围绕着GPU。消除副本这个非常简单的想法,加速了OpenMPI自身的实现。”

  SVAIL专注于快速网络(InfiniBand)和硬件—软件代码签名,通过采用这种算法,使得该团队能够将线性GPU扩展到128个,这是一个不错的成就。详情请见2015年12月的论文“Deep Speech 2:英语和普通话的端到端的语音识别。”Deep Speech 2: End-to-End Speech Recognition in English and Mandarin

  凭借其内部实现的ring all-reduce,该团队实现了比OpenMPI(版本1.8.5)高2.3-21.4倍的速度,具体数字取决于GPU的数量。

  Sengupta指出,对于少量的GPU,它们的实现速度最快。在8个GPU上,它的速度大约快20倍,那么随着你增加GPU的数量,速度会下降,因为必须复制数据到CPU上再通过网络发送。但对于内部框架,可以扩展到128个GPU,并获得线性缩放。

  注:比较两个不同的all-reduce实现。所有时间都以秒为单位。性能增益是OpenMPI全减缩时间与SVAIL全减缩时间的比。

  Sengupta的队友,百度研究科学家Andrew Gibiansky认为,TensorFlow现在可以看到类似的好处:“在TensorFlow实现方面,我们获得了超过8个的相同的线性缩放路径。与单个GPU上运行速度相比,其在40个GPU上的速度大约快31倍。

  在Deep Speech 2论文发表后,SVAIL团队开始收到各种社区的请求,他们纷纷想了解更多关于论文实施的最新消息。考虑到该算法与SVAIL的专有深度学习框架相当紧密,他们需要提出一种不同的方法来发布它,因此他们创建了两个新的实现,一个专门用于TensorFlow,另一个则是更为通用的版本。

  Gibiansky领导了TensorFlow补丁的工作,描述了他们的多方位传播信息的方法。“如果你使用TensorFlow,你可以使用我们的修改来训练你自己的模型。如果你是一个深入学习的程序员,你可以看看我们的C库并对它进行整合。我们真的采取了这个想法,并且内部成功了,然后我们尝试开始传播,以便其他人也可以利用它。

  详细技术细节见:http://research.baidu.com/bringing-hpc-techniques-deep-learning/

  Sengupta分享了一个有趣的观点,即在HPC内继续深挖的机会。

  “使用MPI——搞深度学习的人认为,这是老技术,它是不相关的,但我认为,由于我们的工作,我们已经表明,使用MPI,你可以建立非常快的集合,同时,同步梯度下降时收敛得更快,并给出确定的结果,你不需要做参数服务器的异步梯度下降。”Sengupta说。

  至于reduced-copy方法,Gibiansky指出,如果你看一些其他MPI实现,他们正在慢慢地将他们的集合转移到GPU的版本中。

  “我们发现,现在大家对集合很感兴趣,而且我们还意识到,在传统的HPC设置中使用的all-reduce操作,它实际上传输的数据实际上不是很大,”Sengupta补充说。“当谈到搞HPC的人,all-reduce试图找出在一堆机器的状态一些东西——然而在深度学习中,我们正在转移这些大矩阵——比如2048×2048,本质上是400万个32位浮点数。对于传统的HPC社区,这是一个十分非典型的all-reduce输入。传统的HPC社区实际上并不使用具有真正大数据规格的all-reduce。我认为随着深度学习,越来越多的人意识到,真正大型矩阵的集合操作也非常重要。

  关于ring all-reduce和百度的GPU实现的详细解释在baidu research技术博客文章中有所介绍。该技术的一个变体也用于为PaddlePaddle(百度的开源深度学习框架)提供高性能节点的本地缩放。

  百度开源深度学习框架PaddlePaddle:https://github.com/PaddlePaddle/Paddle

★★★ 电脑店行业门户(www.diannaodian.com)独家文章,欢迎大家转载 ★★★

    上一篇:Azure VS AWS 谁更胜任HPC任务
    下一篇:没有了