Top
首页 > IT产品和服务 > 第一资讯 > 正文

道器相融,由Angel论一个优秀机器学习平台的自我修养

道器相融,由Angel论一个优秀机器学习平台的自我修养
发布时间:2017-10-14 15:38        来源:赛迪网        作者:

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

在之前的大数据时代,企业开始意识到数据的重要性并着手搭建自己的大数据平台,大数据成为业界关注的焦点,Hadoop、Spark 等等各式各样的大数据框架、组件、平台层出不穷。随着人工智能时代来临,大数据平台发生了新的变化,也提出了更高的要求。Spark 等大数据平台多是为通用数据处理而设计的,并非专用于机器学习任务,企业该如何更好地利用机器学习、深度学习等人工智能技术从实时数据中高效挖掘有价值的信息?

在过去的两年(2015-2017),随着机器学习、特别是深度学习在多个领域取得革命性成功,各种专用的机器学习平台应运而生,百花齐放,Angel 也是其中的一员。

 

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

 

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

黄明: 其实推动这一转变的,本质上是人们对更高层面的追求所驱动的。从了解过去,到预知未来;从有限空间的穷举,到无限空间的探索;从有监督的训练,到无监督的自我学习……无论是企业高管,还是产品用户,大家都希望能得到更加智能的服务,而也只有提供了这种服务级别的的产品和公司,才能在残酷的互联网竞争中胜出。

2010 年,业界的大数据刚刚兴起,当时有很多受欢迎的项目都是统计类的,可以告诉大家昨天最流行的是什么。底层的框架是 Hadoop 和 Hive,很多平台的最大的功能就是出各种各样的报表,天报表、月报表……这时的层次是知道发生了什么。

2012 年,当时有两大发展方向,一种是更快的 SQL,一种是机器学习,涌现了很多开源项目。Spark 能够胜出,是因为它在两者中间取得了均衡,并展现了机器学习的潜质。Matei Zaharia 等人在 NSDI 的 RDD Paper[1] 提到了,Spark 的目标是为了解决 iterative algorithms 和 interactive data mining tools 这两类问题,这个判断从现在来看,依然是正确的。Spark 后来普及开来,目前很多公司依然会把 Spark 当成他们首选的通用数据处理平台兼机器学习平台。这是人们希望知道即将发生什么。

到了 2014 年,李沐等人在 osdi 关于 Parameter Server 的 Paper[2] 中,给出了分布式机器学习一个更好的思路,后面 Petuum 和 DMLC 的 ps-lite 就出来了。Spark 当时的跟进不是很到位,而且本身 RDD 的理念和 PS 也有些冲突。我们当时还给 Spark 提过一个 PR[3],后来也没被接受,但是引出了 Glint。到现在为止,官方的 Spark 依然以RDD 为核心来实现机器学习算法,这是个很大的约束和障碍。

但是在 2015 年,PS 的发展也受到了深度学习的冲击,随着 TensorFlow 的出现,大家纷纷转向了深度学习的框架开发。包括微软的 DMTK 转向 CNTK,DMLC 的 PS-Lite 转向 MXNet……但是实际上,很多公司的数据中心依然有大量 CPU 机器,大量的非深度学习算法还是需要在大规模数据集上进行分布式训练,这个领域是有空缺的,深度学习替代不了。

腾讯是 2015 年开始调研和开发 Angel,其目的就是为了填补上面所说的空缺,2016 年 Angel 开始在内部使用,到了 2017 年,Angel 终于开源,整个开源的过程还是很不容易的(详情可查阅 InfoQ 早前的报道 [4][5])。希望Angel 能把这块空白填补上,成为一个专用的分布式机器学习平台,服务更多的公司内外产品,推动人们对更高层次的追求。

最后,未来数据中心,相信依然会有很多数据处理任务。因为无论什么样的模型和算法,其前提都要建立在干净的数据之上。脱离了完整的数据预处理流程,谈机器学习和人工智能都是不现实的。但是大部分数据任务,它们的最终出口和末端,也将会是机器学习和人工智能的任务,因为如果没有了这个终点,前面的数据处理,也将是毫无意义的,能把控住末端的人,才是最终的胜利者。

 

