*本文首发于 AI前线 ,欢迎转载,并请注明出处。git
2017年6月,腾讯正式开源面向机器学习的第三代高性能计算平台 Angel,在GitHub上备受关注;2017年10月19日,腾讯T4专家Andymhuang(黄明)将为QCon上海的听众奉上一场Spark on Angel的精彩分享。做为Angel的主要开发者和团队负责人,同时也是Spark的早期研究者和布道者,他的工做经历能够说同步了通用大数据平台到专用机器学习平台的转变历程。所以,在这以前,InfoQ对黄明的进行了一次采访问答,他将与你们分享人工智能时代的大数据平台演进之路,并结合Angel的开发经验,谈谈如何打造一个优秀的机器学习平台,以及开源后Angel的最新消息和将来规划。github
人工智能到底会给企业带来什么?——是改变,机遇,仍是更大的挑战?算法
在以前的大数据时代,企业开始意识到数据的重要性并着手搭建本身的大数据平台,大数据成为业界关注的焦点,Hadoop、Spark等等各式各样的大数据框架、组件、平台层出不穷。随着人工智能时代来临,大数据平台发生了新的变化,也提出了更高的要求。Spark等大数据平台可能是为通用数据处理而设计的,并不是专用于机器学习任务,企业该如何更好地利用机器学习、深度学习等人工智能技术从实时数据中高效挖掘有价值的信息?编程
在过去的两年(2015-2017),随着机器学习、特别是深度学习在多个领域取得革命性成功,各类专用的机器学习平台应运而生,百花齐放。Angel也是其中的一员。为此,咱们对其进行了采访。性能优化
InfoQ:您不只是Angel的主要开发者和团队负责人,仍是Spark的早期研究者和布道者,而且一直从事分布式计算和机器学习领域的开发工做。可否结合您的工做经历,为咱们介绍一下通用大数据平台到专用机器学习平台的演进历程?是什么推进了这一转变?您认为未来大数据中心的大多数任务会变成机器学习任务吗?服务器
黄明: 其实推进这一转变的,本质上是人们对更高层面的追求所驱动的。从了解过去,到预知将来;从有限空间的穷举,到无限空间的探索;从有监督的训练,到无监督的自我学习……不管是企业高管,仍是产品用户,你们都但愿能获得更加智能的服务,而也只有提供了这种服务级别的的产品和公司,才能在残酷的互联网竞争中胜出。网络
2010年,业界的大数据刚刚兴起,当时有不少受欢迎的项目都是统计类的,能够告诉你们昨天最流行的是什么。底层的框架是Hadoop和Hive,不少平台的最大的功能就是出各类各样的报表,天报表、月报表……这时的层次是知道发生了什么。架构
2012年,当时有两个大发展方向,一种是更快的SQL,一种是机器学习,涌现了不少的开源项目。Spark可以胜出,是由于它在二者中间取得了均衡,并展示了机器学习的潜质。Matei Zaharia等人在NSDI的RDD Paper提到了,Spark的目标是为了解决iterative algorithms和interactive data mining tools这两类问题,这个判断从如今来看,依然是正确的。Spark后来普及开来,目前不少公司依然会把Spark当成他们首选的通用数据处理平台兼机器学习平台。这是人们但愿知道,即将发生什么。框架
到了2014年,李沐等人在osdi关于Parameter Server的Paper中,给出了分布式机器学习一个更好的思路,后面Petuum和DMLC的ps-lite就出来了。Spark当时的跟进不是很到位,并且自己RDD的理念和PS也有些冲突。咱们当时还给Spark提过一个PR,后来也没被接受,可是引出了Glint。到如今为止,官方的Spark依然以RDD为核心来实现机器学习算法,这是个很大的约束和障碍。机器学习
可是在2015年,PS的发展也受到了深度学习的冲击,随着TensorFlow的出现,你们纷纷转向了深度学习的框架开发。包括微软的DMTK转向CNTK,DMLC的PS-Lite转向MXNet……可是实际上,不少公司的数据中心依然有大量CPU机器,大量的非深度学习算法仍是须要在大规模数据集上进行分布式训练,这个领域是有空缺的,深度学习替代不了。
腾讯是2015年开始调研和开发Angel,其目的就是为了填补上面所说的空缺,2016年,Angel开始在内部使用,到了2017年,Angel终于开源,整个开源的过程仍是很不容易的(详情可查阅InfoQ早前的报道)。但愿Angel仍是能把这块的空白填补上,成为一个专用的分布式机器学习平台,服务更多的公司内外产品,推进人们对更高层次的追求。
最后,将来数据中心,相信依然会有不少数据处理任务的任务。由于不管什么样的模型和算法,其前提都要创建在干净的数据之上。脱离了完整的数据预处理流程,谈机器学习和人工智能都是不现实的。可是大部分数据任务,它们的最终出口和末端,也将会是机器学习和人工智能的任务,由于若是没有了这个终点,前面的数据处理,也将是毫无心义的,能把控住末端的人,才是最终的胜利者。
InfoQ:大数据平台早期多以离线批处理为主,实时计算做为补充,可是如今愈来愈多应用场景对数据处理有了高时效性的要求。腾讯大数据平台也历经了离线计算、实时计算、机器学习三个阶段的发展。将来批处理计算和实时流式计算在企业构建AI平台的基础架构中将分别起到什么做用?
黄明:对一个高科技企业来讲,实时计算能力和机器学习能力,都是AI能力的基础,确实是必备的。并且机器学习的训练(Training)和推理(Inference)两个阶段的重要性会并驾齐驱,实时计算能力的优点还将进一步辐射到推理场景。可是这并不表明离线批量计算不重要了,尤为是训练阶段,离线批量计算依然是主要场景,缘由是:
好的模型须要大量的数据,反复迭代并达到必定的精确度才能上线,尤为是效果好的深度学习模型,一般须要多张GPU卡,训练较长的时间,才能完成,因此这里高性能的分布式机器学习平台,必不可少。
有不少的算法和场景不支持实时更新,自己就存在约束,或者数学证实不成立,或者不支持流式叠加,因此模型仍是须要离线训练好以后,再推送到手机端或者其它终端设端。
在线学习(Online Learning)这个领域,模型的持续优化和更新的很是重要,可是老是须要一个基础模型,而这个基础模型的质量,很重要的制约了后续的改进效果。
综合以上3点,离线批量处理,依然会是很是重要和核心的场景,不可替代。可是实时流式计算会快速发展,尤为是在推理阶段。主要是由于在深度学习时代:
模型比之前复杂,从浅层模型变成了深度模型,其推理计算不是简单的代数计算。
传输数据比以前大,输入极可能是图片、声音、文本等,对吞吐量要求很高,而对推理过程依然要求在毫秒级别完成。这对推理的性能有更高的要求。
因此相信在将来1-2年,这方面,从硬件到软件都将会涌现出不少优秀的初创公司。
InfoQ:计算是机器学习平台的基础,但不是所有,在你看来,一个优秀的机器学习平台须要具有哪些特性?
黄明: 在机器学习界,有些人喜欢把调参和训练的过程,比喻为炼丹, 上升到”道”的层面。而道器相融,在我看来,那炼丹就须要一个好的丹炉了,也就是一个优秀的机器学习平台。它须要能为炼丹提供合适的火候,也就是为创新的模型和算法提供最佳的运行环境。所以,一个机器学习平台要取得成功,最好具有以下五个特色:
精辟的核心抽象
一个机器学习平台,必须有其灵魂,也就是它的核心抽象。当这个核心抽象和它要面对的模型和算法匹配时,这个平台就成功了一半。若是一开始就错误了,例如SQL做为平台的核心抽象,那么对后期的发展制约将会很是明显,无异于缘木求鱼,不管怎么努力都不会成功的。
Spark的RDD
核心抽象,很好的解决了分布式大数据的通用问题;而TensorFlow中Tensor
、Mutable Variables
和Dataflow Graphs
的3个核心抽象,高度归纳了深度学习中的各个元素。Angel目前的核心抽象是PSModel
,重点解决了分布式机器学习中模型切分,数据并行和模型并行,模式异步 这3大问题,基本上能够知足大部分非深度学习的机器学习需求。
充分的性能优化
在核心抽象正确的大前提下,性能是决定速度的关键。这就涉及了到平台层对硬件层的理解、调优和封装。去年咱们用500台高性能机器,得到了TeraSort比赛的冠军,也是这种性能优化能力的体现,并将其嫁接到了Angel之上。
如今已经不是MR的时代走海量低配机器路线。不管是CPU机器,仍是GPU机器,都在往更强更快的方向走。去年比赛咱们用的是很高性能的单机,包括IBM的PowerPC,512G的内存,多个NVME的SSD,RDMA的100G网络……都是业界的顶配。
可是光有硬件堆砌是不够的,平台要对硬件有充分的利用。对于非深度学习,Java系的莫过于JVM的调优了。怎样更好地使用内存,避免FullGC的产生,尽可能让计算不落地,预读数据流水化处理……这些都是对平台设计的考验。而对于深度学习,CUDA和OpenCL的性能利用,显存和内存的数据拷贝,浮点运算和定点运算的选择,一机多卡的内部通信……平台都须要进行不少调整,甚至于引入像XLA这样的黑科技。
既然是分布式机器学习平台,确定会涉及到分布式的拓扑结构。目前来看,比较成熟的分布式拓扑结构依然是MR、MPI、PS这3者。机器学习中,基本上MR已经出局了,MPI凭借深度学习卷土重来,和PS平起平坐,固然也有总体用PS、局部用MPI的作法,这也何尝不可。在肯定网络拓扑以后,就要考虑网络加速了。RDMA和NVLINK这2个关键技术很值得关注,也是将来的方向。毕竟数据是直接显存落显存,仍是走两次内存,差异是可想而知的,再加上不须要CPU开销,对性能带来的影响仍是很可观的。
全部这些优化,最后暴露给平台用户的,最好是越简单越好,平台可以依据简单的参数,自动选择最佳的性能通道,这才是对算法工程师和数据科学家意义最大的。
强大的容错能力
谈到容错,不得再也不提一下MPI和MR。在Hadoop时代,海量低配机器理论的盛行,使MPI被MR打压得很厉害。可是到了深度学习时代,你们发现这些高配机器和HPC也差不了太多,十几万一台的机器,可靠性仍是很强的,出错的几率很低,相比之下性能更加剧要了,因此MPI这种模式又活了过来。
都是从总体来看,规模上去以后,在大型的数据中心,高配版本的GPU机器和T级别的训练数据,对容错性依然须要取得必定的均衡,这种状况下PS模式还是最合适的。总体架构包括网络的通信性能是最灵活和鲁棒的,能够作的容灾措施不少,代价也小。最终可以达到的效果会远胜于简单的按期Checkpoint。
灵活的接口设计
正如你们所知,2017年Python已经借助人工智能成为了第一编程语言。这在某种程度上,固然归功于TensorFlow和PyTorch的神助攻,可是这个趋势背后有其必然缘由。Python语言的优点在于语法简单、上手难度低,并且资源丰富,有充实的数据、可视化和机器学习算法库,创建了很是良好的生态环境,同时它又能与C无缝结合,借助py4j还能和Java结合。基于以上缘由,Python可以为后台强劲的平台提供友好的接口层,达到简约而不简单的效果,也就难怪它会奇军突起、一枝独秀了。
但Python其实始终只是后台接口的体现,决定总体的,仍是后台的接口设计,这时架构师的总体设计能力就很是重要了。核心理念的封装和延伸、多个机器学习概念的整合、系统的分层和解耦、多个子系统的一致性,这些最终都会体现到接口上,从而决定用户基于接口编写算法的难度。
完善的周边系统
TensorFlow开源之初,吸引眼球的工具之一,莫过于它的TensorBoard,惊艳的超越了同期产品。当时还怀疑它是否会部分开源,不开源这个模块。一个好的机器学习平台仍是要在周边系统的完善上多作些功夫,若是用户基于你的平台,能够快速地调试和定位Bug,将会大大加强他们使用的信心,这会对用户造成很强的吸引力,最终也有助于造成更好的生态 。
黄明: 先讲个你们都知道的小插曲:TensorFlow的前身是DistBelief,当时并不太受深度学习界待见,大部分人作深度学习,要么Caffe,要么Torch,基本忽略DistBelief,后来TensorFlow推出,就很受欢迎。这里有个时间细节,Hinton是2013年加入Google的,而DistBelief是2011年开始研发的,TensorFlow是2015年发布的,Jeff Dean由始至终,都在Google负责这个项目。做为外人,不太可能知道Hinton到底对TensorFlow作出了什么样的贡献,可是效果是很明显的。DistBelief以前工程性太强,对深度学习的模型本质和算法友好度不足,Hinton加入后,第二代的TensorFlow的水准远远超越第一代的DistBelief。整个系统的设计,从上层到底层,从名字到周边,都透露着对深度学习工程师的贴心理解。这也是TensorFlow成功的缘由。
因此要设计和搭建一个优秀的机器学习平台,在我看来要具有以下3个条件:
首先,要搭建一支工程和算法模型能力都很强的团队。总体上的这个团队,须要很好的互补能力,要有算法工程师,也要有系统架构师,你们互相配合。算法工程师的数学功底和表达能力很重要,而系统架构师的理解能力和快速实现能力很重要。另外最好能将学术界的创新能力和工程界的落地能力结合,才能使系统创新性和可靠性兼得。腾讯的Angel项目从一开始,就是北大的博士生和腾讯的工程师联合主导的项目,虽然远比不上Hinton和Jeff Dean这样的大神级别,可是模式是相似的,这是很是关键的一个要素。
其次,须要有大数据做为驱动。以前咱们研究过Petuum,发现有些理念很不错,可是稳定性很是差,在大数据量下很难跑通,并且搭建也很难。因此在Angel的研发过程当中,咱们始终坚持以大数据为驱动的原则,各类Tricks和设计必须以最终压测经过为原则,并紧密依靠内部业务,经过场景落地来检验效果,以此保障系统的设计合理性和可用性。这点对于大公司来讲其实没有太大的难度,只要有正确的理念和合做便可。可是这对于小公司来讲则比较困难。因此这也是BAT等大企业开源的框架,和实验室或者初创公司出品的框架相比的优点之一。
最后,须要保持很快的演进速度。TensorFlow如今常常被批评接口改动太快。其实最近Angel的接口改动也不少,并且有些不能向后兼容。这其中缘由很简单,一个是由于业界的深度学习发展太快,新算法和模型、技巧层出不穷,做为一个平台必须能快速适应,不进则退。另外一个缘由是开发的人太多,即使是Angel目前Star还比较少,可是内部大量的并行开发,很难保证全部的模块都是合理的,按期重构是消除这些不合理的惟一方法。总体来看,只要是合理的重构,能提高性能,就标识着这个项目还在快速的生长期中,不失为一件好事。
InfoQ:创新工场的王咏刚老师在《为何AI工程师要懂一点架构》中提到,研究不能只懂算法,算法实现不等于问题解决,问题解决不等于现场问题解决,架构知识是工程师进行高效团队协做的共同语言。能不能谈谈您对架构能力的见解?
黄明: 王咏刚老师说的要懂“一点”。这个词在我看来表明了两个意思:
确实须要懂,不能什么都不懂。企业里的算法工程师和数据科学家必定要有动手能力,不能成天只会作研究、写Paper,Matlab和单机版的Python试验一下,本身独占一台GPU机器玩得很开心,模型作完了不会上线,沟通一到工程部分就聊不下去……实际上是处于一种很很差的状态。这样的AI工程师,除非某方面特别强或特别突出,不然在企业是很难落地生存的。
不能期望懂太多。毕竟作算法和作工程的思惟重点不同,脑回路也不太同样,方法论也不同。两方面都精通的人才,有,可是难找。这也是腾讯作Angel的初衷和目的,就是让算法工程师不须要懂太多底层框架优化,也能轻松地写出高效的、能分布式运行的生产代码,把一些通用的体系化的系统和架构细节屏蔽掉,这样才能极大地提升企业生产力。
目前来看,包括Spark、TensorFlow这些比较好的框架,也正是由于它们可以使数据工程师和AI工程师,在适当屏蔽掉底层的架构细节后,依然可以写出高效的算法代码,才取得了成功。
InfoQ:经过您以前的投稿,你们对Angel平台开源前所作的一系列重构和升级已经有所了解,开源以来想必又有了很多新变化,可否介绍一下近三个月大家对Angel平台又作了哪些优化?
黄明:开源以来,Angel低调的发布了2个小版本:1.1.0和1.2.0,主要是加入了新的算法和优化方法,增强了稳定性,细化和完善以前的功能。这3个月内的优化,以稳定和性能提高为主。由于Angel的定位是工业级可用的平台,因此很是看重大数据量下的稳定性和性能,咱们公布的算法都是生产验证过。同时咱们对Spark on Angel的接口进行了反复的重构,尽量和Angel自己的接口接近一致和复用,这方面的工做到时候会在此次QCon的大会重点介绍。
另外根据用户的反馈,Angel开发团队正在开发2个大功能,还没有发布,包括:
这两个新功能应该在下2个版本就可以和你们见面了。至于深度学习的支持,其实也在进行了,可是有些难度,会晚点就推出。
InfoQ:开源后这段时间,Angel平台的推广状况如何?有没有什么印象特别深入的问题反馈?
黄明: Angel开源以来,其实咱们并无太刻意推广,包括咱们在github上Public的第一天(6月16日)都没有准备作任何PR,不过因为以前的影响力,最终各大媒体都报道了。可是腾讯TOSA(开源委员会)最近一年对开源项目的扶持很是大,态度也很Open,因此咱们主要是借着腾讯开源的力量在作这个事情,发了几篇文章。目前总体的Star数接近2.5k,咱们比较欣慰的是Fork和Star数的比例比较高的,看得出不少人仍是对项目颇有兴趣的。总体上,咱们仍是按照本身以前定好的节奏,小步快跑地进行新功能和版本的研发。
据了解和接触,目前有部分公司(如小米、新浪微博等)正在试用Angel,也有了很多贡献者。印象深入的有几个:
华为的一位工程师,项目刚发布不久就提交了一个比较大的PR,帮忙把Netty版本升级了,很是给力。后来他想把GraphX集成进来,可是我以为这个方向不太对,就Reject掉了,不太好意思。
微软LightBGM的开发者之一提了个Issue,和Angel开发GBDT的同窗互动了10个来回左右,详细地讨论了机器学习任务中MPI和PS的网络通信开销到底谁更小的问题,进行了颇有意思的学术互动。
海外的一个用户主动帮忙翻译Angel的文档,以前为了开源,团队花了快1个月的时间边写文档边改Bug,全部文档加起来应该有100篇左右,翻译工做量巨大。但如今基本所有都翻译完了。
这些都让咱们体会到了开源的力量和益处,一个平台在开源以后,会受到来自全球的关注,只要你用心经营,并保持良好的功能和性能,能帮助到用户,用户就会主动帮你作不少事情。而你的视野,也会变得更加的开阔。不少外部用户的需求很是客观到位,正是他们推进着咱们往前走。
InfoQ:开源三个月后再看Angel,与一众机器学习平台相比(好比Spark、Petuum、GraphLab、TensorFlow),Angel的优点是什么?Angel的什么特性最能吸引机器学习开发者?
黄明:首先目前其实Petuum、GraphLab都不开源,没有可比性。Angel在研发初期借鉴参考过Petuum的一些思路,可是后来实验中发现,Petuum在可靠性和稳定性上都达不到工业可用级别,因此基本上也都推倒重作了。
和Spark比的话,目前Spark的重心仍是在SparkSQL上,这从每一个版本的PR数就能够看出来,MLLib的比例很小。这在某种程度上也是由于Spark的RDD本质局限致使的。相比之下,Angel重点是机器学习算法,而基于PSModel的编程模型可让各类机器学习的优化和Tricks都很方便地实现,对于算法工程师很是友好。伴随着Python接口的提供,这个优点将会变得更加明显。
TensorFlow目前在深度学习上的地位仍是遥遥领先,从7w个Star数就可略见一斑。可是在多机多卡的性能上TensorFlow的PS作得并很差,最近发布的最新版本还在尝试走MPI路线,这是业界难题之一。Angel目前不会独立作一套新的深度学习框架去和TensorFlow竞争,而是会发挥自身优点,把PS-Service作好作极致,来加速并行训练并造成互补。
关于传统机器学习算法的生命周期问题,我以为不用太担忧。很重要的一点是传统机器学习算法比深度学习更贴近problem solving而非模拟智能。深度网络模拟大脑结构,因此在人类擅长的智能领域优于传统算法,好比视觉听觉,各类对外界信号的理解……可是还有一些非智能领域,人大脑展示出各类认知缺陷(cognitive deficit),好比对模式是随机仍是真实的判断,对几率的认知,对风险评估等等。这些方面传统机器学习方法仍然更有效,不须要经过大量的野蛮暴力尝试,就能获得更好的结论。也许之后会改变。但目前传统思路的机器学习仍是有必要的,在不少场合,简单有用,包括腾讯的不少场景,仍是有刚需,因此Angel仍是要把它经营好。
总体上来看,目前Angel是业界,包括国内和国外,比较成熟的开源参数服务器框架,可以在十亿级别的维度(其实百亿也能够,只不过没生产彻底验证过,因此不这样宣传)、T级别大小的样本量规模下,开发和运行通用的机器学习算法的平台。另外值得一提的是,Angel的算法开发难度也比较低,有一位开源贡献者很轻松地在Angel上实现了阿里巴巴用于CTR预估的MLR算法,并贡献给Angel社区,这正是Angel团队所期待的。
InfoQ:您认为目前机器学习平台还存在哪些问题和难点?将来改进的重点是什么?
黄明:目前机器学习平台还存在3个大问题:算力的水平扩展、模型的高效压缩、快速的推理能力
机器学习平台最大的难题仍是算力。性能再强,接口再好用,底层优化再极致,单机能力终有极限,须要能水平扩展,而深度学习大规模通用的多机多卡的分布式方案,目前依然是个难题,即使TensorFlow也没解决得很好。这也是腾讯致力于Angel系统的缘由,但愿不管是CPU仍是GPU,咱们都能提供高性能分布式机器学习方案。
除此以外,利用庞大的集群规模,长时间训练出来的精细模型,其大小通常比较大,像Angel训练出来的模型通常都会上百G,而深度学习的模型,多数也到G级别。这么大的模型,须要压缩以后才能给终端使用,如何在尽可能减小精度损失的状况下,最大化的压缩模型,也是平台须要考虑的。
最后一个是快速的推理能力。不管是终端推理(手机端,无人驾驶车……),仍是服务端推理(广告,推荐……),要求都是同样的,要尽量速度快和高吞吐量。这时如何合理地利用和设计流式实时系统,来快速接入数据进行推理,也是平台须要考量的点。
在将来一年里,相信大部分的机器学习框架,包括深度学习框架,都会围绕着上述几个问题重点发力。这也是Angel须要面对的挑战和机遇。
Andymhuang(黄明),腾讯T4专家,Spark早期的研究者和布道者,对分布式计算和机器学习,有独到的经验和研究。目前于数据平台部担任海量计算组Leader,负责构建大规模分布式计算和机器学习平台,助力腾讯各大数据和机器学习业务快速发展。