基于Hadoop集群的大规模分布式深度学习

前言

在过去的十年里,Yahoo一直持续投资建设和扩展Apache Hadoop集群,到目前为止共有超过4万台服务器和600PB数据分布在19个集群上。正如在2015 Hadoop 峰会上介绍的,我们在自己的服务器上开发了可扩展的机器学习算法,用于分类、排序和计算词向量。目前,Hadoop集群已成为Yahoo大规模机器学习的首选平台。

深度学习(Deep Learning, DL)是雅虎很多产品的核心技术需求。在2015 RE.WORK深度学习峰会上,Yahoo Flickr团队(Simon OsinderoPierre Garrigues)阐述了深度学习如何被应用于场景检测、物体识别和计算美学。机器学习帮助Flickr自动完成给用户图片打标签,使得Flickr终端用户能够方便的管理和查找图片。

为使深度学习技术惠及更多的Yahoo产品,最近我们把此项技术迁移到自己的Hadoop集群上。基于Hadoop的深度学习主要有这些优点:

  • 深度学习过程可以直接在我们存储数据的Hadoop集群上完成。避免了数据在Hadoop集群和深度学习集群之间的不必要传输。
  • 深度学习可以被定义为一流的Apache Oozie工作流,使用Hadoop进行数据处理和Spark管道进行机器学习。
  • YARN支持深度学习。一个集群上可以同时进行多项深度学习实验。与传统方法相比,新方法事半功倍。在过去,我们有些项目组靠“记事本”手工调度GPU资源,这是很痛苦的,而且只对少数用户有效。

基于Hadoop的深度学习是深度学习的一个创新方法。业界现有的方法要求使用专用的集群,而基于Hadoop的深度学习不仅能达到专用集群的效果,还额外多出上述几项优点。

增强Hadoop集群

为了支持深度学习,我们在Hadoop集群上添加GPU节点。每个节点有4块Nvidia Tesla K80运算卡,每块卡配置2个GK210 GPU。这些节点的处理能力是我们Hadoop集群所使用的传统CPU的10倍。

在Hadoop集群上,GPU节点有两个独立网络接口,Ethernet和Infiniband。Ethernet作为对外通信的主要接口,Infiniband在GPU之间提供10倍以上速率的数据传输,并且支持通过RDMA直接访问GPU内存。

通过利用YARN最近推出的节点标签功能(YARN-796),我们可以在jobs中声明容器是在CPU还是GPU节点加载。GPU节点的容器能使用Infiniband以极高的速度交换数据。

分布式深度学习:Caffe-on-Spark

为了在这些强化的Hadoop集群上支持深度学习,我们基于开源软件库开发了一套完整的分布式计算工具,它们是Apache SparkCaffe。我们可以利用下面的命令行向集群GPU节点提交深度学习计算任务。

spark-submit –master yarn –deploy-mode cluster
–files solver.prototxt, net.prototxt
–num-executors <# of EXECUTORS>
–archives caffe_on_grid.tgz
–conf spark.executorEnv.LD_LIBRARY_PATH=“./caffe_on_grid.tgz/lib64”
–class com.yahoo.ml.CaffeOnSpark caffe-on-spark-1.0-jar-with-dependencies.jar
-devices <# of GPUs PER EXECUTOR>
-conf solver.prototxt
-input hdfs://
-model hdfs://

在上述命令行中,用户可以指定使用的Spark executor个数(–num-executors),每个executor分配的GPU个数(-devices),HDFS上存放训练数据的路径,以及模型在HDFS上的存储路径。用户使用标准Caffe配置文件来确定Caffe算法和深度网络的拓扑结构(ex.solver.prototxt, net.prototxt)。

