前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大规模机器学习框架的四重境界(下)

大规模机器学习框架的四重境界(下)

原创
作者头像
张红林
修改于 2017-08-31 01:30:35
修改于 2017-08-31 01:30:35
2.6K0
举报
文章被收录于专栏:张红林的专栏张红林的专栏

《大规模机器学习框架的四重境界(上)》

3.2同步协议

本节假设读者已经对随机梯度优化算法比较熟悉,如果不熟悉的同学请参考吴恩达经典课程机器学习中对SGD的介绍,或者我之前多次推荐过的书籍《最优化导论》。

我们先看一个单机算法的运行过程,假设一个模型的参数切分成三个分片k1,k2,k3;比如你可以假设是一个逻辑回归算法的权重向量被分成三段。我们将训练样本集合也切分成三个分片s1,s2,s3;在单机运行的情况下,我们假设运行的序列是(k1,s1)、(k2,s1)、(k3、s1)、(k1、s2)、(k2、s2)、(k3、s2)。。。看明白了吗?就是假设先用s1中的样本一次对参数分片k1、k2、k3进行训练,然后换s2;这就是典型的单机运行的情况,而我们知道这样的运行序列最后算法会收敛。

现在我们开始并行化,假设k1、k2、k3分布在三个server node上,s1、s2、s3分布在三个worker上,这时候如果我们还要保持之前的计算顺序,则会变成怎样?work1计算的时候,work2和worker3只能等待,同样worker2计算的时候,worker1和work3都得等待,以此类推;可以看出这样的并行化并没有提升性能;但是也算简单解决了超大规模模型的存储问题。

为了解决性能的问题,业界开始探索这里的一致性模型,最先出来的版本是前面提到的[11]中的ASP模式,就是完全不顾worker之间的顺序,每个worker按照自己的节奏走,跑完一个迭代就update,然后继续,这应该是大规模机器学习中的freestyle了,如图所示

ASP的优势是最大限度利用了集群的计算能力,所有的worker所在的机器都不用等待,但缺点也显而易见,除了少数几个模型,比如LDA,ASP协议可能导致模型无法收敛。也就是SGD彻底跑飞了,梯度不知道飞到哪里去了。

在ASP之后提出了另一种相对极端的同步协议BSP,spark用的就是这种方式,如图所示

每个worker都必须在同一个迭代运行,只有一个迭代任务所有的worker都完成了,才会进行一次worker和server之间的同步和分片更新。这个算法和严格一直的算法非常类似,区别仅仅在于单机版本的batch size在BSP的时候变成了有所有worker的单个batch size求和得到的总的butch size替换。毫无疑问,BSP的模式和单机串行因为仅仅是batch size的区别,所以在模型收敛性上是完全一样的。同时,因为每个worker在一个周期内是可以并行计算的,所以有了一定的并行能力。

以此协议为基础的spark在很长时间内成为机器学习领域实际的霸主,不是没有理由的。此种协议的缺陷之处在于,整个worker group的性能由其中最慢的worker决定;这个worker一般称为straggler。读过GFS文章的同学应该都知道straggler的存在是非常普遍的现象。

能否将ASP和BSP做一下折中呢?答案当然是可以的,这就是目前我认为最好的同步协议SSP;SSP的思路其实很简单,既然ASP是允许不同worker之间的迭代次数间隔任意大,而BSP则只允许为0,那我是否可以取一个常数s?如图所示

不同的worker之间允许有迭代的间隔,但这个间隔数不允许超出一个指定的数值s,图中s=3.

SSP协议的详细介绍参见[14],CMU的大拿Eric Xing在其中详细介绍了SSP的定义,以及其收敛性的保证。理论推导证明常数s不等于无穷大的情况下,算法一定可以在若干次迭代以后进入收敛状态。其实在Eric提出理论证明之前,工业界已经这么尝试过了:)

