深度学习平台离线训练作业资源调度优化

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 深度学习离线训练任务资源调度优化 陈泽龙 58同城-TEG-AI Lab-AI平台部 2021.11.3
2. 个人简介 l l 工作经历 l 2019年7月~至今 58同城 AI平台部 l 2016年7月~2019年7月 中科院信工所 后端 教育背景 l 2013年9月~2016年7月 硕士 中国科学院大学 联系方式:chenzelong@58.com
3. 目录 l 背景介绍 l 业界技术方案调研 l 离线调度优化实现 l 总结
4. 58人工智能平台
5. 深度学习平台总体架构 模型训练 开发实验 推理服务 代码在线调试 单机单卡训练 资源复用 参数服务器(多机多卡训练) 推理加速(TensorRT、MKL、OpenVINO) 负载均衡 弹性扩容 ABTest 深度学习框架 日 志 中 心 Docker、Nvidia-Docker2 Kubernetes Prometheus DNS Calico ETCD 资源管理 K40 rsyslog Grafana P40 … 服务发现 任务调度 存储 算力 CPU T4 2080ti … RAID 监 控 中 心 HDFS 对象存储 (WOS) 高性能网络文件系 统(WFS) 镜 像 中 心
6. 离线任务运行 WEB系统 配置 Kubernetes DNS KubeDNS Rank1 模型训练 模型训练 模型收集 模型收集 日志收集 日志收集 训练镜像 ring-allreduce KubeDNS HDFS/WFS Rank0 训练文件 训练数据 Rank3 Rank2 模型训练 模型训练 模型收集 模型收集 日志收集 日志收集 WOS 用户模型 训练日志 镜 像 中 心
7. 离线资源管理 部门资源统一采购 季度采购 namespace:部门A namespace:部门X private-resource private-resource private-resource-k40 private-resource-k40 private-resource-p40 紧急采购 … private-resource-p40 private-resource-rtx3090 private-resource-rtx3090 …… …… namespace:部门A namespace:部门X public-resource public-resource public-resource-k40 public-resource-k40 部门资源 ResourceQuota 资源录入 借用资源上限申请 public-resource-p40 … public-resource-p40 public-resource-rtx3090 public-resource-rtx3090 …… …… 借用资源 ResourceQuota
8. 离线资源调度 部门资源 P40 借用资源 K40 RTX3090 P40 内存 CPU K40 任务提交 内存 CPU 排队任务不超过限额 充足 检查部门 资源是否 充足 RTX3090 不充足 检查借用 资源是否 充足 不充足 禁止提交 充足 检查集群 资源池资源 排队任务超过限额 禁止提交
9. 存在的问题 • 训练任务资源配置不合理,资源浪费严重。 —— 解决方法:增加提示信息,引 导用户去修改任务的资源配置,并根据历史的使用情况,主动调整任务的资源配 置。 • 借用机制导致资源超售,出现任务排队情况。 ——解决方法:配置抢占策略, 部门资源任务可以抢占借用资源的资源,并提供优先级队列,算力使用较高的任 务应该排在前面 • GPU卡型号多(RTX3090/P40/K40/T4),指定GPU型号训练导致任务不能及时启动 GPU卡利用不充分。 ——解决方法: 实现基于异构GPU的调度策略
10. 目录 l 背景介绍 l 业界技术方案调研 l 离线调度优化实现 l 总结
11. Kube-scheduler Kube-scheduler 是Kubernetes集群默认的调度器,结合Node资源、负载情况、 数据位置等各种因素进行调度判断,负责将Pod调度到最优节点上。 Policy Informer Priorities Predicates Algorithm Extenders Plugins Queue PV PVC StorageClass CSINode RS Deployment Service RC Node PDB Scheduler Pipeline Scheduler thread Pod Wait thread Bind thread Schedule Cache Initial Assu med Adde d Delet ed
12. Kube-scheduler扩展 Scheduler Extender Mutiple schedulers ApiServer Request ApiServer Filter Kube-controller-manager Filter Response http/https Kube-scheduler Kube-controller-manager Extender Priority Bind Kubelet Kubelet Kubelet Kube-proxy Kube-proxy Kube-proxy Kube-scheduler Priority Bind http/https Kube-scheduler Custom-scheduler Kubelet Kubelet Kubelet Kube-proxy Kube-proxy Kube-proxy Scheduler-extender Scheduler Framework 绑定Pod至 Node 为Pod预定 Node节点 从调度队列 选择节点 Sort
13. Kube-batch Actions Session Plugins Allocate JobOrderFns queueOrderFns predicateFns …… drf Backfill Reclaim Preempt Allocate Pipiline Evict Jobs Nodes Queues Snapshot Cache Watch API Server Register gang predict priority nodeorder proportion
14. Volcano Volcano 是基于kube-batch开发并独立出的Kubernetes的容器批量计算平台,源自于华 为云开源。主要包Scheduler,Controller和Admission三大组件。 l Volcano-Scheduler通过一系列的action和plugin,为每一个Pod选取合适节点。 l Volcano-Controller则负责跟Scheduler配合,负责管理Job(Volcano CRD)对象的整个生 命周期。 l Volcano-Admission主要负责对CRD API资源进行合法性校验。
15. Volcano-Controller
16. Volcano-Scheduler
17. Coscheduling Plugin Coscheduling是阿里云实现的基于 Kubernetes Scheduling Framework的调 度插件,负责帮助 Kubernetes 原生调度器支持批作业调度。 Coscheduling通过label的形式定义PodGroup概念,将同一批作业打上相同 label。 通过以下阶段实现同一PodGroup的作业同时被调度: Ø 使用Framework 的 Permit 插件提供的延迟绑定功能实现所有Pod统一进行 资源绑定 Ø 使用QueueSort 插件,实现相同PodGroup的作业在等待队列中处于连续位 置
18. 方案对比 调度引擎 优点 缺点 Kube- scheduler 1、使用及版本更新更便捷 2、社区活跃 1、不能实现批调度 Kube-batch 1、可以实现批调度 2、可以默认调度器共存,多调度器共同进 行调度 1、使用多调度任务,会造成调度器冲突。 2、需要手动创建PodGroup 3、社区化产品,没有专门的维护团队,更新和 维护速度较慢,最后一次release是19年 Volcano 1、基于Kube-batch开发,可以实现批调 度 2、可以和默认调度器共存,多调度器共同 进行调度 3、支持多种类型的CRD 4、社区活跃 1、使用多调度任务,会造成调度器冲突。解决 方案之一为通过设置label,每个调度器管理自己 的label,但是会造成一定的资源浪费。 2、需要手动创建PodGroup 3、目前在github的Issues中未解决的bug较多 4、需要额外运行Volcano需要的组件,要注意组 件挂掉的风险 Coscheduling 1、可以实现批调度,且部署简单,直接修 改label即可创建PodGroup和启动数量 2、Kube-scheduler小组sig-scheduler的 官方插件 3、由阿里云团队开发,在github上咨询的 回复速度较快 1、资源不足时所有节点会一直处于Pending状 态,可能会被小任务抢占,通过设置任务队列, 进行资源进一步优化。
19. 目录 l 背景介绍 l 业界技术方案调研 l 离线调度优化实现 l 总结
20. 离线训练资源调度系统 接入层 任务运行 权限校验 资源检验 资源提示 任务调度器 部门资源任务队列 任务画像 逻辑层 资源计算调整 借用资源任务队列 任务调度 调度策略 Kubernetes 集群 存储层 Kubernetes 资源管理 HDFS/WFS 训练文件 节点调度 训练数据 服务发现 WOS 用户模型 训练日志
21. 离线任务调度流程 实时资源采集 任务历史画像 资源 数据 资源使用记录 任务实时画像 资源数据校正 资源建议值 确定优先级 状态监控 任务运行 调度管理 任务状态变更 部署管理 节点部署 Kubernetes
22. 任务画像 任务ID:xxx CPU最大/平均使用率 任务所属部门:xxx GPU最大/平均使用率 任务类型:TF/PyTorch 资源使用数据 基本信息 …… 显存最大/平均使用率 …… CPU GPU 内存 资源配置 离线训 练任务 等待时长 任务调度情况 训练时长 …… …… 训练运行中 训练环境 等待调度 训练方式 训练参数 …… 训练配置 任务训练状态 训练完成 ……
23. 任务画像-数据采集 Ø 资源数据采集 自动推送 定时分析 副本存储 HDFS 数据校正 流式分析 实时入库 MySQL Ø 任务调度情况采集 定时更新 任务运行状态上报 POD 节点状态监控 Kubernetes Watcher 调度 器 MySQL
24. 任务画像-画像构建 画像构建 前一天GPU使用 历史画像 前一天显存使 用 每天定时执行 历史画像计算 任务历史 画像打分 前一天CPU使用 任务实时资源 使用 实时画像 周期性计算 实时画像计算 任务等待调度 时长 任务实时 画像打分
25. 任务运行 资源验证 任务资源验证 任务 提交 配置验证 用户权限验证 参数配置验证 部门资源验证 集群资源验证 任务状态验证 多策略调度 优先级策略 抢占策略 异构GPU策略 资源自动调整 …… …… • 历史资源使用率较低,建议… • 任务将使用借用资源,… • …… • 当前用户没有权限,无法运行 • 任务正在运行,… • ……
26. 调度策略-资源自动调整 l 目的:解决任务资源配置不合理导致资源浪费问题 l 策略:根据历史资源使用情况及任务资源配置,调整任务运行资源配额 l GPU建议值 = MAX (最近3次运行GPU使用率均值,显存使用率的最大值) / 90% l CPU limit = 最近3次的CPU最大使用值 / 50% l CPU request = 最近3次的CPU平均使用值 / 50% l 只选取运行时长超过30分钟,且和本次运行资源类型相同的记录 历史GPU 使用 建议配置 任务配置 训练节点配置 历史显存 使用 GPU建议值 GPU配置 GPU实际配置 历史CPU 使用 CPU建议值 + CPU配置 = CPU实际配置
27. 调度策略-优先级策略 l 目的:优先调度部门任务及高资源使用率任务 l 策略:不同资源使用情况的任务,配置不同的优先级 l 使用借用资源优先级低于使用部门资源 l 资源使用率高的任务优先级高于资源使用率低的任务 l 资源使用率较高的任务将优先运行 Priority private-10 映射 任务优先级 高 , …… Priority private-2 Priority private-1 资源类型 部门资源情况 任务资源配置 任务画像 Priority public-10 …… Priority public-2 Priority public-1 低
28. 调度策略-抢占策略 l 目的:解决因超售导致的部门任务排队问题 l 策略:当整体资源不足时,高优先级任务可以抢占低优先级任务资源运行
29. 调度策略-被抢占任务重调度 l 如何发现任务被抢占并快速重新调度,保证低优先级任务不会被饿死 任务调度器 任 务 队 列 任务画像 5-构建任务画像,提高优先级 6-入队 任务调度 4-任务被抢占,重新调度 3-读取任务 运行状态 Kubernetes Watcher 2-读取 7-重新调度 0-注册监控 节点状态 Kubernetes 1-节点变化Action 任务A POD 任务B POD MySQL
30. 调度策略-异构GPU调度 l 目的:解决GPU资源使用不均衡问题 l 策略:基于资源优先级配置,可以将任务调度到不同类型的GPU上 任务调度器 任务队列 Task 1 Task 1 参数配置 逻辑层 资源配置 Task 2 资源队列 Task 2 Kubernetes 集群 物理层 默认资源优 先级队列 用户资源优 先级队列 Kubernetes K40 P40 RTX3090 … GPUn 资源优先 级队列 RTX3090 P40 K40
31. 目录 l 背景介绍 l 业界技术方案调研 l 离线调度优化实现 l 总结
32. 总结 l 结合配置引导和自动调整,推动了任务资源合理配置,减少任务资源 浪费 l 基于任务画像的优先级和抢占调度,使用部门资源及资源利用率较高 的任务优先获得训练资源,得到及时调度 l 异构GPU调度,有助于充分利用不同类型的GPU卡 l 平台离线训练GPU使用率相对提升50.5%(48.24%->72.61%), CPU使用率相对提升37.9%(32.99%->45.48%)
33. 未来规划 l 训练任务中断后,重新训练时,能做到继续原有模型训练,减少 训练时间 l 首次运行的任务能自动分配合理资源 l 训练任务灵活使用混部资源池
34. 欢迎关注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
35. 欢迎关注58技术 后端、前端、客户端、大数据、 运维、测试、AI 等各方向文章 AI相关: 搜索、推荐、广告、 NLP、图像、语音、风控 等 58技术公众号
36.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 22:21
浙ICP备14020137号-1 $Map of visitor$