概述
Angel是腾讯开源的基于参数服务器架构的分布式机器学习平台,致力于解决稀疏数据大模型训练和大规模图数据分析问题。由腾讯和北京大学联合研发,兼顾业界高可用性和学术界创新性,目前为Linux深度学习基金会孵化项目。与业界同类平台如、Spark相比,具有以下特点:
▲Angel与行业主流平台对比
Angel自2016年初在腾讯内部上线以来,已应用于VX支付、QQ、腾讯视频、腾讯社交广告、用户画像挖掘等场景。
2017年6月,Angel在平台上悄然开源,开源两周后,项目已获得183个Watch、1693个Star、389个Forks,同时也吸引了众多业界工程师的关注与贡献。
2022年9月,Angel 2.0发布,支持千亿维度模型训练。算法库也更加丰富,首次引入深度学习算法和图算法。同年,Angel加入Linux深度学习基金会(现更名为LF AI基金会(LF AI))。结合基金会的成熟运作,全面升级的Angel 2.0继续与国际开源社区深度互动,致力于让机器学习技术更容易学习和应用。
我们继续看看.0里程碑版本有哪些值得关注的新特性。
天使系统架构
.0系统架构如下图所示:
▲ Angel 3.0 架构
Angel自研的高性能数学库是整个系统的基础,Angel的PS函数、内置的算法内核都是基于这个数学库实现的。
Angel PS 提供高效、稳定、灵活的参数存储和交换服务。在 3.0 版本中,我们扩展了 Angel PS 的功能,使其可以存储任意类型的对象。一个典型的例子是在图算法的实现中,我们使用 Angel PS 来存储大量复杂对象。
它是Angel自研的一套算法内核,支持自动微分,可以使用JSON配置文件来定义和运行算法。另外在3.0版本中,Angel还作为计算引擎进行了集成。计算引擎层之上是计算框架,可以看作是计算引擎的容器,目前支持三种计算框架:原生Angel、Spark On Angel(SONA)和On Angel()。这些计算框架可以让Spark和用户无缝切换到Angel平台。最上面一层是两个公共组件:和模型服务。
Angel 3.0 新功能
▲Angel 3.0 概览(红色表示新增功能,白色表示正在持续完善的现有功能)
上图是 Angel 3.0 功能的整体展示,Angel 3.0 致力于打造全栈机器学习平台,功能特性覆盖了机器学习的各个阶段:特征工程、模型训练、超参调整、模型服务。
Angel的特征工程模块基于Spark开发,增强了Spark的特征选择功能,通过使用特征交叉和重新索引实现了自动特征生成。这些组件可以无缝集成到Spark的中。为了让整个系统更加智能,Angel 3.0增加了超参数调节的功能,目前支持随机搜索、网格搜索和贝叶斯优化3种算法。在模型服务方面,Angel 3.0提供了跨平台的组件Angel,不仅可以满足Angel自身的需求,还可以为其他平台提供模型服务。
在生态方面,Angel也在尝试将参数服务器(PS)能力赋能到其他计算平台,目前已经完成Spark On Angel和On Angel两个平台的搭建,两个平台各有优势和侧重点,Spark On Angel采用Angel内置的算法核心,主要负责常见推荐领域的机器学习算法和基础图算法,On Angel采用Angel作为计算核心,主要负责推荐领域的深度学习算法和图深度学习算法。
自动特征工程
特征交叉、选择等特征工程对于工业级机器学习应用具有重要意义。Spark 提供了一些特征选择算子,但仍然存在一些限制。Angel 基于 Spark 提供了更多特征选择算子:
大多数在线推荐系统通常选择逻辑回归等线性算法作为机器学习模型,但逻辑回归需要复杂的特征工程才能达到较高的准确率,因此自动特征合成必不可少。然而现有的自动高阶特征合成方法存在维数灾难的问题。为了解决这个问题,Angel 实现了一种迭代生成高阶合成特征的方法。每次迭代包含两个阶段:
以下是迭代步骤:
最后,将合成的特征与原始特征连接起来。
▲自动化特征工程流程
如上图所示,这种特征合成方法线性增加了特征数量,避免了维数灾难。在Higgs数据集上的实验表明,合成后的特征可以有效提高模型准确率(如表1所示)。
▲表1 特征合成效果
火花天使 (SONA)
在Angel 3.0中,我们对Spark On Angel进行了重大改进,增加了以下新功能:
▲火花天使建筑
除了以上几大特性之外,我们也在不断完善 Spark On Angel 的算法库:加入一些新的算法,比如 Deep&Cross(DCN)和 AFM(AFM);同时对已有的算法做了大量优化,比如对 LINE 和 K-Core 算法进行了重构,重构后的算法性能和稳定性都有了很大的提升。
从下图可以看出,Spark On Angel中的算法与Spark中的算法有明显的不同,例如基于Spark On Angel的算法主要针对推荐和图领域,而Spark中的算法更加通用。
▲Spark与Spark On Angel算法对比
▲Spark On Angel算法示例
上图给出了基于Spark On Angel的分布式算法示例,主要包含以下步骤:
训练完成后,Spark On Angel会展示多种模型指标,如准确率、ROC曲线、AUC等,用户可以保存训练好的模型,以便下次使用。
▲Spark On Angel 与性能对比
我们使用相同的资源和数据集,对比了 Spark On Angel 在两种热门推荐算法 Deep & Wide 上的性能。如上图所示,Spark On Angel 在 Deep & Wide 算法上的速度是后者的 3 倍,在 上的运行速度略快。
论天使()
On Angel是.0的新特性,主要为了解决大规模图表示学习与深度学习模型训练的问题。
近几年,图卷积神经网络(GNN)发展迅速,出现了一系列研究论文和相关算法,如GCN、GAT等。研究和测试结果表明,它们能够比传统的图表征学习更好地提取图特征。腾讯拥有庞大的社交网络(QQ、VX),对图数据分析的需求巨大,而图表征学习是这些分析的基础。因此,腾讯对GNN的需求十分强烈,这也是我们开发On Angel的主要原因之一。
大规模图的表示学习面临两大挑战:第一个挑战来自超大规模图结构的存储和访问,要求系统不仅能够存储,而且还能提供高效的访问接口,比如提供高效的接口访问任意节点的两跳邻居;第二个挑战来自GNN的计算过程,需要高效的自动微分模块。
通过对安吉尔自身情况以及行业内现有制度的分析,我们得出以下结论:
为了将两者的优势结合起来,我们基于Angel PS开发了On Angel平台,基本思路是利用Angel PS来存储大模型,使用Spark作为分布式调度平台,也就是调用Spark来完成计算。
On Angel的架构如下图所示:
▲ 关于 Angel 的系统架构
On Angel 有三个主要组成部分:
当然这些细节都是封装好的,算法开发者和使用者不需要去理解。在On Angel平台上开发新算法时首码项目发布平台怎么做,只需要关注算法逻辑,和开发单机算法区别不大。下面是一个2层GCN算法的实现示例:
▲GCN在On Angel上的实现示例
算法开发完成后,将代码保存为pt文件,然后将pt文件提交到On Angel平台实现分布式训练。
我们在On Angel上实现了很多算法,包括推荐领域的常见算法(FM、Wide&Deep、DCN、PNN等)以及GNN算法(GCN和)。在后续的版本迭代中,我们会进一步丰富On Angel的算法库。
结合On Angel的优势,On Angel在算法性能上有很大优势:对于推荐领域常见的深度学习算法,性能可达4倍以上;对于GNN算法,性能也远优于目前业界同类型的开源平台(具体性能数据将在开源社区公开)。下图是在公开数据集(4500万训练样本,100万特征)上的对比测试:
▲ 关于Angel及性能对比测试
除了性能优势,On Angel在易用性上也有很大优势,如图:运行在Spark中,可以实现Spark图数据预处理与模型训练的无缝集成,在一个程序中完成整个计算过程。
自动超参数调整
传统的调整超参数的方式有两种(如下图所示):
▲网格搜索与随机搜索
贝叶斯优化与传统的无模型方法不同,它使用计算成本低廉的代理函数 ( ) 来近似原始目标函数。在贝叶斯优化中,代理函数生成超参数组合的概率均值和方差。然后,效用函数 ( ) 评估超参数组合的预期损失或改进。这种概率解释使贝叶斯优化能够以更少的开销找到目标函数的更好解决方案。
Angel 3.0 包含了两种传统方法和贝叶斯优化,针对贝叶斯优化,Angel 实现了以下功能:
由于每次评估目标函数的计算开销可能很大,如果我们观察到候选超参数组合在前几次迭代中表现不佳,我们可以提前停止这些候选超参数组合。这种提前停止策略在 Angel 3.0 中得以实现。
表2是对逻辑回归算法的实验,调整的超参数为学习速度和学习速度衰减率,结果表明贝叶斯优化的性能优于随机搜索和网格搜索,而随机搜索的结果略优于网格搜索。
▲表2 不同超参数自动条件方法效果对比
天使
为了满足生产环境高效的模型服务需求,我们在.0中实现了Angel子系统,它是一个高扩展、高性能的机器学习模型服务系统,是全栈机器学习平台Angel的上层服务入口,使Angel生态形成闭环。下图是Angel的架构设计。
▲天使建筑
Angel 的主要特点包括:
支持多种类型的API访问服务,包括gRPC和接口
Angel 是一个通用的机器学习服务框架,其可插拔的机制设计使得Angel可以很方便的为其他第三方机器学习平台的模型提供服务,目前支持Angel、支持PMML模型格式的平台(Spark等)三个平台的模型。
受 的启发,Angel 还提供了细粒度的版本控制策略:包括使用模型的最早、最新和指定版本进行服务
Angel还提供了多种模型服务监控指标,包括:每秒请求数(QPS)、总请求数和成功请求数、请求响应时间分布和平均响应时间。
▲表3 Angel及性能对比
表 3 是 Angel 和 的性能对比结果,我们使用 100 万个特征的模型,向服务发送 10 万个预测请求,Angel 和 的总耗时分别为 56 秒和 59 秒,两个服务系统的平均响应时间都是 2 毫秒,Angel 的 QPS 为 1900, 的 QPS 为 1800。从以上结果可以看出 Angel 的性能相当甚至更优。
支持
支持Angel 3.0,因此可以在云端运行。
Angel 用法
如下图所示,过去12个月,腾讯内部Angel任务数量大幅增长,达到150%。值得一提的是,Spark On Angel任务数量增长了10倍。为了让Spark On Angel更易于使用,3.0版本对Spark On Angel进行了大幅升级。在腾讯内部,使用Angel的企业包括腾讯视频、腾讯新闻、VX等。
▲ 腾讯内部天使项目数量
天使官方维护了一个QQ群,用于与外部开发者交流。根据群成员统计,如下表所示:
▲ Angel开源用户
Angel 开源
▲ Angel 统计及发表论文
自 2017 年 6 月开源以来,Angel 便备受关注。截至目前,Angel 已有超过 4200 个 star 和 1000 多个 fork。Angel 项目目前共有 38 位代码贡献者,另有 8 人参与,共计提交代码超过 2000 篇。平台上的腾讯开源项目总数也已超过 80 个,涵盖 AI、云计算、安全等多个领域,累计 star 超过 23 万。
从1.0到3.0,Angel经历了巨大的变化,从单一的模型训练平台发展成为覆盖机器学习所有流程、包含自身生态的通用计算平台,代码量已经超过50万行。为了后续维护和使用的方便,Angel被分成了8个子项目,都放在Angel-ML目录下():angel、On Angel、sona(Spark On Angel)、math2,这些子项目在上文已经详细介绍过。
应用案例 腾讯短视频推荐
▲短视频推荐数据处理流程
上图是腾讯短视频部门的一个用例,用户的视频播放日志和上下文信息会实时转发到 Kafka,流数据引擎 Storm 订阅 Kafka 的数据。Storm 是一个实时的特征生成器,它从离线的 key-value store 中获取用户画像和视频信息,并将两者拼接起来生成特征。生成的特征会传输到在线训练系统中,更新在线模型;同时,这些特征也会传输到 HDFS 中作为离线训练的输入。离线模型通常用于初始化在线训练系统,当出现异常时,也可以使用离线模型来重置在线系统。
本案例采用的推荐算法是FM,训练样本量24亿,特征维度63611个,在Spark上训练耗时10多个小时,应用Angel之后缩短到1个小时。
金融反欺诈
▲金融反欺诈数据处理流程
金融欺诈检测是大规模图学习的常见用例,其中网络数据是异构的并且包含几种不同类型的边:
金融诈骗分子经常共用设备和 Wi-Fi,通过延伸边关系生成社群,Angel 上的快速算法可以有效发现这些社群,下游欺诈风险模型可以利用这些社群的用户画像和网络特征作为输入,学习并推送反欺诈策略。图数据包含 15 亿个节点和 200 亿条边,基于 Spark 的实现需要 20 小时,而 Angel 仅需 5 小时。
开源中国征文中!
开源中国是受关注度高、影响力大的开源技术社区,拥有超过400万开源技术精英,传播开源理念,推广开源项目,为IT开发者提供发现、使用、交流开源技术的平台。