爱奇艺 AI 推理平台演进和实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 爱奇艺AI推理平台演进和实践
张俊钦
爱奇艺深度学习平台研究员
2.
3. 1.
2.
3.
4.
背景介绍
AI 推理平台架构演进
AI 推理平台落地优化实践
总结与展望
4. 1. 背景介绍
5. 背景介绍
•
AI 在爱奇艺的应用场景
6. 背景介绍
•
AI 业务的归类
CV/NLP
搜索/广告/推荐
爱奇艺 AI 推理平台
7. 背景介绍
•
从离线模型训练到模型部署
高可用
离线
模型训练
模型
上线
低延迟
监控告警
在线
生产部署
弹性扩缩容
稳定性
8. 背景介绍
•
爱奇艺深度学习平台总体架构
创作
Applications
生产
AI
Frameworks
标注
TensorFlow
分发
播放
…
…
Pytorch
Data
Platform
Algorithm
Store
AI as a
Service
Resource
Management
& Orchestration
Infrastructure
数据样本
分析
训练平台
Mesos
CPU/GPU
推理平台
工作流
Kubernetes
公有云
网络
存储
9. 2. AI 推理平台架构演进
10. AI 推理平台架构演进
•
架构演进
V1 V2
- 自定义镜像
- 容器化部署
- 支持 VIP - 抽象环境
- 模型独立
- 版本管理
V3
- 模型热更
新
- 支持多版
本
- 服务发现
11. 架构演进 V1
•
自定义推理镜像
•
Docker 容器化部署
•
将模型封装到镜像,推送到 Docker Registry
绑定 VIP,对外提供 HTTP 服务
模型版本升级
通过更新镜像和重启容器
Docker Registry
Image
部署
爱奇艺 AI 推理平台
VIP
对外
服务
12. 架构演进 V1
•
•
优点
可以自定义复杂的前后处理逻辑
可以封装多个相互关联 AI 模型的推理
缺点
推理镜像环境依赖和训练环境难对齐
大部分是 Python 代码封装,推理效率比较低
13. 架构演进 V2
•
抽象深度学习框架环境
•
模型文件独立管理
•
平台提供各个框架版本的容器镜像
平台提供 S3 对象存储来上传/下载模型
模型加载和版本升级
传递模型 S3 路径到容器,启动时下载,版本更新通过重启容器
S3 对象存储
爱奇艺 AI 推理平台
模型
下载
VIP
对外
服务
14. 架构演进 V2
Step1: Step2:
上传模型文件
到 S3 存储 用 S3 路径通过平台
创建一个模型
Step3:
选择对应的镜像
和实例规格
8 CPU
20G MEM
1 GPU
模型 A
实例 2
Step4: 通过平台创建
Endpoint 服务,
自动把 S3 路径传递到
容器中
爱奇艺 AI 推理平台
Step5:
容器启动时
从 S3 下载
模型文件,
然后加载模型
Step6:
模型 A
模型 A
VIP
对外
服务
升级时,传递新模型 S3 路
径到容器,并逐个重启
15. 架构演进 V2
•
•
优点
推理服务只依赖于模型文件
支持模型优化,提高推理效率
缺点
模型更新时版本不统一
不能适应搜索/广告/推荐类业务对 TCP 长连接的需求
16. 架构演进 V3
•
模型版本动态热更新
•
模型多版本管理
•
通过 S3 对象存储下载模型,实时热更新,不需要重启容器
可以同时服务模型的多个版本,支持回滚
服务发现
支持 Consul 服务发现
S3 对象存储
爱奇艺 AI 推理平台
模型
下载
服务发现
17. 架构演进 V3 概念定义
•
Model
•
Model Version
•
表示某个 Model 的一个具体版本,指向一个具体的模型文件
一个 Model 下可以包含多个模型版本,版本号必须是自增的
Serving Set Version
•
表示某一个 AI 模型,一个逻辑的模型名称,并不包括任何模型实体文件
当前服务的模型版本集合,包含一个或多个 Model Version
Endpoint
一个推理服务,包括一个或多个容器实例,每个实例服务相同的模型版本
18. 架构演进 V3
Model A
Model
Version
V1
V2
Step3:
设置期望的
模型版本
…
Vn-1
Serving Set Version
Model A V2
Model A Vn
Step4: 执行升级接口,
平台自动发送 HTTP 升级
请求到每个容器
Vn
Step1:
上传模型
到 S3 存储
Step2: 创建对应的
模型版本
当前期望
模型版本为
Model A 的 V2 和 Vn
Step5:
直接下载
模型版本
然后加载
Endpoint
Docker Docker
V2 V2
Vn Vn
19. 架构演进 V3
•
模型版本滚动升级
Model A
Model
Version
Step1:
V1
设置期望的
服务版本
V2
Serving Set v1
Model A V10
Model A V11
升级
…
V10 Step2:
V11 设置期望的
服务版本
V12
Serving Set v2
Model A V11
Model A V12
升级
20. 适配更多业务场景
•
•
XGBoost/FM 机器学习模型
在 TensorFlow Serving 的基础上增加了 XGBoost
和 FM 模型的推理支持,并对外开源
https://github.com/iqiyi/xgboost-serving
ANN 向量检索
将 HNSW 算法封装成 TensorFlow OP 加入到训练
和推理服务
在 TensorFlow 中训练索引导出模型,部署推理服
务
21. 适配更多业务场景
•
•
•
CTR 大模型分布式推理
将 TF 模型里的
Embedding 矩阵拆分出
来独立部署
增加远程 Embedding
lookup OP
22. 3. AI 推理平台落地优化实践
23. 落地优化实践
•
指标监控
•
自动扩缩容
•
优化其他地区的推理服务从北京地区下载 AI 模型
请求限流
•
根据监控指标变化进行动态扩缩容
跨地区模型下载
•
服务内部的延迟,QPS 等监控指标
让推理服务在高负载下仍然可以降级服务
模型热更新请求毛刺优化
模型热更新期间,客户端请求超时毛刺优化
24. 指标监控
•
•
使用 Brpc bvar 增加服务内部的延迟,QPS 等监控指标
bvar 是多线程环境下的计数器类库,几乎不会给程序增加性能开销
25. 自动扩缩容
•
支持 4 种类型的自动扩缩容策略
Scheduled
Rule
• 支持定时的扩缩容
Range Track
Rule
• 对特定指标的变化
进行动态扩缩容
• 使指标保持在指定
范围(range)内
Target Track
Rule
• 对特定指标的变化
进行动态扩缩容
• 使指标尽可能接近
并小于指定目标
(target)
Predict Rule
• 对指标的变化进行
提前预测,并根据预
测结果提前进行扩缩
容
26. 跨地区模型下载
•
•
•
S3 对象存储集群部署在北京地区
在中西部地区的推理服务需要从北京地区下载模型
当实例数量过多,模型较大时对带宽压力比较大,时间过长
北京地区
中西部地区
Endpoint
Docker
Docker
V2
V2
Vn
Vn
模型
下载
模型
上传
27. 跨地区模型下载
•
•
增加下载代理,通过智能 DNS 重定向
代理分片多线程下载,本地缓存
北京地区
模型
下载
中西部地区
Endpoint
Docker
Docker
V2
V2
Vn
Vn
代理
智能 DNS
模型
上传
28. 请求限流
•
•
线上业务在高峰期出现服务过载不断重启的情况
原因是 GRPC Server 处理线程不断增加导致 OOM
29. 请求限流
•
限制 GRPC Server 的最大线程数量
MainWorkLoop
重新进入
PollForWork 从队列
中获取 GRPC 消息
已到 quota
DoWork 开始
处理 GRPC 消息
判断 GRPC 线程数量
是否到了 resource quota
未到 quota
创建一个新的
WorkerThread
DoWork 开始
处理 GRPC 消息
新线程
30. 模型热更新请求毛刺优化
•
模型热更新会出现短暂的客户端请求超时现象(称之为毛刺现象)
31. 模型热更新请求毛刺优化
•
•
•
通过 Warmup 来预热模型
使用 Jemalloc 做内存分配优化
模型参数分配和 RPC 请求内存分配分离
32. 4. 总结与展望
33. 总结与展望
•
•
目前线上以 V1 和 V3 两种为主
V1 的框架比较多样,主要使用是 CV/NLP 类业务
V3 的框架以 TensorFlow 为主,主要使用业务是搜索/广告/推荐
后续的方向
利用 Triton 统一 CV/NLP 类模型部署
推理模型自动优化
TVM 自动编译优化
超大推荐类模型在线训练和推理支持
34.
35.