[关闭]
@nataliecai1988 2017-09-29T15:29:37.000000Z 字数 9820 阅读 1538

腾讯黄明:一个优秀的机器学习平台的修炼之道

采访


摘要:

2017年6月16日,腾讯正式开源面向机器学习的第三代高性能计算平台 Angel,在GitHub上备受关注;2017年10月19日,腾讯T4专家黄明将为QCon上海的听众奉上一场Spark on Angel的知识飨宴。作为Angel的主要开发者和团队负责人,同时也是Spark的早期研究者和布道者,黄明的工作经历可以说同步了通用大数据平台到专用机器学习平台的转变历程。本文整理自InfoQ对黄明的采访问答,他将与大家分享人工智能时代大数据平台的演进之路,并结合Angel的开发经验谈谈如何打造一个优秀的机器学习平台,同时他也带来了开源后Angel的最新消息。


人工智能到底会给企业带来什么?——改变,机遇,和更大的挑战。

就如同电子阅读设备的出现改变了人们阅读的方式、偏好和习惯,但阅读依然是相当一部分人生活的重要组成部分;当人工智能技术终于从学界的温室走入业界,它也改变了企业收集和利用数据的方式、要求和目的,但却使大数据显得愈发重要。

早些年企业开始意识到数据的重要性并着手搭建自己的大数据平台,大数据成为业界关注的焦点,Hadoop、Spark等等各式各样的大数据框架、组件、平台层出不穷。人工智能时代来临,给大数据平台带来了新的变化,也提出了更高的要求。一方面,越来越多的应用场景要求数据处理具有更高的时效性,企业需要思考如何更快地采集数据并实时处理数据;另一方面,如Spark等大数据平台多是为通用数据处理而设计的,并非专用于机器学习任务,企业该如何更好地利用机器学习、深度学习等人工智能技术从实时数据中高效挖掘有价值的信息?随着机器学习、特别是深度学习在多个领域取得革命性成功,专用的机器学习平台应运而生。

人工智能时代,大数据平台的演进之路

InfoQ:您不仅是Angel的主要开发者和团队负责人,还是Spark的早期研究者和布道者,并且一直从事分布式计算和机器学习领域的开发工作。能否结合您的工作经历,为我们介绍一下通用大数据平台到专用机器学习平台的演进历程?是什么推动了这一转变?您认为将来大数据中心的大多数任务会变成机器学习任务吗?

黄明:其实推动这一转变的,是人类对更高层面的追求所驱动的,从知道已经发生了什么,到知道将要发生什么。

2010年刚到阿里时,业界的大数据刚刚兴起,当时有个很受欢迎的项目叫“淘宝指数”,可以告诉大家昨天最流行的是什么。底层的框架是Hadoop和Hive,当时集群最大的功能就是出各种各样的报表,天报表、月报表……到了年底的年报表会把集群拖得很慢。

2012年的时候,其实大家都有点受不了Hive的慢吞吞了,当时有两个大发展方向,一种是更快的SQL,一种是机器学习。其实我选Spark,不是因为它够快,而是因为它有机器学习的潜质。Matei在他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为核心来实现机器学习算法,这是个很大的约束和障碍。但是PS本身的发展在2015年也受到了深度学习的冲击,随着TensorFlow的出现,大家纷纷转向了深度学习的框架开发,基于PS的非深度学习框架受到冷落。

即使到了现在,很多大公司的数据中心依然有大量CPU机器,非深度学习算法还是需要在大规模数据集上进行分布式训练,这个领域是有空缺的,深度学习替代不了。

2015年到腾讯的时候,正值Angel这个专用的分布式机器学习平台在调研和开发中,其目的就是为了填补上面所说的空缺。后来我开始负责Angel项目,最终在2017年将其开源,整个开源的过程还是很不容易的(详情可查阅InfoQ早前报道1报道2)。

未来大多数任务依然需要以数据处理任务为基础,无论什么样的模型和算法,其前提都要建立在干净的数据之上。脱离了完整的数据预处理流程,在那里谈人工智能,其实都是不现实的。但是大部分未来的数据任务,它们的最终出口和末端,将会是机器学习任务

