导读: Angel 是腾讯自研的分布式高性能的机器学习平台,支持机器学习、深度学习、图计算以及联邦学习等场景。Angel 的深度学习平台已应用在腾讯的很多个场景中。所以今天会为大家介绍 Angel:深度学习在腾讯广告推荐系统中的应用实践,介绍的内容会围绕着下面几点展开。
Angel 机器学习平台
广告推荐系统与模型
模型训练和优化
优化效果
01 Angel 机器学习平台
1. Angel 机器学习平台架构
Angel 机器学习平台是腾讯自研的基于传统 Parameter Server 架构的高性能分布式的机器学习平台如图 1 所示,详细架构图如图 2 所示。它是一个全栈机器学习平台,支持特征工程、模型训练、模型服务、参数调优等,同时支持机器学习、深度学习、图计算和联邦学习等场景。已经应用在众多业务如腾讯内部广告、金融和社交等场景,吸引了包括华为、新浪、小米等 100 多家外部公司的用户和开发者。
Fig1 Angel 机器学习平台
Fig2 Angel 机器学习平台架构图
Angel 机器学习平台设计时就考虑到了很多问题,首先是易用性,Angel 机器学习平台编程接口简单,可快速上手使用,支持训练数据和模型的自动化切分,减少用户的干预,简单易用。然后是可扩展性方面,Angel 提供了 PsFun 接口,继承特定的类可实现自定义参数更新逻辑和自定义数据格式和模型切分方式等。之后是灵活性,Angel 实现了 ANGEL_PS_WORKER 和 ANGEL_PS_SERVICE 两种模式,ANGEL_PS_WORKER 模式下模型的训练和推理服务由 Angel 平台自身的 PS 和 Worker 完成,这种模式主打速度。而 ANGEL_PS_SERVICE 模式下,Angel 只启动 Master 和 PS,具体的计算交给其他计算平台(如 Spark,TensorFlow)负责,Angel 只负责提供 Parameter Server 的功能,主打生态来扩展 Angel 机器学习平台的生态位。Angel 通信模式支持 BSP、SSP、ASP 等通信协议,满足各种复杂的实际通信环境的要求。最后是稳定性,Angel 的 PS 容错采用 CheckPoint 模式,Angel 每隔一段时间会将 PS 承载的参数写入到分布式存储系统中,如果某个 PS 实例挂掉,PS 会读取最后一个 CheckPoint 重新进行服务。Angel 的 Worker 容错方面,如果 Work 挂掉,Master 会重新启动一个 Work 实例,该实例会从 Master 上获取挂掉时参数迭代信息。Angel 的 Master 任务信息也会定期存储到分布式存储系统中,如果 Mater 挂掉,会借助 Yarn Master 重启机制重新拉起一个 Master 并加载信息从之前的断点开始任务。Angel 还有有慢 work 检测机制,如果某个 Work 运行过慢其任务会被调度到其他的 Work 上进行。
Angel 机器学习平台任务提交执行简单,具体步骤如图 3 所示,进入 Cient 后,启动一个 PS 实例,该 PS 会从 Client 端加载模型,之后 Client 会启动多个 Work,Work 会加载训练数据开始训练和学习,push 和 pull 会进行参数的拉取和更新,训练完成后将模型存入指定的路径。
Fig3 Angel 机器学习平台提交执行流程图
Angel 机器学习平台在代码结构设计上做了很多的抽象,这样的设计方式可扩展性强,整个结构主要分为四层如图 4 所示。核心层(Angel-Core)是基础层,主要包括 PSAgent、PSServer、Work、Network 和 Storage 等。机器学习层(Angel-ML)提供基础数据类型和方法,同时用户可根据 PsFunc 定义自己的方法把私有模型接入。接口层(Angel-Client)可插拔式扩展,支持多种用途比如接入 TensorFlow 和 pyTorch 等。算法层(Angel-MLLib)提供了封装好的算法如 GBDT、SVM 等。
Fig4 Angel 机器学习的代码结构
2. Angel 机器学习平台在深度学习方向上的拓展和应用
深度学习常用的分布式计算范式有两种,分别是 MPI ( 基于消息模型的通信模式 ) 和 Parameter Server,如图 5 所示。这两种范式均在 Angel 平台上有实现,对于 Parameter Server 范式的实现如图 6 所示,Angel Work 可通过 Native C++的 API 接口接入常用的深度学习的 OP 如 PyTorch 或者 Tensorflow 等,在训练的起始端 Angel PS 会把模型 Push 到每个 Worker 上,Worker 会加载到对应的 OP 上进行训练,每次训练完成后会将梯度信息回传到 PS 上进行融合,以及应用优化器得到更新的参数,完成后又会分发到每个 Worker 上,重复上述过程直到训练结束,最终将模型保存到指定路径。这种方案 Angel PS 提供了一个梯度 PS 的控制器,来接入多个分布式的 Worker,每个 Worker 上可以运行一些通用的深度学习框架例,这种方案 PyTorch 版本的工作我们已经完成,并已经开源了(PyTorch on Angel)。另外一种是 MPI AllReduce 范式如图 7 所示,这种范式梯度信息是通过 AllReduce 方法进行融合的,在这种范式的实现上,Angel PS 是一个进程控制器,会在每个 Work 上拉起一个进程,这个进程可以是 PyTorch 或者是 Tensorflow 等进程,这种范式对用户侵入少,用户开发的算法不需要太多的修改即可接入到 Angel 平台进行训练。
MPI 范式
Parmeter Server 范式
Fig5 深度学习领域分布式计算常用的两种范式
Fig6 Parameter Server 范式在 Angel 上的实现
Fig7 Allreduce 范式在 Angel 上的实现
02 广告推荐系统与模型
1. 腾讯的广告推荐系统
腾讯大数据示意图,如图 8 所示,在线业务的数据如微信游戏等会通过消息中间件实时地传递到中台系统,中台系统包括实时计算、离线计算、调度系统和分布式存储,这些数据有的会进行实时计算有的会进行离线计算,数据的应用也是从消息中间件中获取其需要的数据。
Fig8 腾讯大数据平台
腾讯的推荐广告推荐系统业务分层如图 9 所示,用户发送一个请求后会去拉取用户地画像特征,之后会对广告库的广告进行一个初步地排序和打分,打分之后会提取用户地特征信息,同时将广告库的 ID 数量降为百级别,在这个百级范围内会有一个精细的排序,完成后将广告推送给用户。整个推荐系统面临着下面的几大挑战,首先是数据来源多样化,数据既有线上数据也有历史落盘数据。其次是数据的格式多元化,包括用户信息、Item 信息、点击率和图像等数据的多元格式。然后是增量数据多,用户请求频繁,广告库也在不断更新中。最后是训练任务多元化,整个推荐系统涉及到粗排、精排、图像检测和 OCR 等任务。为了解决上述问题,我们在精准排序任务上开发了一整套的软件框架"智凌"(基于 TensorFlow)来满足训练需求。
Fig9 腾讯广告推荐系统
"智凌"框架结构如图 10 所示,该框架最底层 C++ core 封装了 MQ receiver 和深度学习框架的一些 OP 类,最典型的是 TensorFlow 的 dataset 类,通过封装 tensorflow 的 dataset 类来提供从 MQ 获取数据的能力。数据抽象和处理在 C++和 Python 上完成。然后是深度学习的 framework(tensorflow)层提供各种深度学习的库。最后是具体的应用模型如 DSSM、VLAD 和一些图像算法的模型等。"智凌"软件框架具有算法封装完整、开发新模型较快、数据和算法隔离解耦较好、预处理逻辑方便修改和更新及兼容性好等优点,但同时对于 Tensorflow 框架侵入性修改多、单机多卡性能差、多机分布式不支持、算法和 OP 层面优化不够完全等缺点。图 11 是"智凌"在基础数据上的训练流程图,从图中看到从消息中间件中读取数据到本地的 DataQueue 中,DataQueue 给每个在 GPU 节点上的模型分发 Batch 数据然后进行训练,训练完成后读取到 CPU 进行梯度融合和备份然后分发给各个 GPU 进行再训练,这种设计是面向单机结构的设计,CPU 去实现梯度的融合和优化器的功能,CPU 资源消耗大,这种设计很不合理,针对这种情况我们做了很多的优化后面会向大家介绍。
Fig10 "智凌"框架结构
Fig11 "智凌"在基础数据上的训练流程图
2. 腾讯的广告推荐系统中的模型
DSSM 增强语义模型如图 12,在这里我们用该模型来计算用户和推荐 ID 之间的相关性并在此基础上计算用户对给定推荐 ID 的点击率,相关性和点击率计算公式分别是:
DSSM 模型较为简单,分为 Quey Id 和 Item Id 并表达为低维语义向量,然后通过余弦距离来计算两个语义向量之间的距离。通过模型计算 Query 和 Item 之间的相关性,打分最高点就是我们要推荐的 Item, 广告推荐系统中的 DSSM 模型要支持以下一些新的需求点:
ID 类特征维度亿级别;
变化快,每周有 25%是新条目,支持增量训练。
Fig12 DSSM 模型
VLAD/NetVLAD/NeXtVLAD 等模型我们主要用来判断两个广告之间的距离关系,传统的 VLAD 可以理解为一个聚类合并的模型,其向量计算公式为:
NeXtVLAD 如图 13 则通过将 ak符号函数变成一个可导函数来得到一个更好距离效果,NeXtVLAD 的向量计算公式为:
其中,。
Fig13 NeXtVLAD 模型
YOLO V3 如图 14 是图像处理模型,在这里我们将其应用在 OCR 业务最前端做初检,它的特点是图片输入尺寸大(608*608,1024*1024),也因此 YOLO 模型的 Loss 部分占据比较大的计算。
Fig14 YOLO V3 模型
03 模型训练和优化
1. 数据流优化
前面的介绍中我们知道"智凌"软件框架是单管道数据流,现在我们将其优化为多管道如图 15 所示,即通过多机多数据流来解决单机 IO 瓶颈问题。原来的单管道数据中会有 DataQueue,如果数据流很大会对 IO 造成很大的压力,优化为多对管道后为每一个训练进程 GPU 定义了一个 DataQueue,通过这种分布式方法来有效解决 IO 瓶颈问题。这种情况下的管理工作是通过 Angel PS(AllReduce 版本)进程控制器来进行管理的。
Fig15 "智凌"的多管道结构
2. Embedding 计算优化
Embedding Lookup 过程常会碰到如果在 hash 之前进行 SparseFillEmptyRows 操做会对空行填充默认值,增加过多的字符串操做,优化后我们先做 hash 操做然后再做 SparseFillEmptyRows 操做,去除耗时过多的字符串操作 ( 百万级别 ),节省 CPU 算力来提升 QPS,此优化单卡性能约有 6%的提升。
3. 模型算法层面优化
YOLO 的 Loss 计算量较大,我们对其进行了特殊的优化。YOLO 模型有三个 Feature map 层,传统寻找正负样本的时候,真正的 Bounding box 会在 Feature map 上会做一个遍历比较,先横向遍历然后再纵向遍历,遍历的过程中寻找 Feature map 点和 Bounding box IOU 最大的值作为正样本。因为图像的 size 很大,所以 Feature map 也很大,这使计算 Loss 耗时过长。计算 Loss 优化方法如下,由于 x 轴方向上的块和 y 轴方向上的块关于对角线对称,所以我们计算 Feature map 和 Bounding box 的 IOU 的时候按照中轴线对角点方向进行遍历如图 16 所示。先计算对角线方向上的的块,然后再计算每个 feature map 块两边的块。这种优化方法可减少大量的计算量。另外,在某个点上向两边遍历所有的 Feature map 块的时候有一些计算技巧特点,比如往右上开始遍历的时候,x 轴与 y 轴是关于对角线对称变化的,我们可以预估这种变化,从而有意识地去寻找最大的 Anchor 位置,然后丢弃其他信息,通过这样的优化方法也可以大量的减少计算量。我么通过上述方法优化了 Loss 计算之后单卡性能有约 10%的提升。
Fig16 YOLO V3 优化示意图
04 优化效果
通过在模型层面和数据层面的优化,以及 Angel 平台应用到整个控制流程中,DSSM 的单卡性能有 33 倍的提升,VLAD 有 22 倍的提升,YOLO 有 2.5 倍的提升如图 17 所示。图 18、19、20 是详细测评结果,它们有三种类型的测试模式,分别是训练数据通过 TDbank(腾讯自研的 MQ 系统)线上拉取(时延包括网络传输、数据 packing 等);本地数据读取,训练数据预先存放本地磁盘(时延包括磁盘 IO,数据映射预处理);Benchmark 模式训练数据放内存(时延仅包括数据映射预处理)。从图 18 中看到 Benchmark 不考虑数据读取前的延时基本能把整个系统计的算能力跑满这是一个准线性地提升。考虑到实际的数据是从 MQ 中读取,在 1 卡中提升不大 TPS 为 3000 多,2 卡 QPS 为 4000 多,两机两卡 TPS 达到 6000 多,所以随着多机越多,训练性能达到线性的提升, VLAD-CTR 模型的测试具有相同的结果。YOLO V3 优化后 1 机 1 卡有 2.5 倍的性能提升,1 机 8 卡有 7.2 倍的提升。
Fig17 优化后的性能提升结果
Fig18 优化后的 DSSM-CVR 模型性能提升结果
Fig19 优化后的 VLAD-CTR 模型性能提升结果
Fig20 优化后的 YOLO V3 模型性能提升结果
05 总结
今天主要和大家分享了三部分的内容,第一部分内容是介绍了腾讯的 Angel 机器学习平台和其在深度学习方向上的拓展和应用,第二部分的内容是介绍了腾讯广告推荐系统的特点和常用模型,最后一部分的内容介绍了 Angel 深度学习在腾讯广告推荐系统中的应用,模型训练和优化,以及取得的效果。
今天的分享就到这里,谢谢大家。
作者介绍:
郭跃超,腾讯应用研究员
郭跃超,毕业于北京大学,主要研究方向是异构加速计算,分布式系统的设计开发和优化,语音/NLP 等领域的算法优化等。目前在腾讯主要负责 Angel 平台的深度学习方面的新技术研究,开发和业务场景的落地应用。
本文来自 DataFunTalk
原文链接:
评论