腾讯大数据背靠强大的研发能力与多年数据产品建设,已有APP服务产品:
一、腾讯移动分析(MTA)
二、腾讯移动推送(信鸽)
三、腾讯推荐
如今迎来了新一代高维度的分布式机器学习框架Angel正式开源!git
通过漫长的准备和打磨,新一代的Angel终于开源了。Github地址:github.com/tencent/ang… 欢迎你们Star,Fork和提PR。新一代的Angel由腾讯和北京大学联合开发,兼顾业界的高可用性和学术界的创新性,欢迎分布式架构师,算法工程师和数据科学家一块儿深刻使用和协同开发,激发机器学习领域更多的创新应用和良好生态。github
做为一个高维度的分布式机器学习框架,Angel的第一次对外亮相是在去年的五月[1],并在去年12月份KDDChina大会上[2],宣布将全面进行开源。为了迎接对外开源,团队成员对Angel进行了屡次重构和升级,可谓是淬火重炼。在此期间,Angel的架构反复改进,性能持续提高。开源前夕,它的性能已经超越了XGBoost和Spark。新一代的Angel,性能更快,功能更强,开发更方便。其改进主要集中在三方面:算法
本文将从架构和性能两方面,对新一代Angel,作一个初步的介绍,让你们了解它的改进。关于更加具体和深刻的介绍,还请移步GitHub。编程
在新一代的Angel开发中,咱们对系统进行了一次重要的升级,引入了PSAgent,对PSServer的服务端进行隔离,从而提供了PS-Service的功能。升级后,系统的架构设计以下:缓存
引入PSAgent后,PSClient再也不直接和PSServer打交道了,而是经过PSAgent来沟通。做为新加的中间层PSAnget,有以下几个特性:安全
PSAgent的引入,解耦了PSServer和Worker,使得Angel具有了PSService的能力。Angel的PSServer,再也不只服务于Angel的Client,其它机器学习框架,只要实现AngelPSClient接口了,都能能够接入Angel。性能优化
PSService的抽象,为Angel接入Spark和深度学习框架,从架构的层面上提供了便利服务器
标准Parameter Server功能之一,就是要提供Model的拉取(pull/get)和推送(push/update)。 不少早期PS,拿HBase,Redis等分布式存储系统,简单改改,进行模型的更新和获取,就搭建了一个简单的PS系统。网络
但实际应用中,算法对PSServer上的参数获取和更新,却远远不仅这么简单,尤为是当复杂的算法须要实施一些特定的优化的时候,简单的PS系统,就彻底不能应对这些需求了。架构
举个例子,有时候某些算法,要获得
矩阵模型
中某一行的最大值,若是PS系统,只有基本的Pull接口,那么PSClient,就只能先将该行的全部列,都从参数服务器上拉取回来,而后在Worker上计算获得最大值,这样会产生不少的网络通讯开销,对性能会有影响。而若是咱们有一个自定义函数,每一个PSServer在远程先计算出n个局部最大值,再交换确认全局最大值,这时只要返回1个数值就能够了,这样的方式,计算开销接近,但通讯开销将大大下降。
为了解决相似的问题,Angel引入和实现psFunc的概念,对远程模型的获取和更新的流程进行了封装和抽象。它也是一种用户自定义函数(UDF),但都和PS操做密切相关的,所以被成为psFunc,简称psf,总体架构以下:
随着psFunc的引入,模型的计算,也会发生在PSServer端。PSServer也将有必定的模型计算职责,而不是单纯的模型存储功能。合理的设计psFunc,将大大的加速算法的运行。
做为目前很是流行的分布式内存计算框架,Spark 的核心概念是RDD
,而RDD
的关键特性之一,是其不可变性
,它能够规避分布式环境下复杂的各类奇奇怪怪的并行问题,快速开发各类分布式数据处理算法。然而在机器学习的时代,这个设计反而制约了Spark的发展。由于机器学习的核心是迭代
和参数更新
,而RDD的不可变性,不适合参数反复屡次更新的需求,所以诸多Spark机器学习算法的实现,很是的曲折和不直观。
如今,基于Angel提供的PSService
和psFunc
,Spark能够充分利用Angel的PS,用最小的修改代价,具有高速训练大模型的能力,写出更加优雅的机器学习算法代码。
Spark on Angel实现的基本架构设计以下:
能够看出,该实现很是灵活,它对Spark没有任何侵入式的修改,是一种插件式设计,所以彻底兼容社区Spark,对原生Spark的程序不会有任何影响。它的基本执行流程以下
关于Spark on Angel的具体开发,可参考:《Spark on Angel编程手册》 。在线上,基于真实的数据,咱们对Spark on Angel和Spark的作了性能对比测试,结果以下:
LR算法 | Spark | Spark on Angel | 加速比例 |
---|---|---|---|
SGD LR (step_size=0.05,maxIter=100) | 2.9 hour | 2.1 hour | 27.6% |
L-BFGS LR (m=10, maxIter=50) | 2 hour | 1.3 hour | 35.0% |
OWL-QN LR (m=10, maxIter=50) | 3.3 hour | 1.9 hour | 42.4% |
显而易见,Spark on Angel能轻松得到30%或更多的加速比,越复杂的算法和模型,性能提升的比例越大。虽然PSServer会耗费了额外的资源,可是比起算法编写的便捷和性能的提高,这是划算的。对于Spark的老用户,这是低成本切入Angel的一个途径,也是算法工程师基于Spark实现高难度算法的优雅姿式。
Spark on Angel是Angel生态圈的第一个成员,后续会有更多基于PS-Service的框架接入,包括深度学习
新版本的Angel,添加了诸多新功能,最终的目的,就是让算法工程师能更加从容地进行算法优化,融入更多的算法的Trick,让算法的性能,获得了一个飞跃的提高。
为了更加直观的看到性能差别,每一个对比都在腾讯的机器学习平台TeslaML上,提供了工做流的连接,鹅厂工程师均可以观察到运行结果。
众所周知,XGBoost的强项之一,就是GBDT算法,性能飞快,使用简单,在众多算法比赛中,是选手们的最爱。尽管如此,Angel的GBDT算法,却仍是超越了它,这是一个很是不错的性能背书。
框架 | Worker | PS | 创建20棵树时间 |
---|---|---|---|
Angel | 50 个(内存:10G / Worker) | 10个 (内存:10G / PS) | 58 min |
XGBoost | 50个 (内存:10G / Worker) | N/A | 2h 25 min |
众所周知,LDA是一个很是消耗资源的主题模型算法,新一代的Angel,在LDA上的性能,不但超越了Spark,也已经超越了以前开源过的Petuum。(因为Petuum已经不开源多时,因此比对数据,这里就再也不贴出了)
框架 | Worker | PS | 时间 |
---|---|---|---|
Angel | 20个(内存:8G/Worker) | 20个(内存:4G/PS) | 15min |
Spark | 20个(内存:20G/Worker) | N/A | >300min |
LR是广告推荐中普遍应用的一个算法,Angel分别提供了利用Gradient Descent、ADMM两种优化方法计算的LR算法。这两种算法,不管是耗费的资源,仍是性能、收敛速度,都远比原生的Spark实现优越。
框架 | Worker | PS | 迭代100次时间 |
---|---|---|---|
Angel | 50个(内存:10G/Worker) | 20个(内存: 5G/PS) | 20min |
Spark | 50个(内存:14G/Worker) | N/A | 145min |
框架 | Worker | PS | 收敛退出 |
---|---|---|---|
Angel | 100个(内存:10G/Worker) | 50个(内存:5G/PS) | 27 min |
Spark | 200个(内存:20G/Worker) | N/A | 145 min |
一把好的宝剑,通过千锤百炼,讲究的是刚柔并济,不但削铁如泥,也要有极好的韧性,百折不断。一样的,一个好的开源项目,也是如此。它不但须要有强大的功能和性能,也须要有良好的适配性,能造成好的生态。
超大样本和超高维度的机器学习,在腾讯的多个真实生产环境中,有着很是广泛的应用场景,这是Angel的切入点,但不是终点和约束,在将来,Angel还将深刻到图计算和深度学习领域,借助开源的力量,作出更多的探索,不管是Wider仍是Deeper的模型,Angel都但愿能像天使同样,在多个机器学习框架上为它们提速,帮助业务提高效果。
腾讯大数据平台关注大数据平台构建、数据挖掘、数据应用等。信息共享,促进行业交流。经过多年产品建设,腾讯大数据已成功为开发者提供腾讯移动分析(MTA)、腾讯移动推送(信鸽)、腾讯推荐等数据产品,同时与腾讯云合做,推出大数据处理套件(数智),对外提供了可靠、安全、易用的大数据处理能力。