如上图所示,在YARN的Spark加载了一些executor。每个executor分配到一个基于HDFS的训练数据分区,然后开启多个基于Caffe的训练线程。每个训练线程由一个特定的GPU处理。使用反向传播算法处理完一批训练样本后,这些训练线程之间交换模型参数的梯度值。这些梯度值在多台服务器的GPU之间以MPI Allreduce 形式进行交换。我们升级了Caffe,以支持在一台服务器上使用多个GPU,并以RDMA协议来同步DL模型。

Caffe-on-Spark让我们集Caffe与Spark二者之长处,将其应用于大规模深度学习,使深度学习任务如其它Spark应用一样易于操作。集群中的多个GPU被用于训练基于HDFS大规模数据集的模型。

性能测试

Caffe-on-Spark支持(a)多个GPU,(b)多台机器进行深度学习。为了体现我们方法的优势,我们在ImageNet 2012数据集上进行性能对比测试。

首先,我们在单个Spark executor中分别使用1个、2个、4个、8个GPU对AlexNet数据集进行深度学习。如下图所示,训练时间随着GPU数量增加而缩短。当GPU数量为4个时,我们仅花费单个GPU所需时间的15/43=35%就能取得50%的准确率。所有上述执行过程的批大小均为256。使用8个GPU相比4个GPU性能并没有显著提升。因为每个GPU处理的数据量太少而无法充分地利用硬件性能。

随后,我们又在GoogLeNet数据集上进行了分布式性能对比测试,该测试比AlexNet的测试更深,且使用了更多的卷积运算,因此需要更强的计算能力。在每一轮运算中,我们给每个GPU分配的批大小为32,当有n个GPU参与运算时,32n是最有效的大小。我们的分布式算法旨在生成模型并且达到和单个GPU相当的准确率。使用4台服务器(4x8个GPU)训练,能在10小时内使top-5准确率超过80%(20%的误差)。注意1个GPU训练40小时后也只能达到60%的top-5准确率(40%的误差)。

GoogLeNet规模随着GPU数量的增加而扩大。对于60%的top-5准确率(40%的误差),8个GPU能比1个GPU提速680%。下表显示了达到70%和80% top-5准确率的速度提升幅度。如果我们仔细调整批数据大小(并不是将批大小都设为32n),速度还能提升更多。

开源资源

秉承Yahoo的开源承诺,我们向github.com/BVLC/caffe上传了一部分代码:

#2114…允许Caffe在单台计算机上使用多个GPU

#1148…支持计算机之间以RDMA协议传输数据

#2386…提升了Caffe的数据管道和预取技术

#2395…增加计时信息

#2402…更改Caffe的IO依赖为可选

#2397…重构Caffe的解法代码

在接下来几周的后续文章中,我们将分享Caffe-on-Spark的具体设计和实现细节。如果社区有足够的兴趣,我们也许会开源实现的代码。请将您的想法告知我们bigdata@yahoo-inc.com

总结

这篇文章初步描述了将Apache Hadoop生态系统和深度学习集成在同一个异构(GPU+CPU)集群的做法。早期的性能对比结果使我们倍受鼓舞,并计划在Hadoop、Spark和Caffe投入更多精力来使得深度学习在我们的集群上更加有效。我们期待和开源社区的朋友们在相关领域的并肩作战。

原文发布时间为:2015-10-15

时间: 2024-09-17 03:52:28

基于Hadoop集群的大规模分布式深度学习的相关文章

【Hadoop Summit Tokyo 2016】操纵云上基于Hadoop 集群的YARN

本讲义出自Abhishek Modi在Hadoop Summit Tokyo 2016上的演讲,主要介绍了Qubole的Hadoop技术.Qubole的架构设计.短生命周期的Hadoop集群的相关内容以及面对的挑战以及YARN的自动扩展和不断发展的HDFS技术.

基于Hadoop集群的Hive安装