顺便提一句,考察分布式算法的性能,一般会分为statistical performance和hard performance来看。前者指不同的同步协议导致算法收敛需要的迭代次数的多少,后者是单次迭代所对应的耗时。两者的关系和precision\recall关系类似,就不赘述了。有了SSP,BSP就可以通过指定s=0而得到。而ASP同样可以通过制定s=∞来达到。

3.3核心技术

除了参数服务器的架构、同步协议之外,本节再对其他技术做一个简要的介绍,详细的了解请直接阅读沐帅的博士论文和相关发表的论文。

热备、冷备技术:为了防止server node挂掉,导致任务中断,可以采用两个技术,一个是对参数分片进行热备,每个分片存储在三个不同的server node中,以master-slave的形式存活。如果master挂掉,可以快速从slave获取并重启相关task。

除了热备,还可以定时写入checkpoint文件到分布式文件系统来对参数分片及其状态进行备份。进一步保证其安全性。

Server node管理:可以使用一致性哈希技术来解决server node的加入和退出问题,如图所示

当有server node加入或退出的时候,server manager负责对参数进行重新分片或者合并。注意在对参数进行分片管理的情况下,一个分片只需要一把锁,这大大提升了系统的性能,也是参数服务器可以实用的一个关键点。

4. 大规模机器学习的四重境界

到这里可以回到我们的标题了,大规模机器学习的四重境界到底是什么呢?

这四重境界的划分是作者个人阅读总结的一种想法,并不是业界标准,仅供大家参考。

境界1:参数可单机存储和更新

此种境界较为简单,但仍可以使用参数服务器,通过数据并行来加速模型的训练。

境界2:参数不可单机存储,可以单机更新

此种情况对应的是一些简单模型,比如sparse logistic regression;当feature的数量突破百亿的时候,LR的权重参数不太可能在一台机器上完全存下,此时必须使用参数服务器架构对模型参数进行分片。但是注意一点,SGD的更新公式

w’=w-α

,其中

可以分开到单个维度进行计算,但是单个维度的w i =f(w)x i

这里的f(w)表示是全部参数w的一个函数,具体推倒比较简单,这里篇幅所限就不赘述了。只是想说明worker在计算梯度的时候可能需要使用到上一轮迭代的所有参数。

而我们之所以对参数进行分片就是因为我们无法将所有参数存放到一台机器,现在单个worker有需要使用所有的参数才能计算某个参数分片的梯度,这不是矛盾吗?可能吗?

答案是可能的,因为单个样本的feature具有很高的稀疏性(sparseness)。例如一个百亿feature的模型,单个训练样本往往只在其中很小一部分feature上有取值,其他都为0(假设feature取值都已经离散化了)。因此计算f(w)的时候可以只拉取不为0的feature对应的那部分w即可。有文章统计一般这个级别的系统,稀疏性往往在0.1%(or 0.01%,记得不是很准,大致这样)以下。这样的稀疏性,可以让单机没有任何阻碍的计算f(w)。

目前公司开源的angel和AILab正在做的系统都处于这个境界。而原生spark还没有达到这个境界,只能在中小规模的圈子里厮混。Angel改造的基于Angel的Spark则达到了这个境界。

境界3:参数不可单机存储,不可单机更新,但无需模型并行

境界3顺延境界2二来,当百亿级feature且feature比较稠密的时候,就需要计算框架进入到这层境界了,此时单个worker的能力有限,无法完整加载一个样本,也无法完整计算f(w)。怎么办呢?其实很简单,学过线性代数的都知道,矩阵可以分块。向量是最简单的矩阵,自然可以切成一段一段的来计算。只是调度器需要支持算符分段而已了。

境界4:参数不可单机存储,不可单机更新,需要模型并行

进入到这个层次的计算框架,可以算是世界一流了。可以处理超大规模的神经网络。这也是最典型的应用场景。此时不仅模型的参数不能单机存储,而且同一个迭代内,模型参数之间还有强的依赖关系,可以参见姐夫对distbelief的介绍里的模型切分。

