狠狠撸

狠狠撸Share a Scribd company logo
广告推荐训练系统的落地实践
腾讯广告推荐系统技术专家
孔祥挺
性能提升7倍+的
? 背景介绍
? 解决方案
? 架构设计
? 加速原理
? 性能测试
? 分布式训练解决方案
? 离线效果评估
? 落地实践
目录
1、在多流量的应用场景上下文中为海量用户提供
精准的个性化广告推荐;
2、助力广告营收高速增长;
背景介绍-需求
背景介绍-挑战
? 广告排序包括召回、粗排和精排等阶段,每个阶段对模型更新
频率提出不同的要求(分钟级、小时级、天级更新)
? 模型训练样本规模大(100亿+)
? 模型的快速调研和迭代,对训练性能提出更高的要求
广告库
召回模型
粗排模型
精排模型
100w级广告
1w级广告
100级广告
1~3广告
训练
加速
探索
新模型
3. 探索新模型算法 - 准确率更高
3. 已有线上模型 - 准确率提升
样本特征
① 注册
② 下载
③ 关注
④ 下单
…
① 广告ID
② 素材
…
① 兴趣
② 年龄
③ 性别
…
① 广告位
② 时间
③ 联网方式
…
标签Labels 广告特征 用户特征 上下文特征
CTR/CVR
模型训练
用户向量 广告向量 上下文向量
Concat Layer
FC Layer
…
FC Output
Sigmoid
训练数据 训练系统 模型文件
线上预估服务
用户访问
网络
分发
CTR
CVR
曝光
日志
回流
1、广告排序主要模型结构:深度学习DNN模型结构;
2、结构主体:embedding+mlp;
3、性能瓶颈:召回模型、粗排模型采用Tensorflow作为训
练系统的核心框架,但随着样本、特征规模不断增加以及
模型结构越来越复杂,性能瓶颈凸显;
4、优化成本高:Tensorflow推荐模型优化难度大、收效小;
背景介绍-现状
特征生成 特征仓库
训练
样本 Tensorflow
模型文件
Serving
在线服务
特征处理
预测
数据
播放平台
特征工程
训练平台
在线特征服务
请求
返回
用户请求
预测打分
日志
回流
特征读取
HugeCTR
解决方案-引入HugeCTR打造训练加速系统
训练平台
样
本
空
间
Data1
Data2
GPU0 GPU1
GPU2 GPU3
节点1
GPU0 GPU1
GPU2 GPU3
节点2
RDMA
GPU广告推荐加速系统
数据并行 GPU训练 分布式实现
P
C
I
E
加速系统技术框架
Tensorflow GPU方案原理图
Data
loss
gradients
CPU
GPU1
model
emb
GPU加速方案原理图
loss
gradients
GPU2
model
emb
让更多运算下
推到GPU中进行
加速方案:让更多运算尽可能下推到GPU中完成
1、在GPU中实现Embedding表的相关功能:
A、高维稀疏特征->低维稠密向量
B、稀疏参数查询和更新
C、特征排序、去重、计数
2、将CPU中的参数求和、求平均及更新等相关OP的实现下推到GPU中实现
加速原理
参数同步
参数同步
单节点内部使用流水线方式加速:
数据下载:从HDFS上下载数据到计算节点内存或者硬盘
数据读取和解析:多线程方式从本地内存或磁盘读取数据并解析,存入队列Q1
数据封装:多线程从队列Q1取出数据,封装后放入队列Q2
异步训练:训练线程每次从Q2队列中取出一个batch大小的数据块,放入GPU显存,进行训练
读取、解析、封装、训练几个阶段异步进行,避免相互等待;流水线方式,实现训练线程零等待
GPU运算:前向运算和反向运算均在GPU中完成,极大的提升运算速度
data from
hdfs
multi data
reading
Q1
multi data
parsing
Q2
GPU
Training
一个计算节点内部
raw data queue parsed data queue
数据流pipeline实现
embedding+mlp精排模型
? 原训练框架:
? 单机训练性能:4.5kW样本,100维特征 + 11维label,
训练2轮耗时15分钟 (10w样本/s)
? GPU方案:
? GPU V100单卡
? 训练2轮耗时1.07分钟
? 单机性能比原框架精排模型提升14倍(140w样本/s)
E
M
B
E
D
D
I
N
G
1
2
48
……
1
2
48
……
1
11
……
loss
FC+ Relu FC+ Relu FC
GPU方案性能测试
训练一个迭代各计算单元耗时占比:
计算单元 time(us) fp/bp percentage(%)
opt_adam_kernel 1830 bp 15.1
sgemm_fc_layer_fp 1746 fp 14.4
sgemm_fc_layer_bp 1660 bp 13.7
value_count_kernel 1248 bp 10.3
backward_sum_kernel 1183 bp 9.8
get_insert_kernel 1164 fp/bp 9.6
forward_sum_kernel 1020 fp 8.4
MemCpy(D->D) 998 fp 8.2
MemCpy(D->D) 980 bp 8.1
sgemm_fc_layer_grad 770 bp 6.4
DeviceRadixSort_Downsweep 482 bp 4.0
update_kernel 383 bp 3.2
DeviceRadixSort_Scan 130.4 bp 1.1
DeviceRadixSort_Upsweep 124 bp 1.0
计算单元 time(us) fp/bp percentage(%)
opt_adam_kernel 1827 bp 16.7
sgemm_fc_layer_fp 1785 fp 16.3
sgemm_fc_layer_bp 1662 bp 15.2
value_count_kernel 1244 bp 11.3
get_insert_kernel 1164 fp/bp 10.6
forward_sum_kernel 1020 fp 9.3
sgemm_fc_layer_grad 778 bp 7.1
DeviceRadixSort_Downsweep 490 bp 4.5
update_kernel 383 bp 3.5
DeviceRadixSort_Scan 130 bp 1.2
DeviceRadixSort_Upsweep 124 bp 1.1
优化
优化点:
? 通 过 网 络 结 构 的 优 化 合 并 去 掉 一 些 不 必 要 的 计 算 单 元 操 作
(backward_sum_kernel)
? 通过对数据结构的优化,去掉耗时较大数据传输io操作: MemCpy(D->D)
性能提升:
? 性能比优化前版本有25%+的提升
? 单机性能比原框架精排模型提升18倍+
GPU方案单机性能极致追求
0
2
4
6
8
10
12
14
16
精排模型 GPU 精排模型 GPU 精排模型(优化后)
训练2轮耗时(分钟)
15分钟
1.07分钟 0.84分钟
14倍
18倍
性能提升
设计思路:
1、采用数据并行的分布式训练方式
2、每次训练一个Minibatch的数据
3、采用RDMA通信方式进行参数同步,降低通信时延
分布式训练方案
推荐模型各层参数量分布情况:
109~1012
107+
102~105
Output
op_name
1 node
time(ms)
2 nodes
time(ms)
4 nodes
time(ms)
8 nodes
time(ms)
运算耗时 11.2 8.2 6.1 5.5
ncclAllReduce ~ 0.104 0.156 0.182
ncclReduceScatter ~ 21.31 32.03 37.36
nclAllGather ~ 20.23 31.78 37.02
total 11.2 49.81 70.07 80.06
瓶颈
多机8节点:
? batch为20000时
? 通信带宽:100Gb/s
? GPU运算耗时:5.5 ms
? 通信量:336MB【(8-1)/8 * 20000 * 4800 * 4B)】
? 通信耗时:74.6 ms
? 通信耗时完全覆盖GPU运算耗时,占比达到93%
E E
F F
W0
W1
?R
X0 X1
参数同步
Embedding layer输出后做参数同步
训练一个迭代各OP运算耗时:
? mini_batch ? mini_batch
mini_batch
分布式训练性能
推荐模型各层参数量分布情况:
109~1012
107+
102~105
Output
op_name
1 node
time(ms)
2 nodes
time(ms)
4 nodes
time(ms)
8 nodes
time(ms)
运算耗时 11.2 9.5 8.6 8.2
ncclAllReduce ~ 0.104 0.156 0.182
ncclReduceScatter ~ 0.214 0.320 0.374
nclAllGather ~ 0.208 0.311 0.368
total 11.2 10.026 9.387 9.124
多机8节点:
? batch为20000时
? 通信带宽:100Gb/s
? GPU运算耗时:8.2 ms
? 通信量:3.36MB【(8-1)/8 * 20000 * 48 * 4B)】
? 通信耗时: 0.924 ms
? 通信耗时只占整体耗时的10%左右,耗时大大降低
第一层全连接输出后做参数同步
E E
F F
W0
W1
S
X0 X1
S S
参数同步
?R
训练一个迭代各OP运算耗时:
降低通信量
mini_batch
mini_batch
mini_batch
分布式训练性能优化
? mini_batch ? mini_batch
0
2
4
6
8
10
12
14
16
精排模型 1 node 2 nodes 4 nodes 8 nodes
训练2轮耗时(分钟)
优化前 优化后
15分钟
6分钟
0.68分钟
2.5倍
22倍
分布式性能提升
预估目标 精排模型 GPU 精排模型 AUC提升
target0 0.69283 0.69849 0.81
target1 0.79055 0.81719 3.26
target2 0.78348 0.79245 1.13
target3 0.75351 0.78766 4.34
target4 0.81594 0.87072 6.29
target5 0.73477 0.7989 8.03
target6 0.7236 0.83499 13.34
target7 0.76661 0.79035 3.00
target8 0.99077 0.99491 0.42
target9 0.98407 0.99569 1.17
target10 0.75211 0.84672 11.17
AUC效果提升
Remark:
1、性能提升20倍+
2、GPU离线AUC效果普遍提升,
其中部分指标提升在10%以上
3、AUC指标作为模型上线的一个重要指标
离线效果评估
广告特征N
Embedding
Concat
Full Connection
ad_feature1
Embedding
Reshape
user_feature1 ad_featureN
user_featureN
Dot product
Sigmoid cross entropy
with logits
… …
用户特征1 用户特征N 广告特征1
Concat
Full Connection
Reshape
落地要点:
? 兼容现网广告推荐系统
? 兼容现网在线服务系统(tf-serving)
? 兼容Tensorflow生态
? 数据流pipeline实现
? 支持数据shuffle功能
? 权重更新方式改造
落地实践-广告粗排DNN双塔模型
召回 粗排打分
广告库
粗排
精排打分
召回模型 打分模型 打分模型
定时/实时推送
精排模型训练
用户特征信息
百级广告
用户
请求
用户画像
特征拉取
在线服务 在线服务
定时/实时推送
用户层 功能完善 易用性 可靠性
框架层 深度学习训练框架 GPU分布式框架 HugeCTR框架
计算层 大规模通信引擎 编译优化引擎 算子优化引擎
资源层 GPU集群 CPU集群 存储和网络
精排
广告推荐训练平台
Model server
Model client
ctr ver.1
ctr ver.2
ctr ver.3
Model server
cvr ver.1
cvr ver.2
cvr ver.3
Model server
at ver.1
at ver.2
at ver.3
在线预测
All: ver.1
ver.2
ver.3
Latest: ver.3
specified: ver.2
Tf-serving在线服务 Tensorflow
Train
pb model
HugeCTR如何兼容在线服务系统
特点:
①在线服务框架:tfserving
②训练框架:tensorflow
③训练数据格式:tfrecord
广告粗排在线服务系统介绍
Tensorflow ckpt model
Tensorflow
Train
Tensorflow pb model
dense&emb
model
HugeCTR框架集成到广告推荐训练平台
HugeCTR
Train
HugeCTR框架集成到训练平台
HugeCTR
Train
emb_0.model
emb_1.model
dense.model
matrix_dict
tower_0/age_lookup/age/Variable:0
tower_0/gender_lookup/gender/Variable:0
tower_0/edu_lookup/edu/Variable:0
…
[480, 32]
[20, 16]
[180, 16]
无缝接入在线服务系统-模型格式转换
年龄 性别 学历 ocr_keywords click_info
age
embedding
gender
embedding
edu
embedding
ocr
embedding
info
embedding
3 poster mobile_phone trousers
5 大 免费 协议 离婚 阅读
Tensorflow
multi-embedding
21 13 0 1 1 3
Hash处理
HugeCTR
two-embedding
hash_index + max_key * feature_id
multi-embedding->two-embedding
age_key、gender_key、edu_key…
embedding
兼容Tensorflow生态-支持hash embedding
ocr_key、info_key…
embedding
Concat
Full Connection
Concat
dense feature
Non-linear OP
Concat
embedding
Concat
Full Connection
embedding
Dot OP
用户特征 广告特征 dense特征
Sigmoid OP
sqrt square
clip
add
dense value
dense value
concat
clip
slice
支持DAG计算图
N个文件
Tfrecord
reader
HugeCTR
Training
download_success
train_data
…
HDFS
finish
Queue
入队列
出队列
4
1
2
3
① 当train_data目录下检测到download_success文件时,将训练文件读入到队列中,读完后给train_data 目录回写
read_done标志文件;
② Tfrecord reader从队列中读取训练数据并解析,按batchsize大小写入到CSR_Chunk中;
③ GPU Training线程每次从CSR_Chunk中取出一个batchsize数据到GPU中进行训练;
④ 当该批次所有数据都训练完成后,将train_data目录下的download_success和read_done文件删除;
⑤ 当train_data目录检测到finish文件时,表示所有数据训练完成, Tfrecord reader线程依次退出,数据处理整个流
程结束。
del download_success and read_done
5
tfrecord
喂入数据
数据流pipeline实现
…
csr_chunk0
csr_chunk1
csr_chunk2
csr_chunkN
…
csr_chunk0
csr_chunk1
csr_chunk2
csr_chunkN
GPU读取数据
GPU读取数据
内存队列数据读取优化
优化
0
2
4
6
8
10
12
原框架 HugeCTR框架
训练200*8000 samples耗时(秒)
10.7s
1.4s
7倍+
Remark:
上述结果是单机1卡性能测试结果(v100 + 40 CPU)
性能测试
放量1%线上灰度效果:
实验(11.27-11.30) 曝光 消耗(平台收入) 广告主收入 (校正后)平台收入
实验 +0.0538 % +0.3441% +3.3553% +1.5054%
Remark:
目前已推进线上放量10%,效果持续优化中
线上灰度效果
0 1 2 … N
0 1 2 … N
31 109 866 … 732
0 1 2 N
Random_id buffer
Samples buffer
cursor_++
读出下标为31的sample
buffer
file1
buffer
file1
filek
…
batch
buffer
filek batch
…
…
…
Shuffle机制
独占buffer
共享buffer
内存开销大
内存开销小
Shuffle数据打乱方案设计
batch
batch
…
权重更新方式改造
fc fc
fc
fc …
梯度
HugeCTR原生方式
?Wn
Wn
梯度
不更新
矩阵运算
?W
Adam
W
全量更新
fc fc
fc
fc …
梯度
改造后方式
?Wn
梯度
更新
矩阵运算
Adam
Wn
感谢各位的聆听!!
1、后续计划
A. 业务落地推进及线上效果持续调优
B. 模型结构多样化支持
C. 单机多卡、分布式方案落地
地址:广东省深圳市南山区后海大道腾讯滨海大厦
邮箱:beckyu@tencent.com
xiangtikong@tencent.com
微信公众号
后续计划&QA
联系我们

More Related Content

广告推荐训练系统的落地实践