深度学习平台在线推理服务和离线训练作业混部
如果无法正常显示,请先停止浏览器的去广告插件。
1. 深度学习平台在线推理服务和离线训练作业混部
侯法超
2. 个人简介
l
l
工作经历
l 21年4月~至今 58同城 AI平台
l 16年11月~21年4月 天润融通 呼叫中心 AI平台等
教育背景
l
13年9月~17年7月 本科 青岛科技大学
3. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
4. 深度学习平台
模型训练
实验环境
推理服务
代码在线调试 单机单卡训练
资源复用 参数服务器(多机多卡训练)
推理加速(TensorRT、MKL、OpenVINO)
负载均衡
一键扩容
ABTest
深度学习框架
日
志
中
心
Docker、Nvidia-Docker2
Kubernetes
Prometheus
DNS
Calico
ETCD
资源管理
K40
rsyslog
Grafana
P40
…
服务发现
任务调度
存储
算力
CPU
T4
2080ti
…
RAID
监
控
中
心
HDFS
WOS
WFS
镜
像
中
心
5. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
6. 为什么要做混部
l
l
提升资源利用率
l GPU计算资源昂贵,成本高
l 在线服务负载潮汐变化,将夜间波谷资源进行充分利用
灵活的资源拆借,应对在线服务突发的流量高峰
在线推理GPU负载
离线训练GPU负载
7. 在线推理服务
l 在线推理服务具有典型的潮汐性,天级利用率稳定
l 用户倾向于申请比实际需求更多的资源以确保服务的稳定性
l 通过在线推理服务的弹性伸缩能回收波谷资源的冗余副本
8. 离线作业与在线服务特点
在线服务 离线作业
时延 敏感 不敏感
SLO 高 低
负载模型 白天负载高,夜间负载低 只要运行,负载就很高
错误容忍 错误容忍度低,高可用 允许失败重试
如何通过混部控制实现在离在线之间资源的灵活拆借 ?
9. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
10. 背景介绍
l 当前在线推理任务规模较大,占据了大量的CPU和GPU资源
l 在线推理任务的流量存在一定的规律性,空闲资源提供离线训练使用
充分利用计算资源,流量低峰资源使用率低自动缩容
l 应对流量上涨自动扩容减少人工提前干预
11. 基本思想
模型推理服务资源利用率扩容阈值x max ,缩容阈值x min ,期望阈值x,实
际资源使用率y
l y > x max : 服务扩容,增加节点数量
l y < x min : 服务缩容,减少节点数量
l 扩缩容指标:GPU/CPU/内存/显存/QPS ......
l 扩缩容节点数量 y -> x
12. 自动弹性伸缩
13. CPU/GPU资源使用值预测
l
CPU
l
l
5个模型
GPU
l
5个模型
14. 弹性扩缩策略
l 机器学习模型GPU/CPU使用率预测
l 数据驱动
l 多重策略计算
15. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
16. 离在线混部方案
l
l
离线和在线推理任务部署同一服务器,需要对Linux内核做优化
l 在线及时抢占或驱逐离线
l 网络资源隔离
l L3 Cache 、内存带宽
l 磁盘IO
离线训练作业复用在线服务器,相对简单
l 整机出让
l 离线训练作业调度
17. 设计目标
l 在线服务SLO受保证,离线训练作业不能无限填充
l 在线服务需要更多资源时,离线训练作业能及时避让
l 离线训练作业的成功率受保证,不能因为频繁受限,导致失败率很高
18. 架构图
19. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
20. 监控数据接入
21. Event收集
l
K8s Event事件保存etcd中,默认只
保留1小时
l 消费者不能设计偏移量
l 减少K8s集群压力
22. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
23. Flink实时计算
24. Flink实时计算
l
从Kafka Prometheus中取最近1分钟所
有Pod监控数据
l
通过保存在K8s中的节点元数据信息计算
Kafka
Pod所有监控指标
出各资源组使用率
l
将各个资源组实时quota使用率分别推送
Pod监控指标聚合
给混部策略模块
资源组指标聚合
Kafka
25. Flink实时计算
Kafka
数据解析 指标过渡 podName pod监控
map filter byKey process
byKey process Sink
资源组 k8s 元数据 资源组监控
pod
Kafka
26. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
27. 策略模块
28. 资源池划分
l 将所有服务器通过k8s labels分为在线、混部、离线三个资源池
l 调度规则
l 长时离线任务调度到离线资源池
l 短时离线任务优先调度到混部资源池
29. 资源池分组
l
在线推理和离线作业指定资源GPU,因此需要进行分组
l CPU 资源组
l GPU资源组
l
l
根据不同类型显卡资源细作不同GPU资源组
vGPU资源组
l
根据不同类型显卡资源细作不同vGPU资源组
30. 在线基于quota使用率出让
l
根据各资源组cpu/gpu quota使用率,将自动缩容资源折合成同等规模的机
器
l 初始时集群满载,配置集群quota使用率阈值 y
l 在线服务整体缩容,集群quota使用率下降至 x
l 感知 y > x,选择节点进行实例驱逐,腾出整机出让给离线
31. 错峰实现资源动态配比
l
l
两阶段混部模式
l 白天:离线按需出让资源填补在线高峰资源缺口
l 夜间:弹性伸缩出让闲置资源出让给离线训练使用
满足在离线各自资源需求的同时实现资源动态的配比
32. 节点状态变更
节点由离线转为在线或在线转为离线时,需要将原Pod驱逐,Pod会执行优雅关闭,在所
有Pod关闭前不能调度新服务,因此引入中间状态标签status=unnormal作为中间状态。
l online: 节点在线使用
l online2offline: 节点被选择出让,需要迁移
残留在线实例
l offline:节点离线使用
l offline2online: 节点被选择归还,需要清理
残留离线训练作业
33. 策略模块
l
l
事件驱动
l quota使用率
l K8s Event
K8s Pending
资源组
出让/回收
在线出让固定步长
l
Kafka
Kafka
保证在线稳定
离线/在线
是否可以出让
离线节点选择
离线节点选择
是否可以出让
在线节点选择
离线作业重调度
在线节点选择
离线作业重调度
Pod驱逐
Pod驱逐
策略执行
策略执行
34. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
35. online2offline
l
l
l
在线阈值
l 扩容阈值:在线超过此阈值则开始扩容
l 缩容阈值:低于此阈值则允许缩容
l 期望阈值:在线回收到该阈值
在线资源池出让的触发
l 当离线发生Pending时,则开始触发在线资源池出让
l 每分钟检测当前整体GPU/CPU使用率,根据缩容阈值确认是否可以回收
l 如果有因在线资源不足导致的Pending,停止出让
在线资源池出让采取平滑出让策略,固定步长,保证在线服务质量
36. online2offline
l 在线资源池的出让分3步,筛选节点、清理节点、离线使用
l 1. 混部资源池中选出需要回收的节点: 先Pod数量,再GPU、CPU使用率。并保
证该节点回收后,当前在线集群quota使用率不高于`扩容阈值`,否则停止回收。
l
2. 将选出的节点标记为 status=unnormal,并对该节点上的在线Pod进行优雅驱
逐,对于Deployment中的采用先增加再删除策略。
l
3. 完成后标记为mix节点,此时开始调度离线训练作业到该节点上。
37. 基于Pod隔离的驱逐
保证副本数少的任务稳定,先创建,再驱逐
38. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
39. offline2online
l
l
在线节点回收触发如下
l 当在线资源组CPU/GPU quota使用率超过 扩容阈值。
l 在线Pod自动扩容时出现Pending,根据所缺少的资源类型进行扩容。
节点快速归还过程如下:
l 超过扩容阈值时,首先将混部资源池节点按训练作业数量升序排序。
l 依次选择要归还的节点,并计算将该节点归还是否低于期望阈值,以些批量选择节点。
l 将选出的节点标记 status=unnormal,并对该节点上所有任务进行驱逐并重新调度。
l 待所有驱逐完成后标记为onlinel,此时开始调度在线推理任务到该节点上。
40. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
41. 离线调度
42. 离线训练作业区分
短时任务 长时任务
运行时间短、可以重
跑或重跑成本低 运行时间长、任务重
跑成本高或不能重跑
离线重调度
亲和性调度
混部资源池
亲和性调度
离线资源池
短时离线训练作业设置亲和性,优先调度混部资源池,其次离线资源
池。
43. 离线重调度
l 驱逐时优先选取混部中离线作业最少的节点
l 离线训练作业已经驱逐的直接调度到离线集群
44. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
45. 混部效果监控
46. 线上效果
在线P40节点数
在线P40 quota使用率
25%左右离线任务可以混部, 夜间可回收50%左右在线服务器
47. 目录
l 背景介绍
l 混部前提:自动弹性伸缩
l 离在线混部架构设计
l
l 混部设计思路
l 监控数据接入
l Flink实时数据处理
l 资源组动态调整设计
l OnlineToOffline
l OfflineToOnline
l 离线训练作业调度
l 混部效果监控
总结及展望
48. 总结及展望
l 继续扩大混部资源池
l 细化调度策略
l
l 离线作业重调度后优先级调整
l 对离线作业精确画像,区分长短时任务
其他离线资源互通
l
l
将其他平台离线作业调度到混部资源池
离线任务容器热迁移
49. 欢迎关注58AI Lab
58同城AI Lab隶属TEG技术工程平台群,成立于2018年5月,旨在推动AI技术在
58同城的落地,打造AI中台能力,以提高前台业务人效、收入和用户体验。
开项项目:
Ø 《开源 | qa_match:一款基于深度学习
的问答匹配工具》
https://github.com/wuba/qa_match
Ø 《开源 | dl_inference:通用深度学习推
理服务》
https://github.com/wuba/dl_inference
招聘后端、算法工程师,欢迎投递
chenxingzhen@58.com
或加小秘书微信号咨询:WubaAILab
50. 欢迎关注58技术
后端、前端、客户端、大数据、
运维、测试、AI 等各方向文章
AI相关:
搜索、推荐、广告、
NLP、图像、语音、风控 等
58技术公众号
51.