如何选择合适的分布式机器学习平台
本文比较了机器学习平台设计方法和使用指南,是我和 Kuo Zhang 和 Salem Alqahtani 同学合作而成。 我们在 2016 年秋天写了这篇文章,并在 ICCCN'17(温哥华)提交了这篇文章。
机器学习,特别是深度学习(DL)在语音识别,图像识别和自然语言处理以及推荐/搜索引擎方面取得了成功。 这些技术在自主驾驶汽车,数字卫生系统,CRM,广告,物联网等方面都有广泛的应用。随着这些资本进入进一步推动技术变革,我们已经看到许多机器学习平台。
由于训练中涉及到的巨大的数据集和模型大小,机器学习平台通常是分布式 ML 平台,通常并行运行了 10 - 100 个 worker 来训练模型。 据估计,数据中心的绝大多数任务将在不久的将来成为机器学习任务。
于是我们决定从分布式系统的角度研究这些 ML 平台,分析这些平台的通信和控制瓶颈。 我们还研究了这些平台的容错性和是否易于编程。
我们根据 3 种基本设计方法对分布式 ML 平台进行分类:
基本数据流
参数服务器模型
高级数据流
我们简单介绍每种方法,使用 Apache Spark 作为基本数据流方法的示例,PMLS(Petrar)作为参数服务器模型的示例,TensorFlow 和 MXNet 作为高级数据流模型的示例。 我们提供性能评估的评估结果。 有关更多评估结果,请参阅论文。 不幸的是,作为一个来自学术界的小团队我们无法进行规模评估。
在这篇文章末尾,我将介绍分布式 ML 平台未来工作的总结和建议。 如果您已经有了这些分布式 ML 平台的经验,请直接跳到最后。
Spark
在 Spark 中,计算被建模为有向无环图(DAG),其中每个顶点表示弹性分布式数据集(RDD),每个边表示RDD上的操作。 RDD 是划分为逻辑(内存中或者交换到磁盘上)分区的对象集合。
在 DAG 上,从顶点A到顶点B的边缘E意味着RDD B是在RDD A上执行操作E的结果。有两种操作:转换和动作。 转换(例如,映射,过滤器,连接)对RDD执行操作并产生新的RDD。
Spark 用户将计算作为 DAG 进行建模,该 DAG 会转换并运行 RDD 上的操作。 DAG 被分阶段编译。 每个阶段作为一系列并行运行的任务(每个分区的一个任务)而执行。 窄依赖关系对于高效执行是有好处的,而宽依赖关系则引入瓶颈,因为它们会中断执行流水线并需要执行通信密集的操作。
通过在区分 DAG 阶段来达成 Spark 中的分布式执行。 该图显示了 master 的架构。 driver 包含两个调度程序组件,DAG 调度程序和任务调度程序,还有负责任务和协调 worker。
Spark 设计用于一般数据处理,而不是专门用于机器学习。 然而,在 Spark 上使用 MLlib,就可以在 Spark 上做 ML。 在基本设置中,Spark 将模型参数存储在 driver 节点中,而 worker 与 driver 进行通信,以便在每次迭代后更新参数。 对于大规模部署,模型参数可能和 driver 不匹配,并将作为 RDD 维护。 这引入了很多开销,因为需要在每次迭代中创建新的 RDD 以保存新模型参数。 更新模型需要在机器间混洗数据,这限制了Spark 的可扩展性。 这是 Spark 中的基本数据流模型(DAG)不足的地方。 Spark 不支持 ML 中需要的迭代过程。
PMLS
PMLS 专为 ML 设计的。 它引入了参数服务器(PS)以服务于迭代密集的 ML 训练过程。
PS(在图中的绿色框中显示)使用分布式内存键值存储来维护参数信息。 它可以复制和分片:每个节点作为模型(参数空间)的分片的主节点,以及其他分片的副本。 因此,PS相对于节点数量很容易扩展。
PS节点存储和更新模型参数,并响应worker的请求。 worker从其本地PS副本中请求最新的模型参数,并对分配给它们的数据集分区执行计算。
PMLS还采用了同步并行(SSP)模型,该模型放宽了在每次迭代结束时工人进行同步的批量同步平行(BSP)的限制。 SSP减少了worker的同步困难,确保最快的worker不能在最慢的worker之前进行。 由于处理过程的噪声容限,该一致性模型仍然适用于ML训练。 我在2016年4月的博客文章[1]中介绍过。
TensorFlow
Google 有一个基于分布式机器学习平台的参数服务器模型,名为 DistBelief。 (这是我对 DistBelief 论文的评论[2])可以看出,DistBelief 的主要问题是,它需要混写在 ML 应用程序的低级代码中。 Google 希望其任何员工能够编写 ML 代码,而不需要他们精通分布式执行 - 这与 Google 为大数据处理编写 MapReduce 框架的原因相同。
所以 TensorFlow 旨在实现这一目标。 TensorFlow 采用数据流范例,但计算图不需要 DAG 高级版本,但可以包括循环和支持可变状态。 我认为 Naiad[3] 设计可能对 TensorFlow 设计有一些影响。
TensorFlow 表示使用节点和边的有向图进行计算。 节点表示具有可变状态的计算。 边缘表示在节点之间传递的多维数据阵列(张量tensor)。 TensorFlow 要求用户静态地声明这个符号计算图,并且利用图的分区和重写达成分布式计算。 (MXNet,特别是 DyNet,可以动态声明符号计算图,这提高了编程的简单性和灵活性。)
在 tensorflow 分布式 ML 训练使用参数服务器的方法如图所示。 在 TensorFlow 中使用 PS 抽象时,可以使用参数服务器和数据并行。 TensorFlow 可以做更复杂的事情,但这需要编写自定义代码并进入未知领域。
一些评估结果
对于我们的评估,我们使用了 Amazon EC2 m4.xlarge 实例。 每个包含 4 个 vCPU(英特尔至强处理器E5-2676 v3)和 16GB RAM。 EBS 带宽为 750Mbps。 我们使用两种常用的机器学习任务进行评估:使用多层神经网络的 2 级逻辑回归和图像分类。 我只是在这里提供几张对比图,你可以查看我们的论文进行更多的实验。 我们的实验有几个限制:我们使用的机器少,不能测试规模。我们也仅限于 CPU 计算,并没有用 GPU 测试。
该图显示了逻辑回归执行的速度。 Spark 仅在 PMLS 和 MXNet 之后。
该图显示了 DNN 平台的速度。 与单层逻辑回归相比,Spark 的性能损失比两层神经网络更大。 这是因为需要更多的迭代计算。 我们将 driver 的参数保存在 Spark 中,而如果我们将参数保存在 RDD 中并且在每次迭代之后更新,情况会更糟。
该图显示了平台的 CPU 利用率。 Spark 应用程序似乎具有更高 CPU 利用率(序列化开销)。
结语和未来方向
ML / DL应用程序的并行计算并非很出色,从并发算法的角度来看略微无趣。 在分布式ML平台上的参数服务器是决定性因素。
就瓶颈而言,网络仍然是分布式ML应用程序的瓶颈。 与其在更先进的通用数据流平台上工作,不如提供更好的数据/模型,将数据/模型作为一等公民来处理。
但是,也可能会有一些惊喜和微妙之处。 在Spark中,CPU开销正在成为瓶颈[4]。Spark中使用的编程语言(即Scala / JVM)会显着影响其性能。 因此,需要更好的工具来进行分布式ML平台的监视和/或性能预测。 近来已经提出了一些解决Spark数据处理应用程序问题的工具,如Ernest[5]和CherryPick[6]。
分布式系统支持ML运行时还有许多开放性问题,例如资源调度和运行时性能改进。 通过对应用程序的运行时监控/分析,下一代分布式ML平台应为运行的任务提供计算,内存,网络资源的通用运行时弹性配置和调度。
最后还有编程和软件工程支持的问题。 适用于ML应用程序的[分布式]编程抽象是什么? 这还需要更多的分析ML应用程序的验证和验证(测试具有特别有问题输入的DNN)。
https://muratbuffalo.blogspot.com/2016/04/petuum-new-platform-for-distributed.html
https://muratbuffalo.blogspot.com/2017/01/google-distbelief-paper-large-scale.html
http://muratbuffalo.blogspot.com/2014/03/naiad-timely-dataflow-system.html
http://muratbuffalo.blogspot.com/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/
英文原文:http://muratbuffalo.blogspot.com/2017/07/a-comparison-of-distributed-machine.html
本文作者 Murat,由 Jesse 翻译,转载译文请注明出处,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
如何选择合适的分布式机器学习平台相关推荐
- FlyAI资讯:Uber正式开源分布式机器学习平台:Fiber
摘要:在过去的几年中,计算机不断增强的处理能力推动了机器学习的进步.算法越来越多地利用并行性,并依赖分布式训练来处理大量数据.然而,随之而来的是增加数据和训练的需求,这对管理和利用大规模计算资源的软件 ...
- PAI分布式机器学习平台编程模型演进之路
摘要: 在云栖计算之旅第5期-大数据与人工智能大会上,来自阿里云大数据事业部的九丰分享了<PAI分布式机器学习平台编程模型演进之路>.他主要介绍了在集团中使用机器学习解决大数据问题时如何通 ...
- sona:Spark on Angel大规模分布式机器学习平台介绍
Angel是一个基于参数服务器(Parameter Server)开发的高性能分布式机器学习平台,它基于腾讯内部的海量数据进行了反复的调优. Angel的核心设计理念围绕模型,将高维度的大模型切分到多 ...
- [MySQL]如何选择合适的分布式主键方案
文章目录 分布式主键是什么? 什么情况下使用分布式主键? 几种合适的分布式主键方案 分布式主键的应用 分布式主键是什么? 我们知道分布式,也知道主键,可将两个词组合起来"分布式主键" ...
- 开源项目介绍 | Angel-高性能分布式机器学习平台
2021腾讯犀牛鸟开源人才培养计划 开源项目介绍 滑至文末报名参与开源人才培养计划 报名提交项目Proposal Angel项目介绍 Angel-高性能分布式机器学习平台,是腾讯研发并开源的面向企业级 ...
- 如何选择合适的大数据分析平台的类型
大数据有很多算法和模型可以解决这些处理过程中的技术问题,并且为了最终用户的使用方便,它们大都被进一步的封装,形成了比较简单易用的操作平台.目前大数据技术平台有很多,归纳起来可以按照以下方式进行分类: ...
- 耐基梅隆大学教授邢波:Petuum,大数据分布式机器学习平台
2014年12月12-14日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中科院计算所与CSDN共同协办,以推进大数据科研.应用与产业发展为主旨的 2014中国大数据技术大会 (Big ...
- 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台
摘要:近年来,随着"大"数据及"大"模型的出现,学术界和工业界对分布式机器学习算法引起了广泛关注.针对这一刚需,阿里集团和蚂蚁金服设计了自己的分布式平台--鲲鹏 ...
- 【对标TensorFlow】阿里公开内部超大规模分布式机器学习平台,对此你怎么看?...
原文地址 近年来,随着"大"数据及"大"模型的出现,学术界和工业界对分布式机器学习算法引起了广泛关注.针对这一刚需,阿里集团和蚂蚁金服设计了自己的分布式平台-- ...
最新文章
- ViewPager onPageChangeListener总结
- 好的Java架构具备的5个特点
- 学霸网站-Beta版本发布说明
- WebAPI(part5)--排他操作
- 关于python的if条件语句,whilefor循环等的简单说。
- suse linux安装rpm包,linux – 如何为Suse创建RPM
- java 复杂 sql_复杂的SQL条件
- 引用头文件报错 .pch引用不了其他的.h文件
- python安装依赖比较慢的解决方法
- FATFS Copy Files
- Quartus-II 三种方式进行D触发器仿真
- 概念模型向逻辑模型的转换规则
- 悉数美剧《黑客军团》中的黑客工具
- python安装TA_Lib遇到问题
- 大牛揭秘:如何快速在阿里云搭建视频直播平台
- 汉字进行计算机识别的原理,计算机OCR文字识别技术的原理和未来发展趋势
- DEBUG:惠普打印机页边距总是不对
- 侍魂微信新服务器,侍魂手游2019年3月23日微信问答试炼答案
- 有道云笔记的markdown编辑器如何通过mathtype来写公式
- vue : 无法加载文件 C:\Users\Lenovo\AppData\Roaming\npm\vue.ps1。...无法在当前系统上运行该脚本。