【导语】Angel 是腾讯的首个AI开源项目,于 2016 年底推出、2017年开源。近日,快速发展的 Angel 完成了从 2.0 版本到 3.0 版本的跨越,从一个单纯的模型训练系统进化成包含从自动特征工程到模型服务的全栈机器学习平台。作为面向机器学习的第三代高性能计算平台,Angel 致力于解决稀疏数据大模型训练以及大规模图数据分析问题。
在开源方面取得的成绩、新加入的图机器学习功能等新特性、使用情况及 Angel 的落地案例等方面,对 Angel 全方位的学习与了解。
Angel是腾讯开源的大规模分布式机器学习平台,专注于稀疏数据高维模型的训练。目前Angel是Linux深度学习基金会孵化项目,相比于TensorFlow, PyTorch和Spark等业界同类平台,她有如下特点:
图 1 Angel与业界主流平台的对比
Angel 自研的高性能数学库是整个系统的基础,Angel的PS功能和内置的算法内核均是在这个数学库基础之上实现的。
Angel PS提供了高效,稳定和灵活的参数存储和交换服务。在3.0版本中,我们对Angel PS功能进行了扩展,使得它可以存储任意类型的对象,一个典型的例子是在图算法的实现过程中,我们使用Angel PS来存储了大量复杂的对象。
MLcore是Angel自研的一套算法内核,它支持自动求导,可以使用JSON配置文件定义和运行算法。除此之外,在3.0版本中,Angel还集成了PyTorch作为计算引擎。在计算引擎层之上是计算框架,它们可以看作计算引擎的容器,目前支持3种计算框架:原生的Angel,Spark On Angel(SONA)和PyTorch On Angel(PyTONA),这些计算框架可以使得Spark和PyTorch用户可以无缝切换到Angel平台。最上层是两个公共组件:AutoML和模型服务。
2018年,腾讯受邀作为Linux基金会旗下面向AI领域的顶级基金会——LF AI基金会(Linux Foundation Artificial Intelligence Foundation)的初始白金会员加入,拥有董事会和技术咨询委员会席位,并于同年向基金会捐赠高性能分布式机器学习平台Angel。
北京时间12月20日,LF AI基金会正式宣布,腾讯开源项目Angel从LF AI基金会毕业,也是中国首个从LF AI基金会毕业的开源项目。这意味着,Angel得到全球技术专家的认可,成为世界最顶级的AI开源项目之一。
LF AI基金会执行总监Ibrahim Haddad表示:“在Angel从孵化到毕业的过程中,我们能看到Angel在新功能完善和应用场景落地方面惊人的速度。随着3.0版本的发布,Angel在功能、适用性和对社区的贡献等都有了非常优秀的表现。这也是整个AI开源社区在走向成熟并具备工业级生产能力的方向上迈出了一大步。”
腾讯云副总裁、腾讯数据平台部总经理蒋杰表示:“腾讯致力于通过开源代码,与开发者共建开源生态、实现成果共享,已成为大数据领域开源最为全面的公司。我们很高兴看到Angel从LF AI基金会成功毕业,在基金会的指导和开发者的共建下,完成从单一的模型训练平台到全栈机器学习平台的技术跨越,这也与腾讯大数据批流融合、ABC融合的未来发展方向紧密契合。毕业是Angel新的开始,未来我们将进一步开放Angel在图计算和联邦学习领域的核心能力。”
据LF AI 基金会董事、腾讯AI专家肖涵介绍,LF AI基金会对开源项目的毕业流程有非常严格的规定,基于项目的技术含量、开源生态、社区互动等维度,严格评估项目的成熟度,最终由董事会投票决定能否准予毕业。能够从LF AI毕业,意味着项目已经得到全球技术专家的认可,成为最顶级的AI开源项目。
开源协同是当前腾讯最重要的技术战略之一。在今年的重庆智博会上,腾讯公司董事会主席兼首席执行官马化腾专门提及了对开源的重视,他表示,腾讯希望在科研领域投入更多力量,将通过内外部开源等方式,积极参与“全球科技共同体”的共建。
截止2019年11月,仅在Github上,腾讯就开源了91个项目,有超过1000个贡献者参与,获得超过26万个Star数,在Github全球公司贡献榜上居于前列。腾讯还加入了Linux、Apache等9大开源基金会,并成为最高级别会员。其中LF AI基金会是由Linux基金会发起的人工智能领域的专项开源基金会,旨在倡导和组织AI开源平台和工具共同参与建设,共同享有IP知识产权,创建可持续发展的开源AI生态系统。
从1.0到3.0,Angel发生了巨大的变化,它从一个单一的模型训练平台发展到涵盖机器学习各个流程,包含自己生态的通用计算平台,代码量也超过了50万行。为了后续维护和使用的方便,Angel拆分成8个子项目,统一放在Angel-ML目录下:angel,PyTorch On
图 4 Angel 3.0概览(红色的表示新增特性,白色的表示已有的但在持续改进的特性)
图4提供了一个Angel 3.0特性的整体视图。Angel 3.0试图打造一个全栈的机器学习平台,它的功能特性涵盖了机器学习的各个阶段:特征工程,模型训练,超参数调节和模型服务。
Angel的特征工程模块基于Spark开发,增强了Spark的特征选择功能,同时使用特征交叉和重索引实现了自动特征生成。这些组件可以无缝地整合进Spark的流水线。为了让整个系统更加的智能,Angel 3.0新增了超参数调节的功能,目前支持3种算法:随机搜索,网格搜索和贝叶斯优化。在模型服务方面,Angel 3.0提供了一个跨平台的组件Angel Serving, Angel Serving不仅可以满足Angel自身的需求,还可以为其他平台提供模型服务。
在生态方面,Angel也尝试将PS能力赋能给其他的计算平台,目前已经完成了Spark On Angel和PyTorch On Angel两个平台的建设。这两个平台各有优势和侧重, Spark On Angel使用的是Angel内置的算法核心,主要负责常见推荐领域的机器学习算法和基础图算法。PyToch On Angel使用PyTorch作为计算核心,主要负责推荐领域深度学习算法和图深度学习算法。
特征工程,例如特征交叉和选择,对于工业界的机器学习应用具有重要意义。Spark提供了一些特征选择算子,但是仍有一些局限性。Angel基于Spark提供了更多的特征选择算子:
大多数在线推荐系统经常选择线性算法,例如逻辑回归作为机器学习模型,但逻辑回归需要复杂的特征工程才能实现较高的精度,这使得自动特征合成至关重要。但是,现有的自动化的高阶特征合成方法带来了维度灾难。为了解决这个问题,Angel实现了一种迭代生成高阶合成特征的方法。每次迭代由两个阶段组成:
图 5 自动特征工程流程
如图5所示,这种特征合成方法线性地增加特征数量,避免了维度灾难。在Higgs数据集上的实验表明合成的特征能有效地提高模型精度(如表1所示)。
在Angel 3.0中,我们对Spark On Angel做了大幅度的优化,添加了下面这些新的特性:
从图7中可以看出,Spark On Angel中的算法与Spark中的算法存在显著的不同,如:基于Spark On Angel的算法主要是针对推荐和图领域,然而Spark中的算法更通用。
图8提供了一个基于Spark On Angel的分布式算法示例,主要包含以下步骤:
在训练完成后,Spark On Angel将会展示多种模型指标,如:准确率, ROC 曲线, AUC等。用户可以保存训练好的模型以便下次使用。
PyTorch On Angel是Angel 3.0新增的特性,它主要是为了解决大规模图表示学习和深度学习模型训练问题。
在过去几年时间,图卷积神经网络(GNN)快速发展,一系列的研究论文以及相关的算法问世:例如GCN,GraphSAGE和GAT等,研究和测试结果表明,它们能够比传统图表示学习更好的抽取图特征。腾讯拥有庞大的社交网络(QQ和微信),同时拥有大量对图数据进行分析的需求,而图表示学习正是这些分析的基础,因此腾讯内部对GNN有着强烈的需求,这也是我们开发PyTorch On Angel的主要原因之一。
大规模图的表示学习面临着两个主要的挑战:第一个挑战来自于超大规模图结构的存储以及访问,这要求系统不仅能存得下,还需要提供高效的访问接口,例如需要提供高效的访问任意节点的两跳邻居的接口;第二个挑战来自于GNN计算过程,它需要有高效的自动求导模块。
通过对Angel自身状况以及对业界已有系统的分析,我们得到如下结论:
为了将两者的优势结合起来,我们基于Angel PS开发了PyTorch On Angel平台,基本思路是使用Angel PS来存储大模型,使用Spark来作为PyTorch的分布式调度平台,也就是在在Spark的Executor中调用PyTorch来完成计算。
当然,这些细节都是封装好的,算法开发人员和用户并不需要了解。在PyTorch On Angel平台上开发新算法,只需要关注算法逻辑即可,与开发单机的PyTorch算法并没有太大区别。下面给出一个2层GCN算法的实现例子:
算法开发完成后,将代码保存为pt文件,然后将pt文件提交给PyTorch On Angel平台就可以实现分布式训练了。
由于结合了PyTorch和Angel的优点,PyTorch On Angel在算法性能方面有很大的优势:对于推荐领域常见的深度学习算法,性能可以达到TensorFlow的4倍以上;对于GNN算法,性能也远好于目前业界开源的同类型平台(具体的性能数据会在开源社区陆续公开)。下图是在公开的数据集criteo kaggle万训练样本,100w特征)上做的对比测试:
除了性能方面的优势,PyTorch On Angel还有一个比较大的优势就是易用性好。如图12所示:PyTorch运行在Spark的Executor中,可以实现Spark图数据预处理和PyTorch模型训练的无缝对接,在一个程序中完成整个计算过程。
传统超参数调节的方式有两种(如图15所示):
图 13 网格搜索和随机搜索
贝叶斯优化与传统的无模型方法不同,使用计算成本较低的代理函数(surrogate function)来近似原始目标函数。在贝叶斯优化中,代理函数生成超参数组合的概率均值和方差。然后,效用函数(acquisition function)将评估超参数组合的预期损失或改进。这样的概率解释方法使贝叶斯优化能够使用少得多的开销找到目标函数的较优解。
Angel 3.0包括传统的两种方法和贝叶斯算法优化。对贝叶斯优化,Angel实现了以下的功能:
由于每次评估目标函数的计算开销可能较大,如果观察到候选的超参数组合在开始的若干轮迭代中表现不佳,可以提前停止这些候选超参数组合。Angel 3.0版本中实现了这种早停策略。
表2是在逻辑回归算法的实验,调节的超参数是学习速度和学习速度衰减率,结果显示贝叶斯优化的性能优于随机搜索和网格搜索,而随机搜索的结果略优于网格搜索
表 2 不同超参数自动条件方法的效果对比
为了满足在生产环境中高效地进行模型服务的需求,我们在Angel 3.0中实现了Angel Serving子系统,它是一个可拓展性强、高性能的机器学习模型服务系统,是全栈式机器学习平台Angel的上层服务入口,使Angel生态能够形成闭环。图16展示了Angel Serving的架构设计。
Angel Serving主要特征包括:1)支持多种类型的API访问服务,包括gRPC和Restful 接口;2)Angel Serving是一个通用的机器学习服务框架,可插拔机制设计使得来自其他第三方机器学习平台的模型可以很容易使用Angel Serving来服务,目前已经支持三种平台的模型:Angel,PyTorch和支持PMML模型格式的平台(Spark、XGBoost等);3)受TensorFlow Serving的启发,Angel Serving还提供细粒度版本控制策略:包括使用模型的最早,最新以及指定版本进行服务;4)Angel Serving还提供丰富的的模型服务监控指标,包括:
Angel Serving 不仅可以满足Angel自身的需求,还可以为其他平台提供模型服务。在生态方面,Angel也尝试将参数服务器(PS)能力共享给其他的计算平台,目前已经完成了Spark On Angel和PyTorch On Angel两个平台的建设。
图15 图计算体系架构
在3.0版本中,Angel重点研发了图机器学习功能,包括图表示和图神经网络学习模型,同时提供预处理、图挖掘等端到端数据处理能力,具有丰富的算法库,提供了同构图、异构图多种图计算范式和不同种类的图算法。经过腾讯内部业务的大规模实践,Angel在图算法性能上同样表现出众,例如十亿节点、千亿边规模的图结构,运行算法时能以Spark GraphX三分之一的计算资源,达到十倍处理性能。
图16 图计算性能对比
除了技术功能上的完善,Angel在社区生态上也日趋成熟。据了解,在全行业Angel拥有超过 100家公司和机构用户,其中包括微博、华为、微众银行、小米、滴滴等大型互联网企业。基于Angel构建的一站式机器学习应用平台智能钛TI,支持了包括微信支付、腾讯广告、微视等在内的诸多腾讯内部产品,同时也通过腾讯云对外开放为更多行业企业提供服务。
截止目前,Angel在GitHub上已经获得了5500 Star,1400 Fork,在技术、应用、生态等方面的优秀表现均得到了开源社区的认可。此前在腾讯2019 Techo开发者大会上,蒋杰还宣布了资源管理平台核心TKE和分布式数据库TBase的正式开源。腾讯正在成为大数据领域开源最全面的公司。
如图3所示,在过去12个月,Angel在腾讯内部的任务数量有了非常明显的增长,增幅达到150%。值得一提的是,Spark On Angel的任务数增长了10倍,为了让Spark On Angel更加的易用,3.0版本对Spark On Angel做了大幅度升级。在腾讯内部,使用Angel的业务包括腾讯视频,腾讯新闻和微信等。
Angel官方维护了一个QQ群与外部开发者进行交流,对群用户的统计表明:
图 19 短视频推荐数据处理流程
上图所示是腾讯短视频部门的一个使用案例。用户的视频播放日志和上下文信息被实时转发给Kafka,流数据引擎Storm订阅Kafka的数据。Storm是一个实时的特征生成器,它从一个离线的key-value存储中获得用户画像和视频信息,将两者拼接起来生成特征。生成的特征被传输到在线训练系统中来更新在线模型;同时,这些特征也被转存到HDFS作为离线训练的输入。离线模型通常用来初始化在线训练系统,当出现异常时,离线模型还可以用来重置在线系统。本案例用到的推荐算法是FM,训练样本24亿条,特征维度为63611,在Spark上训练耗时10多个小时,应用Angel后减少至1小时。
图 19 金融反欺诈数据处理流程
金融欺诈检测是大规模图学习的常见案例,其网络数据是异构的,包含几种不同类型的边:
金融诈骗者通常共享设备和Wi-Fi,通过扩展边缘关系生成社区。Angel上的fast unfolding算法可以有效地发现这些社区。下游的欺诈风险模型可以将这些社区的用户画像和网络特征作为输入来学习和推到反欺诈策略。该图数据包含15亿个节点和200亿条边,基于Spark GraphX的实现耗时20小时,而Angel仅需5小时。
本文主要介绍了Angel在腾讯内外的使用情况和3.0版本的新特性。
Angel在腾讯内外的使用情况:
(*本文为AI科技大本营整理文章,转载请微信联系 )
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。