Hadoop 2.0 上深度学习的解决方案

原文连接:https://www.paypal-engineering.com/tag/data-science/

摘要:伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的环境下运行。在通用的分布式计算环境中运行机器学习算法具有一系列的挑战。本文探讨了如何在一个Hadoop集群中实现和部署深度学习。

波士顿的 数据科学团队正在利用尖端工具和算法来优化商业活动,且这些商业活动是基于对用户数据中的深刻透析。数据科学大量使用机器算法,可以帮助我们在数据中识别和利用模式。从互联网大规模数据中获取透析是一项具有挑战性的任务,因此,能大规模运行算法是一个至关重要的需求。伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的环境下运行。在通用的分布式计算环境中运行机器学习算法具有一系列的挑战。

这里,我们探讨一下如何在一个Hadoop集群中实现和部署深度学习(一个尖端机器学习框架)。对于算法是如何适应运行在一个分布式环境中,我们提供了具体的细节。我们也给出了算法在标准数据集上的运行结果。

深度信任网络

深度信任网络(Deep Belief Networks, DBN)是在贪婪和无监督的条件下通过迭代和训练受限的玻耳兹曼机(Boltzmann Machines, RMB)而得到的图形模型。通过对如下可被观察的维度x和隐藏层hk之间相互连接的分布式进行建模,DBN被训练来提取训练数据的深层透析。

表达式1:DBN分布式

在下图中,输入层和隐藏层的关系是可以被观察到的。从高层次来看,第一层被作为RBM来训练,为原始输入x进行建模。输入的数据是个稀疏二进制维度,表明数据将会被分类,比如,一个二进制的数字图像。后续层把前面的层传递过来的数据(样本或activations)当作训练示例使用。层数可以通过经验来决定,以此来获得更好的模型性能,DBN支持任意多的层数。

图1:DBN层次

下面的代码片段表明了进入RBM的训练。在提供给RBM的输入数据中,有多个预定义的时间点。输入数据被分成小批量数据,为各个层计算weights、activations和deltas。

在所有的层都被训练以后,深度网络的参数调整使用受监督的训练标准。受监督的训练标准,比如,可以作为一个分类问题来设计,允许使用深度网络来解决分类问题。更复杂的受监督的标准可以用来提供如情景解读之类的有趣的结果,比如解释图片里展示的东西是什么。

基础构造

深度学习受到了广泛的关注,不仅仅是因为它可以得出比其他一些学习算法更优异的结果,也因为它可以在分布式设备上运行,允许处理大规模的数据集。深度网络可以在两个级别进行并行、层级别和数据级别[6]。对于层级别的并行,许多实现使用GPU数组来并行计算层级别activations和频繁同步它们。然而,这种方法不适合那种数据驻留在通过网络连接的多个机器的集群,因为有着较高的网络开销。对于数据层的并行,训练是在数据集上进行并行的,更适合分布式设备。Paypal的大部分数据存储在Hadoop集群上,因此能够运行那些集群上的算法是我们的首要任务。专用集群的维护和支持也是一个我们需要考虑的重要因素。然而,由于深度学习本质上是迭代的,像MapReduce这样的范式不适合运行这些算法。但是随着Hadoop2.0和基于YARN的资源管理的问世,我们可以编写迭代程序,同时可以精细地控制程序使用的资源。我们使用了IterativeReduce [7] , Hadoop YARN里面的一个用户编写迭代算法的程序,我们可以将它部署在一个运行Hadoop 2.4.1的Paypal集群中。

方法

我们实现了Hinton的核心算法,在[2]中引用的。由于我们的需求是分散运行在多个机器的集群中的算法,我们在这样的环境下使用了他们的算法。对于在多个机器上分散这个算法,我们参照了Grazia所提出的指南[6]。下面是对我们的实现做的详细总结:

  1. Master节点初始化RBM的weights。
  2. Master节点向Worker节点推送weights和splits。
  3. Worker节点在一个数据集时间点训练一个RBM层,换句话说,在一个Worker节点完全通过所有的split后,向Master发送更新后的weights。
  4. 在一个给定的时间点里,Master节点对来自所有Worker节点的weights求平均值。
  5. 在预定义的时间集(我们的例子中是50)中,重复3-5步操作。
  6. 第6步完成以后,有一个层就被训练了。后续的RBM层也重复这些步骤。
  7. 当所有的层都被训练以后,深度网络就会通过使用错误反向广播机制准确地调整好。

下图描述了在运行深度学习算法时的一个单个数据集时间点(步骤3-5)。我们注意到,这个范式可以被利用来实现一个主机可迭代的机器学习算法。

图2:用于训练的单个数据集时间点

下面的代码片段表明了在训练单个机器的DBN中所涉及的步骤。数据集首先被拆分成多个批次,然后多个RBM层会被顺序地初始化和训练。在RBM都被训练以后,它们会通过一个准确调整的错误反向广播相位。