InfoQ:大数据平台早期多以离线批处理为主,实时计算作为补充;但是现在越来越多应用场景对数据处理有了高时效性的要求。腾讯大数据平台也历经了离线计算、实时计算、机器学习三个阶段的发展。如今对企业来说,对实时流计算的需求是否已经从nice to have变成must have?未来机器学习平台是否也会变成must have?未来批处理计算和实时流式计算在企业构建AI平台的基础架构中将分别起到什么作用(可以结合Angel来谈)?随着人工智能技术的发展,对实时流式计算的需求又会发生哪些变化?

黄明:对高科技企业来说,未来的实时计算能力和机器学习能力,都是AI能力的基础,确实是Must Have的。未来机器学习的训练(training)和推理(interfere)两个阶段的重要性会越来越接近,而实时计算能力的优势将主要体现在推理场景。

对于训练阶段,离线批量计算依然是主要场景,原因是:

  • 好的模型一般需要大量的数据,反复迭代并达到一定的精确度才能上线,尤其是好的深度学习模型,需要多张GPU卡训练多天才能完成。

  • 有很多的算法和场景不支持实时更新。由于算法本身或者场景本身的约束,模型还是需要离线训练好之后,再推送到手机端或者其它终端设备,不一定能实时更新。

  • 在线学习(Online Learning)这个领域,模型的持续优化和更新非常重要,但是其实它是个增量训练(Incremental Training)的过程,必须有个基础模型,而这个基础模型的质量,决定了后续的改进上限。

对于推理阶段,实时流式计算会快速发展,主要体现在:

  • 快速的数据接入,并进行适当的计算和推理,返回结果给用户。在深度学习时代,这个能力会比之前更加重要。一是因为模型比以前复杂,从浅层模型变成了深度模型,其推理计算不是简单的代数计算。二是因为传输数据比之前大,输入很可能是图片、声音、文本等,对吞吐量要求很高,而对推理过程依然要求在毫秒级别完成。这对推理的算力有更高的要求,在未来1-2年,这方面(从硬件到软件)将会涌现出很多初创公司。

  • 反复的小批量数据,作用于已有的模型改进,进行微调。这个和之前腾讯的大数据平台的第二阶段是一致的,未来依然会继续。但是重点也会从普通模型的增量训练,变成深度学习模型的增量训练。

论一个优秀的机器学习平台是如何炼成的

何为优秀的机器学习平台?

InfoQ:计算是机器学习平台的基础,但不是全部,一个优秀的机器学习平台需要具备哪些特性?

