嘉宾:黄明 编辑:Natalie 转载自:AI前线
2017年6月,腾讯正式开源面向机器学习的第三代高性能计算平台 Angel,在GitHub上备受关注;2017年10月19日,腾讯T4专家Andymhuang(黄明)将为QCon上海的听众奉上一场Spark on Angel的精彩分享。作为Angel的主要开发者和团队负责人,同时也是Spark的早期研究者和布道者,他的工作经历可以说同步了通用大数据平台到专用机器学习平台的转变历程。因此,在这之前,InfoQ对黄明的进行了一次采访问答,他将与大家分享人工智能时代的大数据平台演进之路,并结合Angel的开发经验,谈谈如何打造一个优秀的机器学习平台,以及开源后Angel的最新消息和未来规划。
Angel开源地址:https://github.com/Tencent/angel
人工智能到底会给企业带来什么?——是改变,机遇,还是更大的挑战?
在之前的大数据时代,企业开始意识到数据的重要性并着手搭建自己的大数据平台,大数据成为业界关注的焦点,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终于开源,整个开源的过程还是很不容易的。希望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,将会大大增强他们使用的信心,这会对用户形成很强的吸引力,最终也有助于形成更好的生态 。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。