首页 > 其他分享 >Volcano社区新版本发布!7大功能全面增强队列能力与调度稳定性

Volcano社区新版本发布!7大功能全面增强队列能力与调度稳定性

时间:2024-05-24 09:29:57浏览次数:23  
标签:github 队列 调度 sh volcano Volcano com

本文分享自华为云社区《Volcano 社区 v1.9.0 版本正式发布!全面增强队列能力与调度稳定性》,作者:云容器大未来。

北京时间2024年5月21日,Volcano社区v1.9.0版本正式发布,此次版本增加了以下新特性:

  • 支持弹性队列容量capacity调度
  • 支持队列与节点间的亲和调度
  • Volcano支持Kubernetes v1.29
  • GPU共享支持节点打分调度
  • 增强scheduler metrics指标
  • 新增License合规性检查
  • 提升调度稳定性

Volcano是业界首个云原生批量计算项目,于2019年6月在上海 KubeCon 正式开源,并在2020年4月成为 CNCF 官方项目。2022年4月,Volcano 正式晋级为CNCF 孵化项目。Volcano 社区开源以来,受到众多开发者、合作伙伴和用户的认可和支持。截至目前,累计有600+全球开发者参与社区贡献。

volcano.png

支持弹性队列容量capacity调度

Volcano现在使用proportion插件来进行队列管理,用户可以设置队列的guarantee、capability等字段来设置队列的预留资源和容量上限。并通过设置队列的weight值来实现集群内的资源共享,队列按照weight值按比例划分集群资源,但这种队列管理方式存在以下问题:

  • 队列划分的资源容量通过权重体现,不够直观。
  • 队列内的所有资源使用相同的比例进行划分,不能为队列的每一维资源单独设置容量。

基于以上考虑,Volcano实现了新的队列弹性容量管理能力,它支持:

  • 用户可以直接为队列设置每一维度资源的容量,而不是设置weigh值来实现。
  • 基于deserved的队列弹性容量调度,支持队列的资源共享和回收。

比如在AI大模型训练中分别为队列中不同的GPU型号如A100和V100,设置不同的资源容量。同时在集群资源空闲时,队列可以复用其他空闲队列的资源,并在需要时进行资源回收,直到回收到用户为队列设置的资源容量为止,即应得资源量deserved,从而实现弹性容量能力。

使用改功能时需要设置队列的deserved字段,为每一维资源设置应得资源量。同时需要在调度配置中打开capacity插件,并关闭proportion插件。

apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: demo-queue
spec:
  reclaimable: true
  deserved: # set the deserved field.
    cpu: 64
    memeory: 128Gi
    nvidia.com/a100: 40
    nvidia.com/v100: 80

队列弹性容量调度的完整使用例子,请参考:How to use capacity plugin[1]

关于弹性队列容量设计文档,请参考Capacity scheduling Design[2]

支持队列与节点间的亲和调度

队列通常关联着公司内的部门,而不同部门通常需要使用不同的异构资源类型,比如大模型训练团队需要使用NIVDIA的Tesla GPU,而推荐团队需要使用AMD的GPU,当用户提交作业到队列时,需要根据队列的属性将作业自动调度到对应资源类型的节点上。

为此Volcano实现了队列和节点的亲和调度能力,用户只需在队列的affinity字段设置需要亲和的节点标签,Volcano会自动将提交到当前队列的作业调度到队列关联的节点上,用户无需单独设置作业的亲和性,而只需统一设置队列的亲和性,提交到队列的作业都会根据队列与节点的亲和性将作业调度到对应的节点。

该特性同时支持硬亲和、软亲和、反亲和调度,使用时需要为节点设置key为volcano.sh/nodegroup-name的标签,然后设置队列的affinity字段,指定硬亲和、软亲和和反亲和的标签值。例如如下的队列设置,表示提交到该队列的作业需要调度到标签值为groupname1和groupname2的节点,并优先调度到标签值为groupname2的节点,同时,作业不能调到到标签值为groupname3和groupname4的节点,当资源不足时则也可以调度到标签值为groupname3的节点上。

apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: default
  spec:
    reclaimable: true
    weight: 1
    affinity:            # added field
      nodeGroupAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - <groupname1>
        - <groupname2>    
        preferredDuringSchedulingIgnoredDuringExecution:
        - <groupname1>
      nodeGroupAntiAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
        - <groupname3>
        - <gropuname4>
        preferredDuringSchedulingIgnoredDuringExecution:
        - <groupname3>

该功能对应的调度插件名为nodegroup,完整使用例子请参考:How to use nodegroup plugin[3]

详细设计文档请参考:The nodegroup design[4]

GPU共享功能支持节点打分调度

GPU共享是Volcano v1.8版本推出的GPU共享与隔离方案,提供GPU共享、设备显存控制能力,以提升AI训练推理场景下GPU资源利用率低的问题。v1.9在该功能基础上新增了对GPU节点打分的策略,从而可以在作业分配时选择最优的节点,进一步提升资源利用率,用户可以设置不同的打分策略。目前支持以下两种策略:

  • Binpack:提供GPU卡粒度的binpack算法,优先把一个节点上的已经分配了资源的GPU卡占满,避免资源碎片和浪费。

  • Spread:优先使用空闲的GPU卡而不是已经分配了资源的共享卡。

详细使用文档请参考:How to use gpu sharing[5]

Volcano支持Kubernetes v1.29

Volcano版本紧跟Kubernetes社区版本节奏,对Kubernetes的每个大的基数版本都进行支持,目前最新支持的版本为v1.29,并运行了完整的UT、E2E用例,保证功能和可靠性。如果您想参与Volcano适配Kubernetes新版本的开发工作,请参考:https://github.com/volcano-sh/volcano/pull/3459 进行社区贡献。

增强scheduler metrics指标

Volcano使用了client-go客户端和Kubernetes交互,尽管客户端可以设置QPS来避免请求被限流,但是客户端实际使用的QPS到底达到了多少却很难观察到,为了实时观测到客户端请求的频率,Volcano新增了client-go客户端的metrics指标,用户可以通过访问metrics接口,查看GET、POST等请求在每秒钟的请求数量,从而确定每秒钟实际使用的QPS,以此决定是否需要调整客户端设置的QPS。同时client-go的相关指标还包括客户端证书轮转周期统计、每个请求的response size统计等。

用户可以使用curl http://$volcano_scheduler_pod_ip:8080/metrics 来获取volcano scheduler的所有详细指标。

详细PR见:[feat] Add rest client metrics by Monokaix · Pull Request #3274 · volcano-sh/volcano (github.com)[6]

新增License合规性检查

为了增强Volcano社区开源license合规治理规范,避免引入传染性开源协议,规避潜在风险,Volcano社区引入了开源license合规检查工具,所谓传染性协议指的是使用了该协议作为开源许可的软件在修改、使用、复制之后生成的衍生作品,也必须以该协议进行开源。开发者提交的PR会引入的三库如果包含了传染性开源协议比如GPL,LGPL等,CI门禁会进行拦截,开发者需要将三方库替换为松自由软件许可协议比如MIT、Apache 2.0,BSD等,以通过开源license合规检查。

提升调度稳定性

Volcano v1.9.0版本在抢占、调度失败重试、避免内存泄露、安全性增强等方面做了较多优化,具体内容包括:

致谢贡献者

Volcano 1.9.0 版本包含了来自多位社区贡献者的代码提交,在此对各位贡献者表示由衷的感谢:

贡献者GitHub ID

参考资料:

[1] How to use capacity plugin:

https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_capacity_plugin.md

[2] Capacity scheduling Design:

https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md

[3] How to use nodegroup plugin:

https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_nodegroup_plugin.md

[4] The nodegroup design:

https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md

[5] How to use gpu sharing:

https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_gpu_sharing.md

[6] [feat] Add rest client metrics by Monokaix · Pull Request #3274 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3274

[7] [cherry-pick for release-1.9]fix PodGroup being incorrectly deleted due to frequent creation and deletion of pods by guoqinwill · Pull Request #3376 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3376

[8] ignore PredicateFn err info for preempt & reclaim scheduler plugin by LivingCcj · Pull Request #3458 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3458

[9] fix errTask channel memory leak by bibibox · Pull Request #3435 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3435

[10] Fix queue metrics when there are no jobs in it by Monokaix · Pull Request #3463 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3463