黄明:新的模型和算法思路是机器学习平台创新的源泉。一个机器学习平台要取得成功,需要具备如下五个特点:

  1. 合理的核心抽象

    一个机器学习平台,首先必须有一个灵魂,也就是它的核心抽象。当这个核心抽象和它要面对的模型和算法吻合的时候,这个平台就成功了一半。平台的核心抽象对于后期的发展制约非常明显,相比Spark单一的RDD核心抽象,TensorFlow中Tensor、Mutable Variables和 Dataflow Graphs的3个核心抽象则丰富了很多,也高度概括了深度学习中需要的各个元素。

  2. 充分的性能优化

    在核心抽象正确的基础上,再来谈谈性能。这在很大程度上涉及到平台对硬件层面的理解、调优和封装。

    先说单机,相信现在大家也都不相信用海量低配机器来做机器学习的理论了,毕竟已经不是MR的时代了。无论是CPU机器,还是GPU机器,大家都在往更强更快更便宜的方向走。单机涉及到性能比较重要的无非是CPU&GPU、内存&显存、硬盘。

    对于深度学习,单机GPU卡的配置(频率和显存)无疑是最重要。而对于非深度学习,硬盘是否是SSD、内存是否够大,这两方面相对会更重要,反而CPU经常会处于富余状态。在硬件条件合格的前提下,对于深度学习,制约平台的是CUDA和OpenCL的性能利用,即便是单机,一机8卡,怎么充分地利用和榨干其性能,对CUDA和OpenCL以及上层框架都需要进行很多调整。

    对于非深度学习,制约的因素则有所不同,Java系的莫过于JVM的调优了。怎样更好地使用内存,避免FullGC的产生,尽量让计算不落地,预读数据流水化处理,这些都是对平台设计的考验。如果存在CPU瓶颈的话,可以考虑用Intel的MKL加速库进行优化。硬盘如果能用NVME的SSD的话,当然是爽翻了的,但是价格就……

    既然是分布式机器学习平台(包括Angel),肯定会涉及到分布式的拓扑结构。目前来看,比较广泛应用的分布式拓扑结构依然是MR、MPI、PS三种。基本上MR已经出局了,MPI凭借深度学习卷土重来,和PS分庭抗礼,当然也有整体用PS、局部用MPI的做法,这也未尝不可。在确定网络拓扑之后,就要考虑网络加速了,10G网络已经成为标配,不要再用1G的网络跑机器学习,太低效了。RDMA和NVLINK这2个关键技术很值得关注,也是未来的方向。毕竟数据是直接显存落显存,还是走两道内存,差别是可想而知的,再加上不需要CPU开销,对性能带来的影响还是很可观的。不过就算是TensorFlow,最新的RDMA版本也还有不少的Bug,Angel的RDMA特性正在研发之中,希望也能尽快发布。

  3. 强大的容错能力

    谈到容错,不得不提一下MPI和MR。在MapReduce时代,海量低配机器理论的盛行,使MPI被打压得很厉害。但是到了深度学习时代,大家发现这些高配机器和HPC也差不了太多,十几万一台的机器,可靠性还是很强的,出错的概率很低,相比之下性能更加重要了,所以MPI这种模式又活了过来。

    但是从整体来看,在大型的数据中心,高配版本的CPU机器和几个T的训练数据,依然需要取得一定的均衡,这种情况下PS模式仍是最合适的。而且抛开多出来的Parameter Server机器,整体架构包括网络的通讯性能是最灵活和鲁棒的,可以做的容灾措施很多,代价也小。最终能够达到的效果会远胜于单纯的定期Checkpoint。

  4. 灵活的接口设计

    谈到接口,不得不先说一下语言。正如大家所知,2017年Python已经借助人工智能成为了第一编程语言。这在某种程度上,当然归功于TensorFlow的Python接口和PyTorch的转移阵营。但其实这两个框架的底层都是C++,而Angel和Spark的底层都是Java,Angel目前也正在开发Python接口。

    这个趋势的背后自然有其原因,Python语言的优势在于语法简单优美、上手难度低,而且资源丰富,有坚实的数值算法、图标和数据处理基础设施,建立了非常良好的生态环境,同时它又能与C无缝结合,借助py4j还能和Java结合。

    基于以上原因,Python能够为后台强劲的平台提供友好的接口层,达到简约而不简单的效果,也就难怪它会异军突起、一枝独秀了。

    但是Python再好,它始终只是后端接口的体现,不过是一张皮,体现出来的还是后台的接口设计,这时架构师的整体设计能力就很重要了。核心理念的封装和延伸、多个机器学习概念的整合、系统的分层和解耦、多个子系统的一致性,这些最终都会体现到接口上,从而决定用户基于接口编写算法的难度。

  5. 完善的周边系统

    TensorFlow最为人称道的,莫过于它的TensorBoard,初见简直就是惊艳,完全超越了同期产品。我当时还怀疑它是否会部分开源,不开源这个模块。Spark的DAG可视化也做得不错,可以很友好地看到RDD的依赖和运行进度。所以一个好的机器学习平台还是要在周边系统的完善上多做些功夫,如果用户基于你的平台,可以快速地调试和定位Bug,将会大大增强他们使用的信心,这会对用户形成很强的吸引力,最终也有助于形成更好的生态 。

机器学习平台选择:开源、商用还是自建?

