腾讯大数据第三代高性能计算平台Angel

消息来源:测试文章2       发布时间:2016-12-29 18:05

 

本月中旬,腾讯大数据在“腾讯大数据技术峰会暨KDD China技术峰会”上宣布推出面向机器学习的第三代高性能计算平台——Angel,并预计于2017年第一季度开放其源代码,鼓励业界工程师、学者和技术人员大规模学习使用,激发机器学习领域的更多创新应用与良好生态发展。

 

那么,Angel是如何“以己之翼、聚众之力”,如何在蓬勃发展的机器学习浪潮中展现自己的光辉,请跟随我们,走进Angel。

 

Angel简介

 
 
 
 
 
 

 

Angel是腾讯大数据部门第三代的计算平台,使用Java和Scala语言开发,面向机器学习的高性能分布式计算框架,由腾讯大数据与香港科技大学、北京大学联合研发。它采用参数服务器架构,解决了上一代框架的扩展性问题,支持数据并行及模型并行的计算模式,能支持十亿级别维度的模型训练。

 

自今年初在腾讯内部上线以来,Angel已应用于腾讯视频、腾讯社交广告及用户画像挖掘等精准推荐业务。

 

Angel的主要优点包括以下几个方面:

1. 能高效支持超大规模(十亿)维度的数据训练;

2. 同样数据量下,比Spark、Petuum等其他的计算平台性能更好

3. 有丰富的算法库及计算函数库友好的编程接口,让用户像使用MR、Spark一样编程;

4. 丰富的配套生态,既有一体化的运营及开发门户,又能支持深度学习、图计算等等其他类型的机器学习框架,让用户在一个平台能开发多种类型的应用。

 

 

Angel性能优势

 
 
 
 
 
 

 

Angel采用了多种业界最新技术和腾讯大数据自主研发技术,如SSP(Stale synchronous Parallel)、异步分布式SGD、多线程参数共享模式HogWild、网络带宽流量调度算法、计算和网络请求流水化、参数更新索引和训练数据预处理方案等。

 

这些技术使Angel性能大幅提高,达到常见开源系统Spark的数倍到数十倍(即处理同等计算条件下,Spark运行时间是Angel的数倍到数十倍),且Angel能在千万到十亿级的特征维度条件下运行。

 

 
 

Angel的性能项目测试结果

 

同等数据量下的性能测试


Angel跟其他平台相比,比如Petuum,和spark等,在同等量级下的测试结果,Angel的性能要优于其他平台。比如用Netflix的数据跑的SGD算法,结果可以看上图中的对比。

 

超大规模数据的训练测试


目前Angel支持了很多腾讯内部的现网业务。举两个例子,比如,在构建用户画像方面,以前都是基于Hadoop和Spark来做,跑一次模型要1天甚至几天,话题只有1k;而在Angel上,20多亿文档、几百万个词,3000亿的token,只需1个小时。以前Spark能跑的,现在Angel快几十倍;以前Spark跑不了的,Angel也能轻松跑出来。

 

大规模数据集的训练能力


例如腾讯视频的点击预测,同等数据量下,Angel的性能是Spark的44倍以上。用了Angel以后,维度从千万扩展到亿,训练时间从天缩短到半小时,而准确度也有很大的提升。

 
 

 

Angel易用性

 
 
 
 
 
 

 

在系统易用性上,Angel提供丰富的机器学习算法库及高度抽象的编程接口、数据计算和模型划分的自动方案及参数自适应配置,同时,用户能像使用MR、Spark一样在Angel上编程,我们还建设了拖拽式、一体化的开发运营门户,屏蔽底层系统细节,降低用户使用门槛。另外,Angel还支持深度学习,它支持Caffe、TensorFlow和Torch等业界主流的深度学习框架,为其提供计算加速。

 

简而言之,Angel的易用性表现在:

 

第一,  我们提供很丰富的机器学习算法库,以及数学运算算法库

 

第二, 我们提供很友好的高度抽象的编程接口,能跟Spark、MR对接,开发人员能像用MR、Spark一样编程;

 

第三, 我们提供了一体化的拖拽式的开发及运营门户,用户不需要编程或只需要很少的开发量就能完成算法训练;

 

第四, 我们内置数据切分、数据计算和模型划分的自动方案参数自适应配置等功能,并屏蔽底层系统细节,用户可以很方便进行数据预处理;

 

第五, Angel还能支持多种高纬度机器学习的场景,比如支持Spark的MLLib,支持Graph图计算、还支持深度学习如Torch和TensorFlow等业界主流的机器学习框架,提供计算加速。

 

 

Angel架构

 
 
 
 
 
 

 

Angel是基于参数服务器的一个架构,整体架构上参考了谷歌的DistBelief。Angel在运算中支持BSP、SSP、ASP三种计算模型,其中SSP是由卡耐基梅隆大学EricXing在Petuum项目中验证的计算模型,能在机器学习的这种特定运算场景下提升缩短收敛时间。Angel支持数据并行及模型并行。

 