hadoop 版本号:hadoop-0.23.5 hive版本号:hive-0.8.1 derby版本号:db-derby-10.9.1.0 mysql版本号:mysql-5.1.47(linux redhat 安装时已经安装) 首先是hive的嵌入式模式的安装, 在hive嵌入式安装时默认的数据库是derby, 嵌入式模式的安装无法用于实际的工作, 即这种模式的运行环境无法支持双向同步或是集群工作. 但是可以用来对hive安装是否正确起到测试和调配作用, 待到嵌入模式下hive正确运行后, 可

一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构.  注意:HADOOP的核心组件有: 1)HDFS(分布式文件系统) 2)YARN(运算资源调度系统) 3)MAPREDUCE(分布式运算编程框架)       Hadoop 中的分布式文件系统 HDFS 由一个管理结点 ( NameNode

浅谈大规模Hadoop集群自动化部署与运维

文章讲的是浅谈大规模Hadoop集群自动化部署与运维,2013年11月22-23日,作为国内唯一专注于Hadoop技术与应用分享的大规模行业盛会,2013 Hadoop中国技术峰会(China Hadoop Summit 2013)于北京福朋喜来登集团酒店隆重举行.来自国内外各行业领域的近千名CIO.CTO.架构师.IT经理.咨询顾问.工程师.Hadoop技术爱好者,以及从事Hadoop研究与推广的IT厂商和技术专家将共襄盛举. ▲IT168专题报道:http://www.it168.com/r

【Hadoop Summit Tokyo 2016】Rakuten是如何解决由于大规模多租户Hadoop集群造成的迷之问题的

本讲义出自Tomomichi Hirano在Hadoop Summit Tokyo 2016上的演讲,主要分享了Rakuten公司遇到的大规模多租户Hadoop集群造成的迷之问题:从来不结束任务.数据结点冻结.命名结点冻结.命名节点重新启动后出现高负载以及在解决上述问题中获取的经验教训,并且分享了Rakuten的服务器配置和管理经验.

基于OSS存储搭建Hadoop集群

简介 本文以Ubuntu操作系统为例,介绍基于Aliyun OSS的hadoop-3.0.0-beta1的集群环境搭建过程,示例的集群环境包括1个master和2个slave节点(slave1和slave2).请参考官方文档. 操作账户默认使用root账户 注意:为了方便用户操作,减少错误发生,本文假定所有操作都是使用root账户:如果使用非root,请根据自己的实际情况进行操作步骤的修订. 在各个节点上操作目录均为/home/hadoop目录 所有下载软件包的存放和操作目录为:/home/ha

完全分布模式hadoop集群安装配置之二 添加新节点组成分布式集群

前文说到如何搭建集群中第一个节点,这篇将说到如何向集群添加节点.这篇是基于前文的,没有看过前文的可以参考此链接:http://www.cnblogs.com/mikelij/archive/2012/03/06/2380937.html   2 向集群添加节点     前文已经建立了一个节点的hadoop集群.现在要做的添加节点.安装JDK, 创建hadoop用户等见前文.这里就不重复了.   2.1 检查主机名,修改/etc/hostname, /etc/hosts   新节点需要在这个集群里

【Hadoop】 分布式Hadoop集群安装配置

第一次安装hadoop 集群,记录其安装过程! 1 前期准备,配置所有的机器的/etc/hosts 文件 # cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1       rac localhost ::1             rac3 localhost 10.250.7.225  

分布式集群-ambari到底能不能管理监控已存在的hadoop集群?

问题描述 ambari到底能不能管理监控已存在的hadoop集群? 在安装ambari之前,hadoop集群已经跑了一段时间,现在又想直接安装ambari对其进行管理监控,尝试了几次都没成功,求用过的大神指导一下. 解决方案 可以管理监控已存在的hadoop集群 解决方案二: 我也想知道,同问啊啊啊啊 解决方案三: 请问楼上,是怎么解决的呢?现在我也遇到了这个问题 解决方案四: 这个问题可以解决吗?我有一个现有的hadoop系统,能不能用Ambari接管过来,不需要重新安装Hadoop 解决方案