InfoQ:使用外部开源或商用的机器学习平台,还是自己搭建机器学习平台,应该如何选择?

黄明:首先不太提倡使用商用闭源的机器学习框架(框架,不是指云平台),无论是多大的公司提供的。鉴于机器学习的重要性,如果把自己的核心业务放到其它公司手里,而且还是黑盒子,是很不明智的。而且AI工程师在调算法参数的过程中,常常需要查看代码实现,这时如果是闭源的框架,工程师只能调用库而看不到后台代码,会非常痛苦。

其次就是基于开源的机器学习框架,是自己搭机器学习平台,还是用商用的云方案了。影响决策的因素很多,主要要根据公司的大小和现状、数据的规模和敏感度、项目的周期和紧急度来判断。Angel基于社区Yarn方案,目的就是为了具有最好的可适用性,大部分公司现在因为Hadoop和Spark,也都搭建在Yarn之上,而无论是亚马逊云、阿里云还是腾讯云,都有对应的EMR方案,可以轻松地把Angel跑起来。

如何搭建一个优秀的机器学习平台?

黄明: 设计和搭建一个优秀的机器学习平台,最重要的是要有一支工程和算法能力充分互补的团队。

TensorFlow的前身是DistBelief,当时并不受深度学习界待见,大部分人做深度学习,要么Caffe,要么Torch,基本忽略DisBelief。后来TensorFlow推出,基本可以说是吊打Caffe和Torch。这里有个时间细节,Hilton是2013年加入Google的,而DistBelief是2011年开始的,TensorFlow是2015年发布的,Jeff Dean始终在Google负责这个项目。作为外人,不太可能知道Hilton到底对TensorFlow做出了什么样的贡献,但是很明显,DistBelief之前工程性太强,对深度学习的模型本质和算法友好度不足。Hilton加入后,第二代的TensorFlow的水准远远超越第一代的DistBelief。整个系统的设计,从上层到底层,从名字到周边,都透露着对深度学习工程师的贴心理解。这也是TensorFlow成功的原因。

相比之下,Spark没能成功转型为机器学习领域的领头羊,很大程度上也是没有找到这样一个契合的合伙人。MLLib模块的Owner话语权和活跃度太小,基本上决定了Spark的核心理念不会往机器学习发生革命性的变革,而DataFrame和DataSet的抽象演进和侵入底层,只会导致它在SQL和数据分析的路上越走越远。

所以,要设计和搭建一个成功的机器学习平台,无论用哪种方式,团队都需要有很强的工程和算法互补能力。而且在某种程度上,需要将学术界的创新能力和工程界的落地能力结合,才能使系统创新性和可靠性兼得。腾讯的Angel项目从一开始,就是北大的博士生和腾讯的工程师联合主导的项目,虽然远比不上Hilton和Jeff Dean这样的大神级别,但是模式是类似的,这是非常关键的一个要素。

其次,一个优秀的机器学习平台的创建,需要有大数据作为驱动。之前我们研究过Petuum,发现有些理念很不错,但是稳定性非常差,在大数据量下很难跑通,而且搭建也很难。所以在Angel的研发过程中,我们始终坚持以大数据为驱动的原则,各种Tricks和设计必须以最终压测通过为原则,并紧密依靠内部业务,通过场景落地来检验效果,以此保障系统的设计合理性和可用性。这点对于大公司来说其实没有太大的难度,只要有正确的理念和合作即可。但是这对于小公司来说则比较困难。所以这也是BAT等大企业开源的框架,和实验室或者初创公司出品的框架相比的优势之一。

最后,开发优秀的机器学习平台,需要保持很快的演进速度。TensorFlow现在经常被批评接口改动太快。其实最近Angel的接口改动也很多,而且有些不能向后兼容。这其中原因很简单,一个是因为业界的深度学习发展太快,新算法和模型、技巧层出不穷,作为一个平台必须能快速适应,不进则退。另一个原因是开发的人太多,即便是Angel目前Star还比较少,但是内部大量的并行开发,很难保证所有的模块都是合理的,定期重构是消除这些不合理的唯一方法。整体来看,只要是合理的重构,能提升性能,就标识着这个项目还在快速的生长期中,不失为一件好事。

