美团搜索:推荐推理引擎实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团搜索/推荐推理引擎实践
美团平台技术部
钱玉磊
2. 个人简介
l 2020年加入美团,带领机器学习引擎组,负责大规模
机器学习引擎的技术指导工作,完成了首页推荐/搜索
模型的全面GPU化。
l 加入美团之前
ü 2018年-2020年,负责百度凤巢大规模机器学习引擎
GPU版本AIBOX的设计与开发以及相关算法工程工作。
ü 2017年-2018年,获百度最高奖。从事百度凤巢模型
训练引擎、分布式计算引擎、PaddlePaddle分布式参
Papers:
Weijie Zhao, Deping Xie, Ronglai Jia, Yulei Qian, Ruiquan Ding, Mingming
Sun, Ping Li: Distributed Hierarchical GPU Parameter Server for Massive Scale
Deep Learning Ads Systems. MLSys 2020
Weijie Zhao, Jingyuan Zhang, Deping Xie, Yulei Qian, Ronglai Jia, Ping Li:
AIBox: CTR Prediction Model Training on a Single Node. CIKM 2019: 319-328
Patents:
2021,一种Parameter Server分布式训练架构下PS资源配额的自动弹性扩缩容技术
2020,一种基于任务类型识别的智能化深度学习任务混布技术
2019,一种模型训练方法、装置、设备及存储介质
数服务器PSLIB的开发。
ü 2016年-2017年,从事流式计算部分的开发,开发百
度流式计算引擎Dstream3。
ü 2015年,加入百度凤巢模型工程组,从事大规模机器
学习推理引擎以及在线平台化的工作。
3. 目录
01
02
03
大规模机器学习的背景
实时学习介绍
推理架构介绍
4. 搜推模型特征规模可达千亿级
l VC维理论
ü 描述模型的学习能力:VC维越大模型越复杂,学
习能力越强
ü 机器学习能力 = 数据 + 特征 + 模型
l 数据
ü 海量数据:美团的亿级用户、千万级POI
l 特征
ü 大规模离散特征 > 小规模泛化特征
上下文
Query
Query片段
天气、地理位置等
l 模型
ü 复杂模型 > DNN > LR
POIID ItemID DealID
Session
历史统计
年龄,性别
用户
商品
5. 搜推模型复杂度越来越高
l
ü
ü
ü
复杂模型结构引入搜广推领域
DNN:简单的MLP层,提高模型泛化能力
Attention:注意力机制,结合用户的浏览行为进行建模
MMoE:多业务、多目标优化,结合应用场景进行建模
l 模型复杂度衡量:5年30倍
ü 神经网络层参数规模:神经网络层的参数个数
ü 神经网络层的浮点数运算量:浮点数乘法运算量
模型 参数规模 单batch浮点
数运算量
(bs=200)
2019,DCN ~100W 7.72亿
2020,SCENE ~200W 18.02亿
2021,MTL ~300W 22.25亿
2022,Attention ~1500W 119.39亿
2023, Long
Sequence ~3000W ~2000亿
LSTM
Wide
Wide
S
c
Attention
Deep
LR模型:强调特征的记忆性
DNN模型:Wide and Deep结构,泛化性
领域定制模型:先验复杂结构
6. 搜推推理系统架构的设计
谷歌:生产ML系统的构成 [1]
搜推机器学习系统:远超机器学习本身
l
ü
ü
ü
可用性原则
分布式
高并发
低延迟
l
ü
ü
ü
易用性原则
组件化
平台化
智能化
[1] D. Sculley, Gary Holt, etc. Hidden Technical Debt in Machine Learning Systems
l
ü
ü
ü
容错性原则
面向异常
面向测试
面向监控
7. 目录
01
02
03
大规模机器学习的背景
实时学习介绍
推理架构介绍
8. 为什么需要流式
ü 图中横轴代表从推荐模型训练结束到
模型测试的时间间隔天数,纵轴是损
失函数Normalized Entropy的相对
值。
ü 从图中可以看出,无论是树模型还是
LR模型,模型延迟越久,loss越大,
对应的线上的预估准度就越差.
Facebook, 2014, Practical Lessons from Predicting Clicks on Ads at Facebook
9. 美团场景下的流式训练回路
ü 数据实时性:实时用户行为,曝光、浏览、点击、支付、负反馈等。
ü 特征实时性:实时特征处理,拼接时间窗问题。
ü 模型实时性:用户行为的即时反馈,模型增量训练、增量更新。
10. 流式训练框架
l Online Learning对数据流的要求
ü 不重不丢:重复的数据会使模型有偏,丢失的
数据会使模型缺失重要信息
ü 数据有序性:数据乱序会导致样本穿越的现象
l LogJoin框架
ü 双流拼接框架:通过组合方式支持多流拼接
ü 基于Event Time的Window机制拼接方式
ü 基于Low Watermark解决流式常见的样本乱
序、延迟等问题
11. 流式训练的一些问题
l Low Watermark机制
ü 定义了流式数据的时钟,不可逆性
ü Smooth Low Watermark,异常数据时间跳变
l Checkpoint解决数据不重不丢的问题
ü 外存解决大数据量性能问题
ü 在引擎中流转logkey,特征数据外存
l 样本纠偏问题
ü 样本重要性采样
ü FN(False Negative)矫正:预测时
ü PU Loss(Positive-unlabeled loss):训练时
12. 时效性与一致性的权衡
l 一致性场景
ü 请求拆包导致的不一致
ü Dense模型和sparse模型拆分导致
的不一致
ü 多分库、多副本导致的不一致
l 一致性的衡量 l 时效性挑战
ü 一致程度 = 1 – 不一致时间 / (不一致时间 + 一致时间) ≈ ü Dense model vs Sparse model
1 – 更新耗时 / 更新周期
ü 更新周期 = 模型时效性
ü CAP理论:没有最好的架构,只有更适合的架构
ü 最终一致性 vs 强一致性
ü 极致时效性之后的回滚、灾备等容
错方案
13. 目录
01
02
03
大规模机器学习的背景
实时学习介绍
推理架构介绍
14. 分布式架构:模型和流量规模可伸缩
稀疏特征处理过程
ID
超高维稀疏特征:数十亿~数千亿,onehot编码
Hash(gender=female)=1049900758977499928
Hash(gender=male)=1089198815824712206
Embedding机制:需要高效的hash查找
Embedding
Pooling
MLP
Embedding(1049900758977499928)=(-0.036, -0.018, 0.092, …)
Embedding(1089198815824712206)=(-0.04, -0.099, -0.021, …)
降维:Pooling时体现特征域属性
Embedding(gender)=Pooling(
Embedding(1049900758977499928),
Embedding(1089198815824712206))
神经网络层:大量矩阵乘法运算
MLP & Attention & LSTM &…
l 分布式sharding
ü 模型分片存储,支持超大规模模型,scale up能力
ü 数据并行计算,支持更多请求,scale out能力
l
ü
ü
ü
ü
模型压缩
Pre-Train的低频特征过滤:Counting Bloom Filter
In-Train的低频特征过滤:特征统计量
Post-Train的低频特征过滤:L1正则、特征统计量
Inference:半精度计算,Embedding半精度完全无损
分布式参数服务器架构
15. 参数的放置策略
l 模型数据的统一管理 l PS分布式分片的均衡,避免数据倾斜
ü 模型结构 ü NN网络矩阵按行切分,解决请求包不均衡的问题
ü 模型参数 ü 特征按照Hash方式均衡存储
16. CPU推理架构
l CPU Predictor l 模型通路建设
ü 轻量级Predictor:支持特征变换、模型计算, ü 模型版本管理:快速回滚
无状态设计
ü 多种场景的模型支持:
ü 远端模型:RPC访问PS获取模型参数,适用于大
于1GB的模型场景
ü 本地模型:本地直接加载模型,省去RPC开销,
适用于小于1GB的模型场景
ü 模型持久化:服务迁移、回滚、扩缩
容
ü 增量模型合并:提高追模型的效率
17. GPU的必要性:算力需求随着数据和算法的发展而增强
CPU摩尔定律降速
l AI = 数据 + 算法 + 算力
ü 数据:规模膨胀,且不可逆
ü 算法:算法发展精细化,趋于复杂
ü 算力:阿姆达尔定律(Amdahl’s
Law),分布式带来的边际效应降低
GPU对摩尔定律的延续
l 算力的基础是硬件的发展
ü CPU:摩尔定律放缓
ü GPU:延续摩尔定律
ü 网卡:12GB/s
ü NVLink:150GB/s
18. GPU推理架构
l 设计思路
ü 从硬件到软件:硬件配置决定了软件架构
ü 从CPU到GPU:数据流程以GPU为主,CPU为辅
l 关键因素
ü Device Embedding Table作为Cache:Cache命中率AVG 94.3%,TP9999 83.7%
ü 冷热数据具有时域性:Cache换血率约20%
ü 流水线框架:多阶段流水线,提高服务吞吐
ü TensorFlow计算图优化:切割特征子图和模型子图,分别优化
19. GPU推理架构
l 基于GPU体系的推理架构
ü 流水线架构:充分利用不同硬件,CPU、GPU,让不同阶段的耗时overlapping起来
ü 动态batching:基于队列情况,聚合相邻请求,充分利用GPU的并发效果,提高吞吐
ü 多级存储:平衡存储容量和访问延迟
ü 多计算引擎:易用性、性能之间的权衡
20. cuFea:典型的稀疏处理过程
l 稀疏特征处理的特点 l 优化的思路
ü 字符串处理多,非数值计算场景 ü 阶段一,特征计算:构建基于GPU架构的抽取框架,提供<样本,特征>粒度的并发能力
ü 访存密集操作 ü 阶段二,特征查找:基于GPU的K-V查找,提高访存效率
ü 阶段三,特征拼接:三大类算子融合拼接,提高计算效率
21. cuFea:以GPU为主体的特征计算框架
l 设计思路 l 关键因素
ü 图化特征抽取框架:基于图化做算子编排 ü 样本 * 特征维度:样本 200 ~ 600条,特征 150 ~ 200个,并发
ü 必要性:batchsize=200时,CPU特征耗时11.76ms,
而允许的耗时不超过5ms
度足够
ü 签名过程GPU化:2W次签名操作,CPU 2.28ms vs GPU
ü 可行性:从算子的类型进行分析
0.03ms
算子分类 占比 平均输出特征个数 特点
数值、字符串转
换、签名 70% 0~1个特征 可归约为纯计
算
Session类特征 21% 平均输出几十个特
征 较复杂,单
kernel内要完
成字典、排序
等操作
字符串切割以及
其他 9% 输出特征长度未定 可归约为纯计
算
22. cuFea:特征查找优化
l 子图融合:识别子图结构,减少算子数40%,高QPS时2-3ms收益
l 多表融合:融合不同EmbeddingTable,减少查询算子数
23. cuFea:特征拼接优化
l 算子融合:通过人工融合算子,提高算子并发,耗时收益5ms+
l 结构转换
ü 改写用户代码
ü 改写执行层代码
用户喜欢写的代码
机器喜欢的代码
l Sum Pooling
ü 常见的特征降维操作,
算子数可达数千个
l Mask Pooling
ü 序列特征使用的操作,
算子数可达数百个
l User Feature
Broadcast
ü 搜广推场景很常见
ü Item类特征共享User
特征,一次预估候选
item几百上千
24. 编译优化:性能和灵活性的折衷
l
ü
ü
ü
TVM
开源,算子丰富度高
二次开发容易
多硬件支持
l TensorRT
ü 性能更高,特定硬件优化
l 动态shape
ü 静态IR转动态IR:便于内存聚合操作
ü 搜广推场景:Tensor[query, item,
feature, embedding],item维度的
动态shape
静态IR
动态IR
25. Q&A
26. 欢迎加入我们
一起探索更多有意思的技术
邮箱:qianyulei02@meituan.com
更多技术干货
欢迎关注“美团技术团队”