在网络上有原创的尝试,使用了港科大杨强教授的团队做的诸葛弩来做网络调度,ParameterServer优先服务较慢的Worker,当模型较大时,能明显降低等待时间,任务总体耗时下降5%~15%。

 

另外,Angel整体是跑在Gaia(Yarn)平台上面的。

 

Angel架构图

 

主要的模块有3个:

Master:主控节点,负责资源申请和分配,以及任务的管理。

 

ParameterServer:包含多个节点,可对参数进行横向扩展,解决参数汇总更新的单点瓶颈,支持BSP,SSP,ASP等多种计算模型,随着一个任务的启动而生成,任务结束而销毁,负责在该任务训练过程中的参数的更新和存储。

 

WorkerGroup:一个WG包含多个Worker,WG内部实现模型并行,WG之间实现数据并行, 独立进程运行于Yarn的Container中。

 

Angel已经支持了20多种不同算法,包括SGD、ADMM优化算法等,我们也开放比较简易的编程接口,用户也可以比较方便的编写自定义的算法,实现高效的ps模型。并提供了高效的向量及矩阵运算库(稀疏/稠密),方便了用户自由选择数据、参数的表达形式。在优化算法方面,Angel已实现了SGD、ADMM,并支持Latent DirichletAllocation (LDA)、MatrixFactorization (MF)、LogisticRegression (LR) 、Support Vector Machine(SVM) 等。

 

开源的意义

 
 
 
 
 
 

 

Angel不仅仅是一个只做并行计算的平台,它更是一个生态。

 

我们围绕Angel,建立了一个小生态圈,它支持Spark之上的MLLib,支持上亿的维度的训练;我们也支持更复杂的图计算模型;同时支持Caffe、TensorFlow、Torch等深度学习框架,实现这些框架的多机多卡的应用场景。

 

腾讯大数据平台来自开源的社区,受益于开源的社区中,所以我们自然而然地希望回馈社区。开源,让开放者和开发者都能受益,创造一个共建共赢的生态圈。在这里,开发者能节约学习和操作的时间,提升开发效率,去花时间想更好的创意,而开放者能受益于社区的力量,更快完善项目,构建一个更好的生态圈。

 

我们目前希望能丰富Angel配套生态圈,进一步降低用户使用门槛,促进更多开发人员,包括学校与企业,参与共建Angel开源社区。而通过推动Angel的发展,最终能让更多用户能快速、轻松地建立有大规模计算能力的平台。

我们一直都向社区做贡献,开放了很多源代码,我们第一代平台的核心,TDW-Hive,已经在2014年就开源了;培养了几个项目的committer,这种开放的脚步不会停止。

 

我们平台源自开源,我们的发展离不开开源,所以我们会以最大的力度拥抱开源。

 

 

  附:腾讯大数据平台发展历史

 

腾讯大数据平台发展至今已走过了7年,回顾走过的7年,从2009年1月开始基于Hadoop来开发腾讯大数据平台,七年的征程,我们历经了3代平台的发展。

 

2009-2011年是我们的第一代平台,是基于Hadoop开发的, 命名为TDW,腾讯分布式数据仓库。第一代是离线计算的架构,主要支持批量计算的场景,从09年的几十台,发展到现在总规模接近3万台,产生规模化

 

TDW的建成,让我们具备了融合所有产品平台的数据的能力。

 

以前的各产品的数据都是分散在各自的DB里面的,是一个个数据孤岛,现在,我们以用户为中心,建成了十亿用户量级、每个用户万维特征的用户画像体系。这个用户画像,应用在腾讯所有跟精准推荐相关的产品里面。

 

第二代,用三个字总结就是实时化。这是2012年到2014年。主要支持在线分析和实时计算的场景,比如实时报表,实时查询、实时监控等。

 

这一代平台的集成,让我们的计算的粒度从原来的小时,发展到分钟,直至秒级。

 

数据采集方面,我们构建了TDBank;在资源调度层面,我们基于Yarn,发展了我们的Gaia调度平台;另外,我们还支持doctor,我们平台现在每天有1.5亿container。

 

因此,我们的推荐系统基于此实现了offline 到 online 的转换。在广告的推荐应用上,我们可以看到每一次的实时加快,都带来了更大的点击率提升。


第三代是2015年至今,主要建设机器学习平台,支持腾讯各业务数据挖掘的需求。这是从数据分析到数据挖掘的转变,三个字总结就是“智能化”。

 

由于业务规模不断扩展,我们需要建设一个能支持超大规模数据集的一套系统,能满足billion级别的维度的数据训练,而且,这个系统必须能满足我们现网应用需求的一个工业级的系统。它能解决big data,以及big model的需求,它既能做数据并行,也能做模型并行

 

因此,第三代高性能计算平台应运而生。我们聚焦在高性能的计算框架方面,同时,也是我们往机器学习、深度学习演进的一个路线。

 

相比第二代,第三代的计算框架,可以支持10亿级维度的算法训练,由以前的数据并行,到可以支持模型并行。

 

同时,我们第三代的平台,还支持GPU深度学习,支持文本、语音、图像等非结构化的数据。