InfoQ:创新工场的王咏刚老师在《为什么AI工程师要懂一点架构》中提到,研究不能只懂算法,算法实现不等于问题解决,问题解决不等于现场问题解决,架构知识是工程师进行高效团队协作的共同语言。能不能谈谈您对架构能力的看法?

黄明:如王永刚老师说的,要懂“一点”。这个词在我看来代表了两个意思:

  1. 确实需要懂,不能什么都不懂。企业里的算法工程师和数据科学家一定要有动手能力,不能整天只会做研究、写Paper,Matlab和单机版的Python试验一下,自己独占一台GPU机器玩得很开心,模型做完了不会上线,沟通一到工程部分就傻眼……这其实是处于一种半瘫痪的状态。这样的AI工程师,除非某方面特别强或特别突出,否则在企业是很难落地生存的。

  2. 不能指望懂太多。毕竟做算法和做工程的思维重点不一样,脑回路也不太一样,方法论也不一样。两方面都精通的人才,有,但是难找。这也是腾讯做Angel的初衷和目的,就是让算法工程师不需要懂太多底层框架优化,也能轻松地写出高效的、能分布式运行的生产代码,把一些通用的体系化的系统和架构细节屏蔽掉,这样才能极大地提高生产力。

    目前来看,包括Spark、TensorFlow这些比较好的框架,也正是因为它们能够使数据工程师和AI工程师,在适当屏蔽掉底层的架构细节后,依然能够写出高效的算法代码,才取得了成功。

开源以来Angel平台的新变化

InfoQ:通过您之前的投稿,大家对Angel平台开源前所做的一系列重构和升级已经有所了解,开源以来想必又有了不少新变化,能否介绍一下近三个月你们对Angel平台又做了哪些优化?

黄明:开源以来,我们又发布了2个小版本:1.1.0和1.2.0。主要是加入了新的算法,并做了各种优化,加强了稳定性,细化和完善之前的功能。Angel的定位是工业级可用的平台,所以比较看重大数据下的稳定性和性能,公布的算法大部分都是生产验证过的。

与此同时,根据用户的反馈,Angel开发团队正在开发2个功能:

  1. Python接口:接口优化和重构,以提升易用性

  2. Spark Streaming on Angel:支持在线学习,加入FTRL算法

这两个新功能应该在下2个版本就能够和大家见面了。至于深度学习的支持,我们也在进行了,但不会那么快就推出。

InfoQ:开源后这段时间,Angel平台的推广情况如何?有没有什么印象特别深刻的问题反馈?

黄明: Angel开源以来,其实我们并没有太刻意推广,包括我们在github上Public的第一天(6月16日)都没有准备做任何PR,不过由于之前的影响力,最终各大媒体都报道了。但是腾讯TOSA(开源委员会)最近一年对开源项目的扶持非常大,态度也很Open,所以我们主要是借着腾讯开源的力量在做这个事情,发了几篇文章。目前整体的Star数接近2.5k,我们比较欣慰的是Fork和Star数的比例比较好,看得出很多人还是对项目很有兴趣的。整体上,我们还是按照自己之前订好的节奏,小步快跑地进行新功能和版本的研发。

据我们的了解和接触,目前有部分公司(如小米、新浪微博等)正在试用Angel,也有了不少贡献者。我印象深刻的有几个:

  1. 来自华为的工程师,项目刚发布不久就提交了一个比较大的PR,帮忙把Netty版本升级了,后来他先把GraphX集成进来,但是这个方向不太对,就被Reject掉了,黄明觉得不太好意思。

  2. LightBGM的作者之一提了个Issue,和Angel开发团队互动了10个来回左右,详细地讨论了机器学习任务中MPI和PS的网络通讯开销,到底谁更小的问题,是很有意思的学术互动。

  3. 海外的一个MM主动帮忙翻译Angel的文档,之前为了开源,团队花了快1个月的时间边写文档边改Bug,所有文档加起来应该有100篇左右,翻译工作量巨大,她按照每天一篇的节奏,基本全部都翻译完了。

