前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >道器相融,由 Angel 谈一个优秀机器学习平台的自我修养(下)

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

原创
作者头像
腾讯开源
修改2017-10-16 11:57:58
1.7K0
修改2017-10-16 11:57:58
举报

《道器相融,由 Angel 谈一个优秀机器学习平台的自我修养(上)》

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

黄明: 先讲个大家都知道的小插曲: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工程师,在适当屏蔽掉底层的架构细节后,依然能够写出高效的算法代码,才取得了成功。

Angel平台的新变化和展望

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

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

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

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

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,也有了不少贡献者。印象深刻的有几个:

华为的一位工程师,项目刚发布不久就提交了一个比较大的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,负责构建大规模分布式计算和机器学习平台,助力腾讯各大数据和机器学习业务快速发展。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在您看来,如何才能高效的搭建一个优秀的机器学习平台?
  • Angel平台的新变化和展望
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档