[11] Remove list secret in controller ClusterRole by lekaf974 · Pull Request #3449 · volcano-sh/volcano (github.com):

https://github.com/volcano-sh/volcano/pull/3449

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:github,队列,调度,sh,volcano,Volcano,com
From: https://www.cnblogs.com/huaweiyun/p/18209968

相关文章

  • 多目标应用:基于NSGA2求解柔性作业车间调度问题(FJSP),MATLAB代码
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobSchedulingProblem,FJSP)的描述如下:n个工件{J,J......
  • 栈和队列1 顺序栈及基本操作实例(进制转换)
    #include<stdio.h>#include<stdlib.h>#defineINITSIZE100#defineINCREAMENT10 typedefstructSqStack{   int*data;   int*top;   intstacksize;}SqStack;voidInitStack(SqStack*L){   L->data=(int*)malloc(INITSIZE*siz......
  • 【Test 08】优先队列、滑动窗口、DFS
    文章目录1.单词搜索2.除2操作3.dd爱框框1.单词搜索题目链接解题思路:DFS(深度优先遍历),用一个pos记录要匹配单词word的位置,每次与pos进行匹配判断(这样做的好处是不用把答案存下来)注意细节❗:①没有用flag来记录的话,所有在DFS暴搜的时候需要......
  • 进程理论、进程与程序的区别、调度算法、进程的创建,状态,终止
    【一】进程理论【1】什么是进程(1)理论正在进行的一个过程或者说一个任务而负责执行任务则是cpu(2)单任务一个单独的任务单核+多道,实现多个进程的并发执行一段时间段只能做一件事:铺床、吹头发、睡觉(cpu同一时间只能干一个活)(3)多任务一段时间可以做很多件事铺......
  • 分布式任务调度内的 MySQL 分页查询优化 等值在前,排序在中间,范围在最后
    分布式任务调度内的MySQL分页查询优化https://mp.weixin.qq.com/s/VhSzxYIRv83T3D3JD4cORg三、优化方案 3.1优化方案确定 当前SQL执行计划以主键进行顺序遍历,是一个范围扫描,有点像在一片很大的居民区按照序号挨家挨户寻找一些特定的人一样,比较简单也比较低效。 既然......
  • hidet使用rule based调度
    定义computation整体流程类似于tvm的计算描述定义输入、输出tensor,指定名称、数据类型和shapea=tensor_input('a',dtype='float32',shape=[10])b=tensor_input('b',dtype='float32',shape=[])b=tensor_input('data',dtype='float16&......
  • 27.并发编制【四】互斥锁与队列
    【一】互斥锁(进程间同步)1)概念一种用于多线程编程中控制对方共享资源访问机制为当前进程或线程添加额外的限制,限制当前时间段只能由当前进程使用,当前进程使用完成后才能其他进程继续使用其可保证同一时间只有一个进程在执行关键代码段,从而保证了数据的安全性2)多个进程......
  • FSP流水车间调度问题
    FSP流水车间调度问题1.流水车间调度问题FlowShopFSP的基本特点:车间要进行多个批次(多个种类)产品的生产;这些批次(种类)的产品工艺路径相同,不同的是在每台机器上的加工时间。每种机器只有一台。特别:置换流水车间调度问题PFSP中,作业在每台设备上的加工顺序都相同。2.FSP典型问......
  • 互斥锁,IPC机制,队列,生产者消费者模型
    Ⅰ互斥锁【一】什么是互斥锁互斥锁其实就是一种锁。为当前进程或线程添加额外的限制限制当前时间段只能由当前进程使用,当前进程使用完成后才能其他进程继续使用其作用是保证在同一时刻只有一个线程在访问共享资源,从而避免多个线程同时读写数据造成的问题。互斥锁的基本原......
  • 风险控制1、如果你的项目发布后失败,主要的原因会是什么?2、每个团队列出自己项目中目前
    项目发布失败的主要原因项目发布后失败可能由多种原因导致,这里列出几个主要的:需求不符合市场实际:产品没有满足目标市场的真实需求或者未能准确捕捉到用户的痛点。用户体验不佳:产品界面复杂难用,用户操作困难,导致用户流失。技术问题:产品存在缺陷或技术故障,影响功能实现或性能稳......