Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

ning1875/mlp-platform

Open more actions menu

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

Packages

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.