于翔 微博深度学习平台基于K8S的解决方案

1. 微博深度学习平台基于K8S的解决方案 于翔 新浪微博机器学习研发架构师 声明:本文档部分图片来源于网络
3. 0 目录 1.微博深度学习平台 2.离线训练篇 3.在线预测篇 4.K8S应用总结
4. 1 深度学习平台 深度学习平台 • 微博业务场景 • 微博深度学习工作流 • 微博深度学习平台架构
5. 微博业务场景-多媒体内容理解 图片:物体识别、OCR、人脸、明星、颜值、智能裁剪 视频:版权检测、logo识别、直播盗链检测 音频:标签、语音、语音转文本 算法:VGG/resNet/Yolo/SSD/FAST++ 智能裁剪 视频盗链检测 图片OCR 明星识别 音频分类 视频Logo
6. 微博业务场景-CTR任务 复杂特征简单模型: 特征工程+传统模型(LR/FM) 简单特征复杂模型: Wide&Deep、DeepFM、DeepCross … 关注排序 热门推荐 相关推荐
7. 微博深度学习工作流 K8S应用环节 原始数据 特征处理 数据传输 样本生成 特征处理 模型预测 模型部署 模型训练 业务评估 模型 预测 模型评估 模型 训练
8. 微博深度学习平台 • 一站式服务平台,加快业务开发速度,缩减业务迭代周期 • 业务无须关注底层工程细节和资源分配,专注于算法和效果调优 业务应用 关注流 推荐流 分类/检测 图像/视频分类 内容生产 … ... 算法 深度学习 存储 平台 计算 调度 资源 算法训练 weilearn 模型训练 模型评估 样本库 工作流weiflow 推荐服务 算法服务 weiserving 模型服务 模型库 特征服务 端上引擎 weiMobile 特征库 spark/hadoop tensorflow/caffe weips mesos yarn Kubernetes 云弹性计算集群 云高性能GPU集群 高性能在线集群
9. 2 训练篇 weilearn-微博深度学习训练框架 • 背景 • 深度学习训练框架 基于arena的分布式解决方案 • tensorflow 分布式训练 • arena 阿里云深度学习工具 业务实践效果 • 图片训练业务实践
10. 背景-业务接入门槛高 • 业务模式多:CTR/多媒体内容理解/多媒体内容生成 • 训练框架多:tensorflow、caffe、mxnet、kaldi • 迁移成本高:不同框架的设计与编程模式不同 • 分布式训练:分布式实施复杂,学习成本高
11. 背景-保证平台稳定性 任务管理 资源管理 集群管理 • 任务需要隔离 • 任务管理难度大 • 分布式任务日志查看困难 • 计算资源异构(CPU/GPU) • 资源需求多样(单机单卡/单机多卡/多机多卡) • 训练框架类型多,集群部署复杂 • 框架迭代速度快,集群部署成本高
12. weilearn-深度学习训练框架 • 任务配置化,降低业务接入成本 • 统一资源调度,提高任务效率与稳定性 样本库 CTR样本 自然语言样本 视频与图像样本 训练框架 配置 超参数 资源 算法 样本处理 Spark NLP LSTM GRU CTR业务 Wide&Deep DeepFM Deep Cross Network 图片视频 inception VGG resnet Yolo 调度计算 Arena/K8S YARN 模型库 DNN RNN CNN CTR NLP 图像业务 视频业务 语音业务
13. tensorflow-分布式训练 Ø 集群拓扑模式 u ParamaterServer 模式 ParamaterServer clusterSpec TF_CONFIG u Allreduce模式 ringAllreduce Horovod u 分布式策略模式 PS&Allreduce DistributionStrategy 单机多卡 allreduce & in-graph => MirroredStrategy 多机多卡 all reduce & between-graph=> CollectiveAllReduceStrategy
14. tensorflow-分布式训练 Ø 遇到的问题 u 集群拓扑:静态集群拓扑组织复杂 u 端口管理:需要额外的机制保证端口不冲突 u 任务稳定性:节点故障处理机制缺失 u 状态跟踪:分布式日志与状态查看困难 u 资源隔离:原生tensorflow的资源抢占
15. Arena-基于K8S的分布式解决方案 Ø Arena u 阿里云开源 • https://github.com/kubeflow/arena • 基于Docker容器和Kubernetes • 一个工具屏蔽所有底层资源管理、任务调度和GPU 分配的复杂性 • 提供数据科学家最熟悉的使用体验 u 轻量级、弹性、高效 • 轻量级,最小3个节点 • 可弹性支持大规模CPU,GPU集群(>200节点) • 一分钟内启动深度学习任务;15分钟内创建异构计 算集群 Ø kubeflow opreator for tensorflow u 集群任务:tf-opreator机制,自定义tensorflow集群任务管理 u 节点拓扑:基于headless service,对pod具体地址透明 u 网络通信:跳过service路由转发,提高性能 u 网络通信:pod 使用host 网络,保证集群通信性能 tensorflow/caffe/horvod/pytorch arena cli KubeFlow / tfjobs/mpijobs Kubernetes / NVidia Docker Runtime CPU GPU HDFS
16. Arena-基于K8S的分布式解决方案 Ø 支持多种集群拓扑 • 支持MPI模式 • 支持PS模式 • 支持单机任务提交 Ø 简化任务管理与保障 • 多种代码同步机制(rsync/git) • 端口分配管理对外透明 • 自定义任务保障与处理策略 • 支持GPU调度 Ø 统一状态监控与日志收集 • 日志状态-日志展示视图TFJob dashboard • 任务状态-支持tensorboard可视化模式 • 资源状态-任务运行资源情况监控
17. 实践效果-分布式图片训练 76h 接入平台前 • 10W sample • incpetionV3 • 64 batchsize • 30 epoch • standalone 4h 接入平台后 • standalone => distribute(4 woker 2 ps) • raw pic => tfrecord • keras => weilearn/weislim
18. 3 预测篇 基于K8S的分布式预测框架 • weiServing-分布式推理框架 多任务多模型 • 混合部署/混合调度 高可用高性能 • 负载均衡/服务保障/性能优化 持续训练持续部署 • olsubmit-模型服务部署
19. weiServing-基于K8S的分布式预测框架 业务应用 排序模型服务 多媒体分析服务 自然语言分析服务 算法模型层 模型服务 框架 核心架构层 集群调度层 DNN/DeepFM/W&D LR/GBDT CNN Embedding 特征映射 数据处理 统一版本管理/动态加载/批量化机制/多模型计算引擎 RPC服务框架 kubernetes/ol-submit 异构CPU集群 异构GPU集群
20. weiServing-基于K8S的分布式推理框架 多任务多模型 MT/MM 高可用高性能 HA/HP 持续训练持续部署 CT/CD
21. MT/MM 多任务多模型 Ø 背景 多任务: • 支撑排序与推荐、自然语言分析、 多媒体分析服务场景 • 不同场景对资源的需求各有差异 多模型: • 同一在线样本需要选择多个算法模 型进行处理 多媒体分析 自然语言分析 排序模型服务 向量索引 多媒体理解 下载与解码 语义分析 文本分类 文本分词 CTR 图片指纹 视频指纹 … 图片分类 人脸识别 … 视频分类 音频分类 … 视频下载 视频抽帧 … 主题模型 关键词模型 … 情感检测 色情检测 … CRF分词/JIEBA分词 … 关注流排序 热门流推荐 …
22. MT/MM 多任务多模型 Ø 混合部署方案 • k8S+docker 进行资源隔离 • label机制进行任务组的区分 • ResourceQuota进行业务组资源限制 u 提高资源利用率 多任务 p 常见任务类型 • CPU密集型任务 • GPU密集型任务 • IO密集型任务 多模型 p 常见CTR模型类型 • LR模型 • FM模型 • DNN模型 Download CNN 相似索引 CPU密集型 LR/FM 相似索引 … GPU密集型 人脸识别 图片分类 … IO密集型 视频下载 图片下载 …
23. MT/MM 多任务多模型 Ø 实践效果 100+ 在线服务数 30+ 模型类型数
24. HA/HP 高可用高性能 Ø 背景 • 单次请求量:100KB+(100+个特征,N+条物料) • 可用性要求高 • 响应时间敏感 • 服务端入流量大 推荐排序 服务 召回 过滤 X 1000+ WeiServing 粗排 模型预测平台 X 300+ 精排 分发控制
25. HA/HP 高可用高性能 Ø 客户端负载均衡 u 缩短调用链路,保证服务性能 u 保证大流量下服务高可用 图中 尖峰为某业务扩量到30%时,proxy网卡将近被打满的情况 u K8S 负载均衡机制 • 四层链路service 基于IPtable与IPVS • 七层链路ingress u 服务端的负载均衡 • 优:服务故障对客户端透明/松耦合/… • 缺:增长网络链路,转发引起性能损耗,proxy可能成为瓶颈
26. HA/HP 高可用高性能 Ø 客户端负载均衡 u 基于zookeeper的服务发现与机制 u server动态权重调整,保证异构集群性能稳定 u client 加权轮询模式的负载均衡 Client 服务缓存 服务调用 服务发现 Zookeeper Server Server Server 服务注册
27. HA/HP 高可用高性能 Ø 服务保障 u LivenessProbe 健康检查 • ExecAction 执行健康检查命令 • 检查失败时重启Pod u initContainer 解决任务依赖 • 加载业务方自定义健康检查程序 • 模型初始化
28. HA/HP 高可用高性能 Ø 深度学习预测优化 u 计算优化 • 减少计算量 • 加快计算速度 u 通讯优化 • 减少通信量 • 加快通讯速度 u batching • 将线上请求批量聚合后,传递到GPU计算运行 u 重写算子 • 调整Eigen实现,重写one hot算子
29. HA/HP 高可用高性能 Ø 实践效果 u batch:15+/per request 50W+ 峰值QPS 100亿+ <10ms 日调用量 平均响应时间
30. CT/CD 持续训练持续部署 Ø 背景 u 推荐排序场景 • 如果更新周期长,样本分布离线与在线有差异 • 及时捕获用户短期行为兴趣,快速反馈分发当前 用户兴趣内容 • 模型持续训练持续部署,提升推荐精准度,保持 线上推荐效果 关注流 正文页推荐 …… 热门流 拓展阅读
31. CT/CD 持续训练持续部署 Ø 方案 模型训练 离线训练 实时训练 模型库 u k8s cronjob 周期执行 u k8s olsubmit 一键模型部署 模型验证 离线验证 AUC/准确率/ 召回率/… 在线验证 在线一致性/ 模型稳定性/… 模型部署 在线发布 一键打包 端口探测 蓝绿部署/灰度发布 版本更新 流量切换 全量发布 … kubenetes/olsubmit 在线服务 verson1 verson2 …
32. CT/CD 持续训练持续部署 Ø olsubmit 实践 u k8s deployment u 自动配置管理 u 触发式自定义灰度发布 u 服务部署分钟级 u 提高模型迭代效率 服务封装 模型库 模型文件 特征处理配置 配置中心 算法库 模型版本配置 服务发现配置 OLSubmit 服务库 kubectl 热升级 模型部署 cluster deployment/pod Sourcer container Model Serving container Logger container
33. 4 总结 K8S在微博深度学习平台的应用 • 分布式深度学习训练,一键集群任务创建,提高训练与调度效率 • 在线预测服务异构混合调度,提高资源利用率 • 在线预测服务保障,保证服务高可用 • 持续训练持续部署,保障线上模型效果 K8S后续计划 • 离线训练 数据本地化,支持更多的框架类型 • 打通离线在线集群,基于自定义指标,在线服务动态扩缩容,应对热点流量
36. 以微博之力,让世界更美 [email protected] 声明:本文档部分图片来源于网络