此时首先需要增加一个coordinator组件来进行模型并行的concurrent控制。同时参数服务器框架需要支持namespace切分,coordinator将依赖关系通过namespace来进行表示。

一般参数间的依赖关系因模型而已,所以较难抽象出通用的coordinator来,而必须以某种形式通过脚本parser来生产整个计算任务的DAG图,然后通过DAG调度器来完成。对这个问题的介绍可以参考Erix Xing的分享[5]。

Tensorflow

目前业界比较知名的深度学习框架有Caffee、MXNet、Torch、Keras、Theano等,但目前最炙手可热的应该是google发布的Tensorflow。这里单独拿出来稍微分解下。

前面不少图片引自此文,从TF的论文来看,TF框架本身是支持模型并行和数据并行的,内置了一个参数服务器模块,但从开源版本所曝光的API来看,TF无法用来10B级别feature的稀疏LR模型。原因是已经曝光的API只支持在神经网络的不同层和层间进行参数切分,而超大规模LR可以看做一个神经单元,TF不支持单个神经单元参数切分到多个参数服务器node上。

当然,以google的实力,绝对是可以做到第四重境界的,之所以没有曝光,可能是基于其他商业目的的考量,比如使用他们的云计算服务。

综上,个人认为如果能做到第四重境界,目前可以说的上是世界一流的大规模机器学习框架。仅从沐帅的ppt里看他曾经达到过,google内部应该也是没有问题的。第三重境界应该是国内一流,第二充应该是国内前列吧。

5. 其他

5.1 资源管理

本文没有涉及到的部分是资源管理,大规模机器学习框架部署的集群往往

资源消耗也比较大,需要专门的资源管理工具来维护。这方面yarn和mesos都是佼佼者,细节这里也就不介绍了。

5.2 设备

除了资源管理工具,本身部署大规模机器学习集群本身对硬件也还是有些要

求的,虽然理论上来说,所有commodity机器都可以用来搭建这类集群,但是考虑到性能,我们建议尽量用高内存的机器+万兆及以上的网卡。没有超快速的网卡,玩参数传递和样本加载估计会比较苦逼。

6. 结语

从后台转算法以来,长期沉浸于算法推理的论文无法自拔,对自己之前的后台工程能力渐渐轻视起来,觉得工程对算法的帮助不大。直到最近一个契机,需要做一个这方面的调研,才豁然发现,之前的工程经验对我理解大规模机器学习框架非常有用,果然如李宗盛所说,人生每一步路,都不是白走的。

在一个月左右的调研中,脑子每天都充斥这各种疑问和困惑,曾经半夜4点醒来,思考同步机制而再也睡不着,干脆起来躲卫生间看书,而那天我一点多才睡。当脑子里有放不下的问题的时候,整个人会处于一种非常亢奋的状态,除非彻底想清楚这个问题,否则失眠是必然的,上一次这种状态已经是很多年前了。好在最后我总算理清了这方面的所有关键细节。以此,记之。Carbonzhang于2017年8月26日凌晨!

致谢

感谢wills、janwang、joey、roberty、suzi等同学一起讨论,特别感谢burness在TF方面的深厚造诣和调研。因为本人水平所限,错漏难免,另外还有相当多的细节因为篇幅限制并未一一展开,仅仅是从较高抽象层面上简述了下大规模机器学习框架的关键思路,其他如分片向量锁、通信协议、时钟逻辑、DAG调度器、资源调度模块等均为展开来讲,希望以后有机会能补上。