InfoQ大数据平台早期多以离线批处理为主,实时计算作为补充,但是现在越来越多应用场景对数据处理有了高时效性的要求。腾讯大数据平台也历经了离线计算、实时计算、机器学习三个阶段的发展。未来批处理计算和实时流式计算在企业构建 AI 平台的基础架构中将分别起到什么作用?

黄明:对一个高科技企业来说,实时计算能力和机器学习能力,都是 AI 能力的基础,确实是必备的。而且机器学习的训练(Training)和推理(Inference)两个阶段的重要性会并驾齐驱,实时计算能力的优势还将进一步辐射到推理场景。但是这并不代表离线批量计算不重要了,尤其是训练阶段,离线批量计算依然是主要场景,原因是:

好的模型需要大量的数据,反复迭代并达到一定的精确度才能上线,尤其是效果好的深度学习模型,通常需要多张GPU 卡,训练较长的时间,才能完成,所以这里高性能的分布式机器学习平台,必不可少。

有很多的算法和场景不支持实时更新,本身就存在约束,或者数学证明不成立,或者不支持流式叠加,所以模型还是需要离线训练好之后,再推送到手机端或者其它终端设端。

在线学习(Online Learning)这个领域,模型的持续优化和更新的非常重要,但是总是需要一个基础模型,而这个基础模型的质量,很重要的制约了后续的改进效果。

综合以上 3 点,离线批量处理,依然会是非常重要和核心的场景,不可替代。但是实时流式计算会快速发展,尤其是在推理阶段。主要是因为在深度学习时代:

模型比以前复杂,从浅层模型变成了深度模型,其推理计算不是简单的代数计算。

传输数据比之前大,输入很可能是图片、声音、文本等,对吞吐量要求很高,而对推理过程依然要求在毫秒级别完成。这对推理的性能有更高的要求。

所以相信在未来 1-2 年,这方面,从硬件到软件都将会涌现出很多优秀的初创公司。

 

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

 

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

黄明:在机器学习界,有些人喜欢把调参和训练的过程,比喻为炼丹, 上升到“道”的层面。而道器相融,在我看来,那炼丹就需要一个好的丹炉了,也就是一个优秀的机器学习平台。它需要能为炼丹提供合适的火候,也就是为创新的模型和算法提供最佳的运行环境。因此,一个机器学习平台要取得成功,最好具备如下五个特点:

1.精辟的核心抽象

一个机器学习平台,必须有其灵魂,也就是它的核心抽象。当这个核心抽象和它要面对的模型和算法匹配时,这个平台就成功了一半。如果一开始就错误了,例如 SQL 作为平台的核心抽象,那么对后期的发展制约将会非常明显,无异于缘木求鱼,无论怎么努力都不会成功的。

Spark 的 RDD 核心抽象,很好的解决了分布式大数据的通用问题;而 TensorFlow 中 Tensor、Mutable Variables 和 Dataflow Graphs 的 3 个核心抽象,高度概括了深度学习中的各个元素。Angel 目前的核心抽象是PSModel,重点解决了分布式机器学习中 模型切分,数据并行 和 模型并行,模式异步 这 3 大问题,基本上可以满足大部分非深度学习的机器学习需求。

2.充分的性能优化

在核心抽象正确的大前提下,性能是决定速度的关键。这就涉及了到平台层对硬件层的理解、调优和封装。去年我们用 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 开销,对性能带来的影响还是很可观的。

所有这些优化,最后暴露给平台用户的,最好是越简单越好,平台能够依据简单的参数,自动选择最佳的性能通道,这才是对算法工程师和数据科学家意义最大的。

3.强大的容错能力

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

都是从整体来看,规模上去之后,在大型的数据中心,高配版本的 GPU 机器和 T 级别的训练数据,对容错性依然需要取得一定的均衡,这种情况下 PS 模式仍是最合适的。整体架构包括网络的通讯性能是最灵活和鲁棒的,可以做的容灾措施很多,代价也小。最终能够达到的效果会远胜于简单的定期 Checkpoint。