我们使用了IterativeReduce[7]的实现很大程度是为了YARN管道。我们对实现做出了重大改革,可以将它利用到我们的深度学习算法实现。IterativeReduce的实现是为Cloudera Hadoop分布式而编写,它被我们重置了平台,以此来适应标准的Apache Hadoop分布式。我们还重写了实现,以此来使用[8]中描述的标准编程模型。特别是,我们需要YARN客户端API在ResourceManager和客户端程序之间进行通信。我们也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之间进行通信。

我们首先使用YARN API提交应用程序到YARN资源管理器:

在应用被提交以后,YARN资源管理器启动应用程序Master。如果必要的话,应用程序Master负责分配和释放Worker容器。程序Master使用AMRMClient来与资源管理器进行通信。

应用程序Master使用NMClient API在容器(主节点传递过来的)中运行命令。

一旦应用Master启动了它需要的Worker容器,它设置一个端口来和应用Master进行通信。对于我们深度学习实现来说,我们新增了一些方法,它们需要为原始的IterativeReduce接口提供参数初始化、逐层训练和精确调整信号。IterativeReduce使用Apache Avro IPC来实现Master和Worker之间的通信。

下面的代码片段表明了一系列涉及Master-Worker节点的分布式训练,Master向worker发送初始参数,然后Worker在部分数据上训练它的RBM。在Worker完成训练之后,它将结果发送至Master,Master将会综合这些结果。迭代完成以后,Master通过启动反向广播精确调整相位来完成流程。

结果

我们评估了使用MNIST手写数字识别[3]来实现的深度学习的性能。数据集包含手工标记的0-9的数字。训练集由60000张图片组成,测试集包含了10000张图片。

为了测量性能,DBN首先被预训练,然后在60000张照片中被精确调整,通过以上的步骤,DBN会在10000张测试图片上进行评估。在训练或者评估期间,没有对图片进行预处理。出错率是由为分类的图片总数与测试集中的图片总数的比率而得到。

当在每个RBM使用500-500-2000的隐藏单元,同时使用十个节点的分布式设备的时候,我们能达到最佳的分类错误率1.66%。错误率可堪比原始算法的作者所报告的1.2%(使用500-500-2000的隐藏单元)[2],和类似设置下的一些结果[3]。我们注意到原始实现是在单个机器上的,而我们的实现是在分布式机器上的。参数平均的这一步导致性能略微降低,然而将算法分布在多台机器上是利大于弊的。下面的表格总结出了在十个节点的集群上运行的每个层的隐藏单元数对应的错误率的变化。

表1:MNIST性能评估

深入思考

我们成功地部署了一个深度学习系统,我们相信它在解决一些机器学习问题过程中很有用处。此外,迭代降低抽象可以被利用来分布任何其它合适的机器学习算法,能够利用通用的Hadoop集群将会被证明非常有利于在大数据集上运行大型机器学习算法。我们注意到,我们的当前框架需要一些改进,主要围绕减少网络延迟和更先进的资源管理。另外,我们需要优化DBN框架,这样可以减少内部节点之间的通信。随着对集群资源的精确调整控制,Hadoop YARN框架给我们提供了更多的灵活性。

参考资料

[1] G. E. Hinton, S. Osindero, and Y. Teh. A fast learning algorithm for deep belief nets. Neural Computations, 18(7):1527–1554, 2006.

[2] G. E. Hinton and R. R. Salakhutdinov. Reducing the Dimensionality of Data with Neural Networks. Science, 313(5786):504–507, 2006.

[3] Y. LeCun, C. Cortes, C. J.C. Burges. The MNIST database of handwritten digits.

[4] Deep Learning Tutorial. LISA lab, University of Montreal

[5] G. E. Hinton. A Practical Guide to Training Restricted Boltzmann Machines. Lecture Notes in Computer Science Volume 7700: 599-619, 2012.

[6] M. Grazia, I. Stoianov, M. Zorzi. Parallelization of Deep Networks. ESANN, 2012

[7] IterativeReduce, https://github.com/jpatanooga/KnittingBoar/wiki/IterativeReduce

[8] Apache Hadoop YARN – Enabling Next Generation Data Applications,http://www.slideshare.net/hortonworks/apache-hadoop-yarn-enabling-nex

时间: 2024-08-28 09:09:08

Hadoop 2.0 上深度学习的解决方案的相关文章

推荐系统遇上深度学习(十)--GBDT+LR融合方案实战

推荐系统遇上深度学习(十)--GBDT+LR融合方案实战 0.8012018.05.19 16:17:18字数 2068阅读 22568 推荐系统遇上深度学习系列:推荐系统遇上深度学习(一)--FM模型理论和实践:https://www.jianshu.com/p/152ae633fb00推荐系统遇上深度学习(二)--FFM模型理论和实践:https://www.jianshu.com/p/781cde3d5f3d推荐系统遇上深度学习(三)--DeepFM模型理论和实践:https://www.