这些都让我们体会到了开源的力量和益处,一个平台在开源之后,会受到来自全球的关注,只要你用心经营,并保持良好的功能和性能,能帮助到用户,用户就会主动帮你做很多事情。而你的视野,也会变得更加的开阔。很多外部用户的需求非常客观到位,正是他们推动着我们往前走。

InfoQ:开源三个月后再看Angel,与一众机器学习平台相比(比如Spark、Pettum、GraphLab、TensorFlow),Angel的优势是什么?Angel的什么特性最能吸引机器学习开发者?

黄明:首先Petuum、GraphLab都不开源,其实并没有可比性。Angel在研发初期借鉴参考过Petuum的一些思路,但是后来实验中发现,Petuum在可靠性和稳定性上都达不到工业可用级别,所以基本上也都推倒重做了。

TensorFlow目前在深度学习上的地位还是遥遥领先,从6w个Star数就可略见一斑。但是在多机多卡的性能上TensorFlow的PS做得并不好,最近发布的最新版本还在尝试走MPI路线,这是业界难题之一。Angel目前不会独立做一套新的深度学习框架去和TensorFlow竞争,而是会发挥自身优势,把PS-Service做好做极致,来加速并行训练并形成互补。

和Spark比的话,目前Spark的重心还是在SparkSQL上,这从每个版本的PR数就可以看出来,MLLib的比例很小。这在某种程度上也是因为Spark的RDD本质局限导致的。相比之下,Angel重点是机器学习算法,而基于PSModel的编程模型可以让各种机器学习的优化和Tricks都很方便地实现,对于算法工程师非常友好。伴随着Python接口的提供,这个优势将会变得更加明显。

整体上来看,目前Angel依然是业界,包括国内和国外,唯一的比较成熟的开源参数服务器框架,能够在十亿级别的维度(其实百亿也可以,只不过我们自己没生产验证过,所以不这样说)、T级别大小的样本量规模下,开发和运行各种通用的机器学习算法的平台。另外值得一提的是,Angel的算法开发难度也比较低,有一位开源贡献者很轻松地在Angel上实现了阿里巴巴用于CTR预估的MLR算法,并贡献给Angel社区,这正是Angel团队所期待的。

机器学习平台的未来

InfoQ:您认为目前机器学习平台还存在哪些问题和难点?未来改进的重点是什么?

黄明:目前机器学习平台还存在3个大问题:算力的水平扩展、模型的高效压缩、快速的推理能力。

  1. 机器学习平台最大的难题还是算力。性能再强,接口再好用,底层优化再极致,单机能力终有极限,需要能水平扩展,而通用的多机多卡的分布式方案,目前还是个难题。这也是腾讯致力于Angel系统的原因,希望无论是CPU还是GPU,都能提供高性能分布式机器学习方案

  2. 除此之外,利用庞大的集群规模,长时间训练出来的精细模型,其大小一般比较大,像Angel训练出来的模型一般都会上百G,而深度学习的模型,多数也到G级别。这么大的模型,需要压缩之后才能给终端使用,如何在尽量减少精度损失的情况下压缩模型,也是平台需要考虑的。

  3. 最后一个是快速的推理能力。无论是终端推理,还是服务端推理,要求都是一样的,要尽可能快和高吞吐量。这时如何合理地利用和设计流式实时系统,来快速接入数据进行推理,也是平台需要考量的点。

在未来一年里,大部分的机器学习框架,包括深度学习框架,还是会围绕着上述几个问题重点发力。

这是Angel,也是其他机器学习框架都需要面对的另一项挑战。

采访嘉宾介绍

黄明,腾讯T4专家,Spark早期的研究者和布道者,对分布式计算和机器学习,有独到的经验和研究。目前于数据平台部担任海量计算组Leader,负责构建大规模分布式计算和机器学习平台,助力腾讯各大数据和机器学习业务快速发展。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注