4.灵活的接口设计

正如大家所知,2017 年 Python 已经借助人工智能成为了第一编程语言。这在某种程度上,当然归功于TensorFlow 和 PyTorch 的神助攻,但是这个趋势背后有其必然原因。Python 语言的优势在于语法简单、上手难度低,而且资源丰富,有充实的数据、可视化和机器学习算法库,建立了非常良好的生态环境,同时它又能与 C 无缝结合,借助 py4j 还能和 Java 结合。基于以上原因,Python 能够为后台强劲的平台提供友好的接口层,达到简约而不简单的效果,也就难怪它会奇军突起、一枝独秀了。

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

5.完善的周边系统

TensorFlow 开源之初,吸引眼球的工具之一,莫过于它的 TensorBoard,惊艳度超越了同期产品。当时还怀疑它是否会部分开源,不开源这个模块。一个好的机器学习平台还是要在周边系统的完善上多做些功夫,如果用户基于你的平台,可以快速地调试和定位 Bug,将会大大增强他们使用的信心,这会对用户形成很强的吸引力,最终也有助于形成更好的生态 。

InfoQ在您看来,如何才能高效搭建一个优秀的机器学习平台?

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

所以要设计和搭建一个优秀的机器学习平台,在我看来:

首先,要搭建一支工程和算法模型能力都很强的团队。整体上这个团队需要很好的互补能力,要有算法工程师,也要有系统架构师,大家互相配合。算法工程师的数学功底和表达能力很重要,而系统架构师的理解能力和快速实现能力很重要。另外最好能将学术界的创新能力和工程界的落地能力结合,才能使系统创新性和可靠性兼得。腾讯的 Angel 项目从一开始,就是北大的博士生和腾讯的工程师联合主导的项目,虽然远比不上 Hinton 和 Jeff Dean 这样的大神级别,但是模式是类似的,这是非常关键的一个要素。

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

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

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

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

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

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

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

 

Angel 平台的新变化和展望

 

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

黄明:开源以来,Angel 低调的发布了 2 个小版本:1.1.0 和 1.2.0,主要是加入了新的算法和优化方法,加强了稳定性,细化和完善之前的功能。这 3 个月内的优化,以稳定和性能提升为主。因为 Angel 的定位是工业级可用的平台,所以非常看重大数据量下的稳定性和性能,我们公布的算法都是生产验证过。同时我们对 Spark on Angel 的接口进行了反复的重构,尽可能和 Angel 本身的接口接近一致和复用,这方面的工作到时候会在这次 QCon 大会上重点介绍。

另外根据用户的反馈,Angel 开发团队正在开发 2 个大功能,尚未发布,包括:

1.Python 接口:接口优化和重构,以提升易用性。因为之前宣传的时候,很多用户的第一个问题,就是有没有Python 接口……所以我们不得不把这个作为第一优先级来满足。

2.Spark Streaming on Angel支持在线学习,加入 FTRL 算法。就像之前说的,实时性也是机器学习必不可少的。那 Angel 本身不做实时这块,但是支持 Spark on Angel,那通过 Spark Streaming 来接入实时训练,也是水到渠成的事情,成本也很低,不过对 Angel 的 HA 和内存管理,需要进一步的优化。

这两个新功能应该在下 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 开发 GBDT 的同学互动了 10 个来回左右,详细地讨论了机器学习任务中 MPI 和 PS 的网络通讯开销到底谁更小的问题,进行了很有意思的学术互动。
  3. 海外的一个用户主动帮忙翻译 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,负责构建大规模分布式计算和机器学习平台,助力腾讯各大数据和机器学习业务快速发展。

 

附上论文地址以及 AI 前线之前的报道:

[1] https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf

[2] https://www.cs.cmu.edu/~dga/papers/osdi14-paper-li_mu.pdf

[3] https://issues.apache.org/jira/browse/SPARK-6932

[4] 在 Angel 开源前的这半年,我们对架构和性能做了哪些重构和升级?

[5] 腾讯大数据已将第三代高性能计算平台 Angel 代码在 Github 上开放

专题访谈

合作站点
stat