当前位置: 首页 » 行业资讯 » 机器人»分布式机器学习平台大比拼:Spark、PMLS、TensorFlow、MXNet
   

分布式机器学习平台大比拼:Spark、PMLS、TensorFlow、MXNet

 46.1K
     [点击复制]
放大字体  缩小字体 发布日期:2017-09-13   浏览次数:505
核心提示:  本论文从散布式体系的角度展开针对以后一些机械进修平台的研讨,综述了这些平台所应用的架构设计,对这些平台在通讯和掌握上的瓶颈、容错性和开辟难度停止剖析和比较,并对散布式机械进修平台的将来研讨任务提出

  本论文从散布式体系的角度展开针对以后一些机械进修平台的研讨,综述了这些平台所应用的架构设计,对这些平台在通讯和掌握上的瓶颈、容错性和开辟难度停止剖析和比较,并对散布式机械进修平台的将来研讨任务提出了一些建议。文中的任务由 Murat Demirbas 传授与他的研讨生 Kuo Zhang 和 Salem Alqahtani 配合完成。

  机械进修,特殊是深度进修,已在语音辨认、图象辨认和天然说话处置和近期在推举及搜刮引擎等范畴上获得了反动性的胜利。这些技巧在无人驾驶、数字医疗体系、CRM、告白、物联网等范畴具有很好的运用远景。固然,是资金引领和驱动了技巧的加快推动,使得我们在近期看到了一些机械进修平台的推出。

  斟酌到练习中所触及的数据集和模子的范围非常宏大,机械进修平台平日是散布式平台,安排了数十个甚至数百个并交运行的盘算节点对模子做练习。据估量在不远的未来,数据中间的年夜多半义务都邑是机械进修义务。

  我来自于散布式体系研讨范畴,是以我们斟酌从散布式体系的角度展开针对这些机械进修平台的研讨,剖析这些平台在通讯和掌握上的瓶颈。我们还斟酌了这些平台的容错性和易编程性。

  我们从设计办法大将机械进修平台划分为三个根本种别,分离是:根本数据流、参数 - 办事器模子和高等数据流。

  上面我们将对每类办法做扼要引见,以 Apache Spark 为例引见根本数据流,以 PMLS(Petuum)为例引见参数办事器模子,而高等数据流则应用 TensorFlow 和 MXNet 为例。我们比较了上述各平台的机能并给出了一系列的评价成果。要懂得具体的评价成果,可参考我们的论文。遗憾的是,作为一个小型研讨团队,我们没法展开年夜范围的评价。

  在本篇博文的最初,我给出了一些结论性要点,并对散布式机械进修平台的将来研讨任务提出了一些建议。对这些散布式机械进修平台已有必定懂得的读者,可以直接跳到本文开头。

  Spark

  在 Spark 中,盘算被建模为一种有向无环图(DAG),图中的每一个极点表现一个 RDD,每条边表现了 RDD 上的一个操作。RDD 由一系列被切分的对象(Partition)构成,这些被切分的对象在内存中存储并完成盘算,也会在 Shuffle 进程中溢出(Overflow)到磁盘上

  在 DAG 中,一条从极点 A 到 B 的有向边 E,表现了 RDD B 是在 RDD A 上履行操作 E 的成果。操作分为“转换”(Transformation)和“举措(Action)”两类。转换操作(例如 map、filter 和 join)运用于某个 RDD 上,转换操作的输入是一个新的 RDD。

  Spark 用户将盘算建模为 DAG,该 DAG 表现了在 RDD 上履行的转换和举措。DAG 进而被编译为多个 Stage。每一个 Stage 履行为一系列并交运行的义务(Task),每一个分区(Partition)对应于一个义务。这里,无限(Narrow)的依附关系将有益于盘算的高效履行,而广泛(Wide)的依附关系则会引入瓶颈,由于如许的依附关系引入了通讯密集的 Shuffle 操作,这打断了操作流 。

  Spark 的散布式履行是经由过程将 DAG Stage 划分到分歧的盘算节点完成的。上图清楚地展现了这类“主机(master)- 任务者(worker)”架构。驱动器(Driver)包括有两个调剂器(Scheduler)组件,即 DAG 调剂器和义务调剂器。调剂器对任务者分派义务,并调和任务者。

  Spark 是为通用数据处置而设计的,并不是公用于机械进修义务。要在 Spark 上运转机械进修义务,可使用 MLlib for Spark。假如采取根本设置的 Spark,那末模子参数存储在驱动器节点上,在每次迭代后经由过程任务者和驱动器间的通讯更新参数。假如是年夜范围安排机械进修义务,那末驱动器能够没法存储一切的模子参数,这时候就须要应用 RDD 去包容一切的参数。这将引入年夜量的额定开支,由于为了包容更新的模子参数,须要在每次迭代中创立新的 RDD。更新模子会触及在机械和磁盘间的数据 Shuffle,进而限制了 Spark 的扩大性。这恰是根本数据流模子(即 DAG)的短板地点。Spark 其实不能很好地支撑机械进修中的迭代运算。

  PMLS

  PMLS 是专门为机械进修义务而设计的。它引入了称为“参数 - 办事器”(Parameter-Server,PS)的笼统,这类笼统是为了支撑迭代密集的练习进程。

  PS(在图中以绿色方框所示)以散布式 key-value 数据表情势存在于内存中,它是可复制和分片的。每一个节点(node)都是模子中某个分片的主节点(参数空间),并作为其它分片的二级节点或复制节点。如许 PS 在节点数目上的扩大性很好。

  PS 节点存储并更新模子参数,并呼应来自于任务者的要求。任务者从本身的当地 PS 拷贝上要求最新的模子参数,并在分派给它们的数据集分区上履行盘算。

  PMLS 也采取了 SSP(Stale Synchronous Parallelism)模子。比拟于 BSP(Bulk Synchronous Parellelism)模子 ,SSP 放宽了每次迭代停止时各个机械需做同步的请求。为完成同步,SSP 许可任务者间存在必定水平上的分歧步,并确保了最快的任务者不会抢先最慢的任务者 s 轮迭代以上。因为处置进程处于误差所许可的规模内,这类非严厉的分歧性模子仍然实用于机械进修。我已经揭橥过一篇博文专门引见这一机制。

  TensorFlow

  Google 给出了一个基于散布式机械进修平台的参数办事器模子,称为“DistBelief”(此处是我对 DistBelief 论文的综述)。就我所知,年夜家对 DistBelief 的不满足的地方重要在于,它在编写机械进修运用时须要混杂一些底层代码。Google 想使其任一雇员都可以在无需精晓散布式履行的情形下编写机械进修代码。恰是出于统一缘由,Google 对年夜数据处置编写了 MapReduce 框架。

  TensorFlow 是一种设计用于完成这一目的的平台。它采取了一种更高等的数据流处置范式,个中表现盘算的图不再须要是 DAG,图中可以包含环,并支撑可变状况。我以为 TensorFlow 的设计在必定水平上遭到了 Naiad 设计理念的影响。

  TensorFlow 将盘算表现为一个由节点和边构成的有向图。节点表现盘算操作或可变状况(例如 Variable),边表现节点间通讯的多维数组,这类多维数据称为“Tensor”。TensorFlow 须要用户静态地声明逻辑盘算图,并经由过程将图重写和划分到机械上完成散布式盘算。需解释的是,MXNet,特殊是 DyNet,应用了一种静态界说的图。这简化了编程,并进步了编程的灵巧性。

  如上图所示,在 TensorFlow 中,散布式机械进修练习应用了参数 - 办事器办法。当在 TensorFlow 中应用 PS 笼统时,就应用了参数 - 办事器和数据并行。TensorFlow 宣称可以完成更庞杂的义务,然则这须要用户编写代码以通向那些未摸索的范畴。

  MXNet

  MXNet 是一个协同开源项目,源自于在 2015 年涌现的 CXXNet、Minverva 和 Purines 等深度进修项目。相似于 TensorFlow,MXNet 也是一种数据流体系,支撑具有可变状况的有环盘算图,并支撑应用参数 - 办事器模子的练习盘算。异样,MXNet 也对多个 CPU/GPU 上的数据并行供给了很好的支撑,并可完成模子并行。MXNet 支撑同步的和异步的练习盘算。下图显示了 MXNet 的重要组件。个中,运转时依附引擎剖析盘算进程中的依附关系,对不存在互相依附关系的盘算做并行处置。MXNet 在运转时依附引擎之上供给了一个中央层,用于盘算图和内存的优化。

  MXNet 应用检讨点机制支撑根本的容错,供给了对模子的 save 和 load 操作。save 操作将模子参数写入到检讨点文件,load 操作从检讨点文件中读取模子参数。

  MXNet 应用描写式编程说话表述盘算为一个有向图,也支撑应用一些指令式编程去界说 tensor 的盘算和掌握流。MXNet 供给了多种说话(例如 C++、Python、R 和 Scala 等)编写的客户端 API。与 TensorFlow 一样,MXNet 的后台焦点引擎库异样是应用 C++ 编写的。

  部门评价成果

  在我们的试验中,应用了 Amazon EC2 m4.xlarge 实例。每一个实例具有 4 个由 Intel Xeon E5-2676 v3 完成的 vCPU,及 16GB 的内存,EBS 带宽是 750Mbps。我们对两种罕见的机械进修义务停止了试验,它们分离是二分类逻辑斯蒂回归和应用多层神经收集的图象分类。本文中只给出了部门成果图,更多的试验成果可拜见我们的论文。需指出的是,我们的试验具有一些局限性。起首,我们应用机械数目不年夜,不克不及测试扩大性。其次,我们也只应用了 CPU 盘算,并未测试 GPU 的应用情形。

  该图展现了各个平台对逻辑斯蒂回归的盘算速度。PMLS 和 MXNet 是最快的两个体系,TensorFlow 速度最慢,而 Spark 介于二者之间。对此,我们剖析以为是由多个缘由招致的。起首,比拟于 Spark 和 TensorFlow,PMLS 是一个轻量级体系,它是采取高机能 C++ 编程说话完成的,而 Spark 是应用运转在 JVM 上的 Scala 说话编写的。其次,PMLS 中包括的笼统较少,而 TensorFlow 中则具有过量的笼统。笼统增长了体系的庞杂度,并招致运转时开支。

  该图展现了 DNN 在各个平台上的速度。比拟于单层神经收集,当成长到两层神经收集时,因为须要更多的迭代盘算,Spark 的机能降低。我们将模子参数存储在 Spark 的驱动器中,由于驱动器可以包容这些参数。然则假如我们应用 RDD 坚持参数,并在每次迭代后做更新,成果能够会更差。

  该图展现了平台的 CPU 占用率。Spark 运用看上去具有偏高的 CPU 占用率,这重要来自于序列化的开支。有些后期任务也指出了统一成绩。

  结论及将来的研讨偏向

  机械进修和深度进修运用是高度可并行的,然则从并发算法角度看,要做到其实不那末轻易。可以说,参数 - 办事器办法最合适于散布式机械进修平台的练习义务。

  斟酌到瓶颈,收集仍然是散布式机械进修运用的瓶颈。比拟于更高等的通用数据流平台,更主要的是要提出对数据和模子的更好组织和介入机制。应将数据和模子视作一等国民。

  另外,还有其它一些身分对平台具有奥妙的影响。关于 Spark,CPU 开支成为比收集局限更严重的瓶颈成绩。Spark 应用的编程说话是 Scala 等 JVM 说话,这对 Spark 的机能具有明显的影响。是以存在着对更好的监控对象和对散布式机械进修平台机能猜测的需求。近期曾经涌现了一些对象,例如 Ernest 和 CherryPick,它们处理了一些 Spark 数据处置运用上的成绩。

  关于支撑机械进修的运转时散布式体系,仍然存在着一些开放成绩,例如资本调剂和运转时机能改良。斟酌到运用的运转时监控和机能剖析,下一代的散布式机械进修平台应供给对运转于平台上义务的盘算、内存、收集资本的运转时弹性设置装备摆设和调剂等才能。

  在编程和软件工程的支撑上,也异样有一些开放成绩。甚么是合适机械进修运用的散布式编程笼统?这些成绩还须要做进一步的研讨,并对散布式机械进修运用停止磨练和验证,例如应用特定成绩输出测试 DNN。

  参考文献

  论文原文:https://www.cse.buffalo.edu/~demirbas/publications/DistMLplat.pdf

  Learning Machine Learning: A beginner's journey,https://muratbuffalo.blogspot.com/2016/12/learning-machine-learning-beginners.html

  Paper Review. Petuum: A new platform for distributed machine learning on big data,https://muratbuffalo.blogspot.com/2016/04/petuum-new-platform-for-distributed.html

  Google DistBelief paper: Large Scale Distributed Deep Networks,https://muratbuffalo.blogspot.com/2017/01/谷歌-distbelief-paper-large-scale.html

  Paper summary: Making sense of Performance in Data Analytics frameworks (NSDI 15),https://muratbuffalo.blogspot.com/2017/05/paper-summary-making-sense-of.html

  Naiad: A timely dataflow system,http://muratbuffalo.blogspot.hk/2014/03/naiad-timely-dataflow-system.html

  Paper summary: Making sense of Performance in Data Analytics frameworks (NSDI 15),http://muratbuffalo.blogspot.hk/2017/05/paper-summary-making-sense-of.html

  https://spark-summit.org/east-2017/events/ernest-efficient-performance-prediction-for-advanced-analytics-on-apache-spark/

  https://blog.acolyer.org/2017/05/04/cherrypick-adaptively-unearthing-the-best-cloud-configurations-for-big-data-analytics/

  作者引见

  Murat Demirbas传授供职于 University at Buffalo,SUNY 的盘算机迷信与技巧系

只要你关注机器人,你就无法错过睿慕课

 
 
 
[ 行业资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]