写点什么

Angel:深度学习在腾讯广告推荐系统中的实践

  • 2020-10-27
  • 本文字数:5166 字

    阅读完需:约 17 分钟

Angel:深度学习在腾讯广告推荐系统中的实践

导读: 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


原文链接


Angel:深度学习在腾讯广告推荐系统中的实践


2020-10-27 14:002741

评论

发布
暂无评论
发现更多内容

软件开发丨关于软件重构的灵魂四问

华为云开发者联盟

软件 开发者 软件开发 代码 软件重构

开发者的福音,LR.NET模块化代码生成器

Philips

敏捷开发 快速开发 模块化流程 代码质量 .net core

全民加速节:动态加速在在线教育应用上的最佳实践

阿里云Edge Plus

在线教育 CDN

莱卡、宾利都在用,英特尔oneAPI渲染工具带来高质量视觉体验

E科讯

MySQL redo与undo日志解析

Simon

MySQL Redo MySQL日志

硬核科技:莱克立式吸尘器,引领家居清洁“新态度”

InfoQ_967a83c6d0d7

分享一个阿里云轻量级开源前端图编排,流程图js组件——butterfly-dag

InfoQ_39ba186c207f

Java 流程图 flow canvas html/css

mPaaS 客户端证书错误避坑指南

阿里云金融线TAM SRE专家服务团队

“全球+”浪潮下,企业出海选择合适的“技术船舶”成关键

华为云开发者联盟

网络 华为云 企业出海 网络加速 宽带

GrowingIO AWS 成本优化之路

GrowingIO技术专栏

AWS 成本优化

【写作群星榜】8.15~8.28 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

有为而治:平衡吞噬世界的系统之熵

IT民工大叔

云原生技术采用增加,全球60%后端开发人员都在使用容器 | 趋势分享

BoCloud博云

云计算 容器 云原生 PaaS 博云

华为云会议的前世今生

华为云开发者联盟

直播 云服务 华为云 视频编码 视频会议

币期权DAPP 8月28日全球同步耀世上线,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

GitMaster 更新v1.9.0,支持Gitea,Gist拥抱黑暗模式

neo

gitlab tree gitee GitHub、

LeetCode题解:155.最小栈,使用两个栈,详细注释

Lee Chen

大前端 LeetCode

CRM企业到底该不该做PaaS?

ToB行业头条

PaaS SaaS CRM

我也没想到 Springboot + Flowable 开发工作流会这么简单

程序员小富

java 14

微服务架构下,DLI的部署和运维有何奥秘?

华为云开发者联盟

Docker 大数据 Serverless 数据湖 DLI

从6大应用场景,看边缘计算落地生根

BoCloud博云

容器 边缘计算 PaaS 云平台 博云

温故知新——Spring AOP(二)

牛初九

spring aop ioc

新金融分布式架构之SOFAStack解决方案

阿里云金融线TAM SRE专家服务团队

性能相关,内存

Linuxer

性能

oeasy教您玩转linux010106这儿都有啥 ls

o

柔性电子拥有改变地球的能力吗?

脑极体

ShardingSphere简介+实战

云淡风轻

ShardingJDBC

炒股不要看K线图(分享最近学习投资的一点心得)

Nick

投资 理财

学习Python真的能找到工作吗?

代码制造者

Python 程序员 编程语言 低代码 零代码

数据挖掘学习指南(转载)

Jackchang234987

数据挖掘 产品经理

不得不了解系列之限流

梦朝思夕

限流

Angel:深度学习在腾讯广告推荐系统中的实践_AI&大模型_DataFunTalk_InfoQ精选文章