引用

  1. Wide & Deep Learning for Recommender Systems
  2. Deep Neural Networks for YouTube Recommendations
  3. https://www.zhihu.com/question/53851014
  4. TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems
  5. http://www.jianshu.com/p/00736aa21dc8
  6. Large Scale Distributed Deep Networks
  7. MapReduce: Simplified Data Processing on Large Clusters
  8. Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
  9. https://www.zhihu.com/question/55119470
  10. KunPeng: Parameter Server based Distributed Learning Systems and Its Applications in Alibaba and Ant Financial
  11. An Architecture for Parallel Topic Models
  12. Scaling Distributed Machine Learning with the Parameter Server
  13. Piccolo: Building fast, distributed pro- grams with partitioned tables 

  14. More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server
  15. Angel-A Flexible and Powerful Parameter Server;黄明ppt

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货 | 大规模机器学习框架的四重境界
1.背景 自从google发表著名的GFS、MapReduce、BigTable三篇paper以后,互联网正式迎来了大数据时代。大数据的显著特点是大,哪里都大的大。本篇主要针对volume大的数据时,使用机器学习来进行数据处理过程中遇到的架构方面的问题做一个系统的梳理。 有了GFS我们有能力积累海量的数据样本,比如在线广告的曝光和点击数据,天然具有正负样本的特性,累积一两个月往往就能轻松获得百亿、千亿级的训练样本。这样海量的样本如何存储?用什么样的模型可以学习海量样本中有用的pattern?这些问题不止是工
AI科技评论
2018/03/14
7450
干货 | 大规模机器学习框架的四重境界
大规模机器学习框架的四重境界
导语 :随着大数据时代的来临,使用机器学习算法对大规模数据处理逐渐成为各个业务的核心场景。如何利用相对廉价的机器搭建分布式超大规模机器学习集群是一件非常复杂的事情,对工程和算法都有极高的要求,本文尝试
张红林
2017/08/30
2.9K3
大规模机器学习框架的四重境界
面向高维度的机器学习的计算框架-Angel
简介 为支持超大维度机器学习模型运算,腾讯数据平台部与香港科技大学合作开发了面向机器学习的分布式计算框架——Angel 1.0。 Angel是使用Java语言开发的专有机器学习计算系统,用户可以像用Spark, MapReduce一样,用它来完成机器学习的模型训练。Angel已经支持了SGD、ADMM优化算法,同时我们也提供了一些常用的机器学习模型;但是如果用户有自定义需求,也可以在我们提供的最优化算法上层比较容易地封装模型。 Angel应用香港科技大学的Chukonu 作为网络解决方案, 在高维度机器学习
腾讯大数据
2018/01/26
1.1K0
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
机器之心报道 Tencent 深度学习是近些年来人工智能技术发展的核心,伴随而来的机器学习框架平台也层出不穷。到现在,一家科技巨头没有一个主导的机器学习平台都不好意思跟人打招呼,比如谷歌有 TensorFlow、微软有 CNTK、Facebook 是 Torch 的坚定支持者、IBM 强推 Spark、百度开源了 PaddlePaddle、亚马逊则是 MXNet 的支持者。而为了尽可能地获得开发者支持和抢占发展先机,很多平台都选择了开源。 在去年 12 月 18 日的腾讯大数据技术峰会暨 KDD China
机器之心
2018/05/08
9800
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
[源码解析] 机器学习参数服务器ps-lite 之(3) ----- 代理人Customer
目前有了邮局 (PostOffice)和通信模块小推车(Van),接下来就要看看邮局的客户Customer。
罗西的思考
2021/08/10
1.4K0
[源码解析] 机器学习参数服务器 Paracel (2)--------SSP控制协议实现
Paracel是豆瓣开发的一个分布式计算框架,它基于参数服务器范式来解决机器学习的问题:逻辑回归、SVD、矩阵分解(BFGS,sgd,als,cg),LDA,Lasso...。
罗西的思考
2021/08/19
5120
[源码解析] 机器学习参数服务器 Paracel (2)--------SSP控制协议实现
人机共生时代,分布式机器学习是如何加速的?
导语 | 机器学习技术在现代社会中发挥着越来越重要的作用,深刻地影响着各行各业。同时,也面对着海量数据和复杂问题的挑战。今天我们主要讨论分布式机器学习技术是如何处理海量数据,利用海量算力加速训练,使得机器学习过程变得越来越快的。 一、前言 近些年来,人工智能技术,尤其是机器学习技术在众多领域都发挥了越来越重要的作用,每个人一天的生活中都在不断地与其打交道。不论是打开短视频App浏览关心的新闻或八卦,还是打开购物App逛一逛,甚至只是打开手机也需要用到人脸解锁,机器学习技术已经完全融入了每个人的生活当中
腾讯云开发者
2021/09/03
7930
横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow
来源:机器之心 作者:Murat Demirbas 本文长度为3149字,建议阅读5分钟 本文为你介绍分布式机器学习平台所用的设计方法及未来研究方向。 [ 导读 ]分布式机器学习是机器学习领域的一大主要研究方向。近日纽约州立大学布法罗分校计算机科学与工程教授、Petuum Inc. 顾问 Murat Demirbas 和他的两位学生一起发表了一篇对比现有分布式机器学习平台的论文,对 Spark、PMLS 和 TensorFlow 等平台的架构和性能进行了比较和介绍。Murat Demirbas 教授在论
数据派THU
2018/01/29
2K0
横向对比三大分布式机器学习平台:Spark、PMLS、TensorFlow
云原生分布式深度学习初探
大规模数据以及大型的神经网络结合在很多机器学习的任务上带来了超凡的表现。在训练深度学习模型的时候,当数据以及参数量变大的时候计算资源是决定我们算法迭代速度的关键要素之一。
溪歪歪
2020/09/09
1.6K1
云原生分布式深度学习初探
[源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
Horovod 是Uber于2017年发布的一个易于使用的高性能的分布式训练框架,在业界得到了广泛应用。
罗西的思考
2021/06/10
2.2K0
[源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
谢澎涛:如何评价Eric Xing实验室做的Petuum分布式机器学习平台?
Petuum是一个专门针对机器学习的分布式平台,Spark以数据流应用为主,所以二者的应用对象不同。Spark有一个机器学习库MLLib, 但构建于数据流操作之上,并非针对机器学习算法的特点而设计。 机器学习算法和计算机领域的其他算法相比,有自己的一些独特特点。例如,(1)迭代性:模型的更新并非一次完成,需要循环迭代多次; (2)容错性:即使在每个循环中产生一些错误,模型最终的收敛不受影响;(3)参数收敛的非均匀性:模型中有些参数经过几个循环便不再改变,其他参数需要很长时间收敛。等等。这些特点决定了机器学
用户1737318
2018/06/05
9160
Tensorflow框架是如何支持分布式训练的?
大数据时代的互联网应用产生了大量的数据,这些数据就好比是石油,里面蕴含了大量知识等待被挖掘。深度学习就是挖掘数据中隐藏知识的利器,在许多领域都取得了非常成功的应用。然而,大量的数据使得模型的训练变得复杂,使用多台设备分布式训练成了必备的选择。
AI科技大本营
2019/05/06
1.5K0
Tensorflow框架是如何支持分布式训练的?
基于Spark的大规模机器学习在微博的应用
众所周知,自2015年以来微博的业务发展迅猛。如果根据内容来划分,微博的业务有主信息(Feed)流、热门微博、微博推送(Push)、反垃圾、微博分发控制等。每个业务都有自己不同的用户构成、业务关注点和数据特征。庞大的用户基数下,由用户相互关注衍生的用户间关系,以及用户千人千面的个性化需求,要求我们用更高、更大规模的维度去刻画和描绘用户。大体量的微博内容,也呈现出多样化、多媒体化的发展趋势。 一直以来,微博都尝试通过机器学习来解决业务场景中遇到的各种挑战。本文为新浪微博吴磊在CCTC 2017云计算大会Spa
CSDN技术头条
2018/02/13
1.5K0
基于Spark的大规模机器学习在微博的应用
研学社•架构组 | CoCoA:大规模机器学习的分布式优化通用框架
机器之心原创 作者:Yanchen Wang 参与:panda 去年,Michael I. Jordan 实验室发表论文《CoCoA: A General Framework for Communication-Efficient Distributed Optimization》提出了一种用于机器学习的分布式优化的通用框架 CoCoA。机器之心技术顾问 Yanchen Wang 对该研究进行了深度解读。 引言 在做深度学习时,现代数据集的规模必需高效的设计和开发,而且理论上算法也要进行分布式优化。分布
机器之心
2018/05/08
1.1K0
研学社•架构组 |  CoCoA:大规模机器学习的分布式优化通用框架
TalkingData大规模机器学习的应用
摘要:TalkingData目前提供应用统计分析、游戏运营分析、移动广告监测、移动数据DMP平台、移动行业数据分析等。随着各项业务快速发展,数据规模也越来越大,带来很大的挑战。本文将简要介绍我们应对这些挑战的一些经验。 TalkingData诞生于2011年,目前提供应用统计分析、游戏运营分析、移动广告监测、移动数据DMP平台、移动行业数据分析和洞察,以及企业级移动数据分析和挖掘的解决方案等产品和服务。随着各项业务快速发展,需要机器学习支撑的需求也越多越多,数据规模也越来越大,带来很大的挑战。而且Talki
用户1737318
2018/06/05
6740
分布式机器学习平台大比拼(附论文)
来源:将门创投 本文长度为2575字,建议阅读4分钟 本文为你介绍分布式机器学习平台的实现方法及未来研究方向。 本文选自纽约州里大学计算机系教授Murat和学生的论文,主要介绍了分布式机器学习平台的实现方法并提出了未来的研究方向。 论文>>https://www.cse.buffalo.edu/~demirbas/publications/DistMLplat.pdf 机器学习特别是深度学习为语音识别、图像识别、自然语言处理、推荐系统和搜索引擎等领域带来的革命性的突破。这些技术将会广泛用于自动驾驶、医疗
数据派THU
2018/01/29
1.8K0
分布式机器学习平台大比拼(附论文)
如何自己搭建一个机器学习框架?
过去半年,我们团队在机器学习平台上做过一些工作,因为最近看到几篇关于机器学习算法与工程方面的的文章,觉得十分有道理,萌发了总结一下这块的一些工作的念头,我最近工作主要分为两块:1,机器学习框架的研发、机器学习平台的搭建;2,基础NLP能力的业务支持。本篇文章会总结下在机器学习框架这部分系统工作上的一些工作,主要也分为两部分:1,经典框架的支持;2,自研框架的工作;
程序员小强
2019/08/20
2.1K0
如何自己搭建一个机器学习框架?
MapReduce解读
    MapReduce,学习分布式系统必读的经典佳作,写在本系列的开篇。文章按该paper的思路解析Map Reduce编程模型核心思想和关注点、案例及其实现
用户5921582
2019/07/29
9800
MapReduce解读
大模型有什么用,从技术上看
目前为止,大模型主要是以NLP为主,因为NLP抛弃了RNN序列依赖的问题,采用了Attention is All you need的Transformer结构,使得NLP能够演变出更多大模型。图像领域也不甘示弱,CNN大模型也开始陆续涌现。
计算机视觉研究院
2023/08/24
5980
大模型有什么用,从技术上看
【解析】腾讯大数据第三代高性能计算平台Angel
本月中旬,腾讯大数据在“腾讯大数据技术峰会暨KDD China技术峰会”上宣布推出面向机器学习的第三代高性能计算平台——Angel,并预计于2017年第一季度开放其源代码,鼓励业界工程师、学者和技术人员大规模学习使用,激发机器学习领域的更多创新应用与良好生态发展。 那么,Angel是如何“以己之翼、聚众之力”,如何在蓬勃发展的机器学习浪潮中展现自己的光辉,请跟随我们,走进Angel。 Angel简介 Angel是腾讯大数据部门第三代的计算平台,使用Java和Scala语言开发,面向机器学习的高性能分布式计算
腾讯大数据
2018/01/29
1.2K0
【解析】腾讯大数据第三代高性能计算平台Angel
推荐阅读
相关推荐
干货 | 大规模机器学习框架的四重境界
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档