Volcano社区v1.6.0版本发布:基于真实负载的动态调度

摘要:火山社区v1.6.0版本正式发布。该版本增加了弹性作业管理、基于真实负载的动态调度、基于真实负载的重调度、Volcano Job 插件-MPI等诸多新功能。

本文分享自华为云社区《火山社区v1.6.0版本正式发布》,作者:云容器未来。

近日,火山社区v1.6.0版本正式发布。该版本增加了弹性作业管理、基于真实负载的动态调度、基于真实负载的重调度、Volcano Job 插件-MPI等诸多新功能。

图片[1]-Volcano社区v1.6.0版本发布:基于真实负载的动态调度-唐朝资源网

Volcano 是业界第一个云原生批处理计算项目。 2019 年 6 月在上海 KubeCon 正式开源,2020 年 4 月成为 CNCF 官方项目。2022 年 4 月,Volcano 正式晋升为 CNCF 孵化项目。由于 Volcano 社区是开源的,因此得到了众多开发者、合作伙伴和用户的认可和支持。截至目前,全球共有 400+ 位开发者为该项目贡献了代码。

Volcano v1.6.0个关键特性介绍1.灵活的作业调度

v1.6.0版本增加了对调度弹性作业的支持,配合Volcano Job或Pytorch Job的弹性作业管理,加速AI训练任务和大数据分析。在服务器上 Spot 实例,以达到降低成本的目的。

弹性作业允许作业的份数在[min, max]的范围内弹性缩放,其中min是作业的minAvailable,max是作业的份数。弹性调度会优先分配资源给minAvailable Pod,保证每个应用的最小值。首先满足资源需求。如果有空闲资源,调度器会将资源分配给 Elastic Pod 以加快计算过程。当资源紧张时,调度程序首先抢占 Elastic Pod 以减少容量。同时,调度器也会平衡不同优先级的弹性作业之间的资源分配,比如让高优先级的作业抢占低优先级作业的弹性副本的资源。

设计文档:

问题:

2.基于真实负载的动态调度

目前基于分配率的调度模式在某些场景下可能会导致各节点资源利用率不均,如分配率高,部分节点利用率低。在 v1.6.0 版本中,Volcano 实现了与 Prometheus 的协同,利用 Prometheus 收集的集群节点负载数据进行调度决策,保证各节点利用率的最大平衡,同时允许用户配置节点cpu,内存上限,防止部分节点因部分节点使用过多而出现异常。

调度策略配置示例如下:

actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- name: conformance
- name: usage  # usage based scheduling plugin
arguments:
thresholds:
CPUUsageAvg.5m: 90 # The node whose average usage in 5 minute is higher than 90% will be filtered in predicating stage
MEMUsageAvg.5m: 80 # The node whose average usage in 5 minute is higher than 80% will be filtered in predicating stage
- plugins:
- name: overcommit
- name: drf
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack
metrics:                    # metrics server related configuration
address: http://192.168.0.10:9090 # mandatory, The Prometheus server address
interval: 30s                    # Optional, The scheduler pull metrics from Prometheus with this interval, 5s by default

设计文档:

问题:

3.根据实际负载重新调度

不合理的调度策略和作业生命周期的动态变化导致计算节点资源利用不均衡。 v1.6.0版本增加了基于真实负载和用户自定义的重调度策略,将部分高负载节点的负载驱逐到低负载节点,并定期检查所有节点的真实负载也就是说,根据实际资源利用率而非请求资源重新调度 pod,支持自定义配置的重新调度策略。

上述操作进一步平衡了各个节点的实际负载,提高了集群资源的利用率。

## Configuration Option actions: "enqueue, allocate, backfill, shuffle"  ## add 'shuffle' at the end of the actionstiers:
  - plugins:
      - name: priority
      - name: gang
      - name: conformance
      - name: rescheduling       ## rescheduling plugin
        arguments:
          interval: 5m           ## optional, the strategies will be called in this duration periodcally. 5 minuters by default.
          strategies:            ## required, strategies working in order
            - name: offlineOnly
            - name: lowPriorityFirst
            - name: lowNodeUtilization
              params:
                thresholds:
                  "cpu" : 20
                  "memory": 20
                  "pods": 20
                targetThresholds:
                  "cpu" : 50
                  "memory": 50
                  "pods": 50
          queueSelector:         ## optional, select workloads in specified queues as potential evictees. All queues by default.
            - default
            - test-queue
          labelSelector:         ## optional, select workloads with specified labels as potential evictees. All labels by default.
            business: offline
            team: test
  - plugins:
      - name: overcommit
      - name: drf
      - name: predicates
      - name: proportion
      - name: nodeorder
      - name: binpack

设计文档:

问题:

4.火山作业插件 – MPI

使用 Volcano Job 运行 MPI 任务,Volcano 任务插件(即 svc、env 和 ssh 任务插件)也会自动为 MPI 任务的 master 和 worker 配置免密通信、环境变量注入等任务。

新版本提供了一种运行 MPI 任务的新方式,进一步简化了用户的配置,优化了用户体验。用户不需要熟悉shell语法,不需要关心master和worker之间的通信,也不需要手动配置ssh认证。启动 MPI 任务非常简单优雅。

示例配置文件:

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
 name: lm-mpi-job
spec:
 minAvailable: 1
 schedulerName: volcano
 plugins:
   mpi: ["--master=mpimaster","--worker=mpiworker","--port=22"]  ## MPI plugin register
 tasks:
   - replicas: 1
     name: mpimaster
     policies:
       - event: TaskCompleted
         action: CompleteJob
     template:
       spec:
         containers:
           - command:
               - /bin/sh
               - -c
               - |
                 mkdir -p /var/run/sshd; /usr/sbin/sshd;
                 mpiexec --allow-run-as-root --host ${MPI_HOST} -np 2 mpi_hello_world;
             image: volcanosh/example-mpi:0.0.1
             name: mpimaster
             workingDir: /home
         restartPolicy: OnFailure
   - replicas: 2
     name: mpiworker
     template:
       spec:
         containers:
           - command:
               - /bin/sh
               - -c
               - |
                 mkdir -p /var/run/sshd; /usr/sbin/sshd -D;
             image: volcanosh/example-mpi:0.0.1
             name: mpiworker
             workingDir: /home
            
         restartPolicy: OnFailure

设计文档:

问题:

– 相关链接-

发行说明:

分支:

了解有关火山的更多信息

火山云原生批量计算项目主要应用于AI、大数据、基因、渲染等诸多高性能计算场景,对主流通用计算框架有很好的支持。社区已经吸引了 2.60,000 名全球开发者,并获得了 2.4k Stars 和 550+ Forks。参与和贡献的公司包括华为、AWS、百度、腾讯、京东、小红书等。目前,Volcano已快速应用于人工智能、大数据、基因测序等海量数据计算和分析场景。得到众多主流计算框架的支持,构建了完整的上下游生态。

火山官网:

Github:

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

© 版权声明
THE END
喜欢就支持一下吧
点赞77赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容