推荐系统遇上深度学习

推荐系统遇上深度学习(一)--FM模型理论和实践 https://www.jianshu.com/p/152ae633fb00 1.FM背景 在计算广告和推荐系统中,CTR预估(click-through rate)是非常重要的一个环节,判断一个商品的是否进行推荐需要根据CTR预估的点击率来进行.在进行CTR预估时,除了单特征外,往往要对特征进行组合.对于特征组合来说,业界现在通用的做法主要有两大类:FM系列与Tree系列.今天,我们就来讲讲FM算法. 2.one-hot编码带来的问题 FM(F

当推荐系统遇上深度学习

原文: Deep Learning Meets Recommendation Systems Published by Wann-Jiun Ma at ** January 24, 2017 https://blog.nycdatascience.com/student-works/deep-learning-meets-recommendation-systems/ Contributed by Wann-Jiun Ma. He is currently attending the NYC D

Hadoop 2.0工作原理学习

1 HDFS简介 1.1 Hadoop 2.0介绍 Hadoop是Apache的一个分布式系统基础架构,可以为海量数据提供存储和计算.Hadoop 2.0即第二代Hadoop系统,其框架最核心的设计是HDFS.MapReduce和YARN.其中,HDFS为海量数据提供存储,MapReduce用于分布式计算,YARN用于进行资源管理. Hadoop 1.0和Hadoop 2.0的结构对比: Hadoop 2.0的主要改进有: 1.通过YARN实现资源的调度与管理,从而使Hadoop 2.0可以运行

深度学习FPGA实现基础知识0(FPGA击败GPU和GPP,成为深度学习的未来?)

需求说明:深度学习FPGA实现知识储备 来自:http://power.21ic.com/digi/technical/201603/46230.html FPGA击败GPU和GPP,成为深度学习的未来? 最近几年,深度学习成为计算机视觉.语音识别.自然语言处理等关键领域中所最常使用的技术,被业界大为关注.然而,深度学习模型需要极为大量的数据和计算能力,只有更好的硬件加速条件,才能满足现有数据和模型规模继续扩大的需求.现有的解决方案使用图形处理单元(GPU)集群作为通用计算图形处理单元(GPGP

TensorFlow【机器学习】:如何正确的掌握Google深度学习框架TensorFlow(第二代分布式机器学习系统)?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 唐源 VGG REST   服务器 自 2015 年底开源到如今更快.更灵活.更方便的 1.0 版本正式发布,由 Google 推出的第二代分布式机器学习系统 TensorFlow一直在为我们带来惊喜,一方面是技术层面持续的迭代演进,从分布式版本.服务框架 TensorFlow Serving.上层封装 TF.Learn 到 Windows 支持.JIT 编译器 XLA.动态计算图框架 Fold 等,以及

为什么深度学习几乎成了计算机视觉研究的标配?

https://zhuanlan.zhihu.com/p/21533690 标签: 深度学习计算机视觉研究标配 2016-07-09 16:38 1951人阅读 评论(0) 收藏 举报  分类: 计算机视觉CV(308)  目录(?)[+] 本次CVPR 2016上,深度学习几乎成了如今计算机视觉研究的标配,人脸识别.图像识别.视频识别.行人检测.大规模场景识别的相关论文里都用到了深度学习的方法,加上Google,Facebook这样的大企业助力,很多人疑惑,为什么深度学习相比其它的AI实现方法

基于Spark的异构分布式深度学习平台

导读:本文介绍百度基于Spark的异构分布式深度学习系统,把Spark与深度学习平台PADDLE结合起来解决PADDLE与业务逻辑间的数据通路问题,在此基础上使用GPU与FPGA异构计算提升每台机器的数据处理能力,使用YARN对异构资源做分配,支持Multi-Tenancy,让资源的使用更有效. 深层神经网络技术最近几年取得了巨大的突破,特别在语音和图像识别应用上有质的飞跃,已经被验证能够使用到许多业务上.如何大规模分布式地执行深度学习程序,使其更好地支持不同的业务线成为当务之急.在过去两年,百

深度学习正在吞噬软件

Tips 原文作者: Pete Warden 原文地址:Deep Learning is Eating Software 几个星期前,当我和Andrej Karpathy一起喝酒的时候,我们讨论了我们认为机器学习在未来几年内的发展方向.Andrej抛出了"软件2.0"这个词,我立刻就嫉妒了,因为它抓住了我每天在数百个项目中看到的过程.我一直保持沉默,直到得到他的博客,但现在我也想扩展我的想法. 模式是现有的软件项目使用明确的编程逻辑进行数据处理,负责维护的团队发现他们可以用深度学习的解