Skip to content

ning1875/mlp-platform

Repository files navigation

运维如何用go+vue3+volcano开发机器学习平台纳管多个GPU-k8s集群实现多机训练功能

写在最前:

  • 小乙老师简介:AI-GPU-k8s运维开发专家
  • 目前看机会,有机器学习平台岗位或者需求联系我 mxy1875
  • 以下的内容都只是 <小乙老师机器学习平台运维开发课程的一小部分> : 课程在抖音账号<小乙运维杂货铺>中,购买后赠送前后端代码 i

头脑风暴:什么是机器学习平台

  • 问下deepseek什么是机器学习平台img.png

OK我们来解读一下上面提到的5个步骤

  • 01: 数据准备与管理可以理解为:为模型训练准备数据,比如自动驾驶中依赖的数据采集标注等等,其中最主要的是触发工作流cpu/gpu数据处理任务
  • 02: 模型开发: 其实就是适配主流的训练框架,提供开发机环境
  • 03: 训练与优化: 这点最核心,是通过平台创建训练任务,到一个具体的k8s集群上运行pod,在gpu节点上进行AI训练
  • 04: 模型部署: 其实就是交付,可以理解为模型二进制如何一键部署到在线集群跑推理任务
  • 05: 持续学习: 就是一些版本管理等后续流程

所以分析下来最重要的是 1-3

  • 总的来说需要一个平台:
  • 底层管理多个云,多个线下IDC的算力资源(注意算力不单指GPU还有CPU异构BPU等)
  • 上层给让用户可以申请开发机、提交数据处理、提交多机训练的任务

头脑风暴:机器学习平台有哪些核心对象

01 k8s算力集群

img.png

  • 多集群,多云,多IDC
  • 集群页面需要展示 node/cpu/mem/gpu等资源分配情况
  • 通过prometheus-record需要提供多集群的持久监控如资源分配率、使用率等 img.png

02 多个任务队列

  • 多队列列表展示 机器学习平台有哪些核心对象-多队列列表展示.png
  • 所谓队列核心就是资源的分割、节点池定向调度、人员和群组权限 机器学习平台有哪些核心对象-队列资源.png
  • 队列的核心代码怎么写又是个问题,要思考的地方很多,不会写来找我啊 img.png

多队列聚合监控

  • 机器学习平台有哪些核心对象-多队列聚合监控.png

03 任务状态

  • 这点开发起来大同小异:无非就是场景的几种加上内部特定逻辑:比如gpu资源闲置被kill
- Queuing 队列资源排队
- Pending 过了队列排队到所有podready前的状态(这里仍然可能是没资源,没有经过gang调度)
- Succeeded 任务正常结束
- Failed 任务异常退出
- Terminated 任务异常退出
- Completed 任务结束可能是正常或者异常
- Running 正常运行
- killed  被kill组件
- killed-by-user 被用户主动kill
- zero-gpu-kill 因为gpu零利用率被kill
  • 机器学习平台有哪些核心对象任务状态展示 img.png

04 如何实时更新任务状态?

  • 机器学习平台有哪些核心对象-其实必须要依赖k8s的informer,展示下部分代码
  • img.png

05 任务提交就很简单了:判断队列权限+生成对应的k8s-vj对象 这样要兼顾cfs/pfs和alluxio等文件和缓存系统

  • 机器学习平台有哪些核心对象-任务提交就很简单了.png
  • 开发机器学习平台需要你对volcano底层代码有较深的理解img.png

06 任务详情展示pod列表

  • 任务-pod的关联关系如何设计,特别是对于20机160卡这种上量的pytorch多机训练任务
  • 机器学习平台有哪些核心对象-任务详情展示pod列表.png

07 任务监控

  • 机器学习平台有哪些核心对象-任务监控.png

08 任务云平台日志

img.png

09 开发机gpu虚拟化 实现1张卡虚出n卡 当然需要开发很多组件 年轻人把持不住

  • 这玩意的应用场景主要有两块 gpu开发机和在线推理任务
  • 这些场景的特点就是长期占用1张卡浪费资源
  • 如果1虚4,那么相当于多买了3倍的gpu节点
  • 机器学习平台有哪些核心对象-开发机gpu虚拟化.png
  • 提交开发机机器学习平台有哪些核心对象-提交开发机.png

10 开发机顾名思义得提供vscode-ssh连接

机器学习平台有哪些核心对象-开发机顾名思义得提供vscode.png

11 开发机你不得提供一个自助save镜像的吗 不然装了那么多包整没了咋办

  • 机器学习平台有哪些核心对象-开发机你不得提供一个自助save镜像的吗.png

12 资源画像自动推荐资源防止用户瞎JB填

解决思路:
- 开发一个纠正组件,在用户提交任务的时候根据历史真实使用值进行调整
什么是历史真实使用值
- 这里有个假定:用户周期性提交的任务资源利用率是相似的
- 我们可以计算作业的真实使用值,并且抽取信息持久化保存下来
cpu和内存资源如何计算:使用 agg_over_time横向聚合
- cpu计算逻辑,85-95 10个分位值的平均值
- 内存计算逻辑, max值 +上浮10% 避免oom
当前提交作业如何跟历史作业关联起来
- 可以根据多种方式
  - 提交人
  - 任务标签
  - 任务名称
- 目前采用任务名称计算: 前缀匹配,找到最相近的那个job
  • 机器学习平台有哪些核心对象-资源画像自动推荐资源防止用户瞎JB填.png

13 队列资源利用率横向agg一周报表

机器学习平台有哪些核心对象-队列资源利用率横向agg一周报表.png

14 任务状态飞书通知

机器学习平台有哪些核心对象-任务状态飞书通知.png

15 任务优先级 代码就不展示了 注意胖瘦任务即可

需求
1. 一个队列中区分高低优先级任务
2. 不能影响到队列外部
  1. 当队列中没有资源:已经有queuing任务时,默认按照入队时间调度
  2. 高优任务会优先调度
3. 当高优胖任务和低优瘦任务同时存在,且队列资源满足瘦任务:低优瘦任务被调度

优先级不能被滥用!!!
1. 滥用后果,没加优先级任务长期处于饥饿状态

总结小乙老师从0到1设计并开发完整的机器学习平台

  • 上述功能只是一小部分
  • 最近看机会 AI-GPU-K8s-机器学习,联系我
  • 有需要完整机器学习平台go+volcano+vue运维开发代码和课程的也可以联系我

About

机器学习平台,有搭建训练环境的联系ning1875

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published