searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Volcano调度简述

2024-09-20 08:47:05
58
0

概念

操作对象(CR)

  • VolcanoJob

用户创建的一个训练任务,一个完整的训练任务可以包含若干子任务,它们由若干pod来执行。

区别于k8s的Job资源类型,VolcanoJob更适合机器学习等AI训练任务,更关注资源的声明和使用。

以下是来自volcano官网的一个VolcanoJob示例:

```yaml

apiVersion: batch.volcano.sh/v1alpha1
kind: Job  # 资源类型
metadata:
name: job-1
spec:
minAvailable: 1
schedulerName: volcano # 指明volcano调度器
queue: test # 指明运行训练任务的队列
policies:
   - event: PodEvicted
      action: RestartJob
tasks:
   - replicas: 1
      name: nginx
      policies:
      - event: TaskCompleted
      action: CompleteJob
      template:
      spec:
         containers:
            - command:
            - sleep
            - 10m
            image: nginx:latest
            name: nginx
            resources:
               requests:
                  cpu: 1
               limits:
                  cpu: 1
         restartPolicy: Never

```

  • PodGroup

    Volcano controller会监听VolcanoJob资源对象,之后创建一个对应的PodGroup后进入调度流程。

    PodGroup是实际volcano调度的对象。

Queue

Queue是容纳一组PodGroup的队列,也是该组PodGroup获取集群资源的划分依据。

```yaml

apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue # 资源类型
metadata:
name: test # 队列名称
spec:
weight: 1
reclaimable: false
capability: # 声明资源的可用量
   cpu: 2

```

Actions 调度阶段

Actions是调度的不同阶段。

  • Enqueue 入队

对session中的job进行入队(volcano调度用的优先队列),将入队的job设置为inqueue状态。

  • Allocate 分配

对应k8s调度的预选+优选过程。

  • (Reclaim) 资源回收

当存在pending task的Job时,Reclaim Action会计算集群节点中可回收的资源,将这部分任务驱逐、资源回收后,满足高优先级的Job。

实现抢占的几个条件:

  1. 队列条件: a. 可被抢占队列的 spec 设置 reclaimable = true b. (非必须)可被抢占队列的 allocated 全部资源大于 deserved(在proportion插件的ReclaimableFn函数中)

  2. 任务条件: a. 可被抢占的 pod 需要 running b. 可被抢占的 pod 的 reclaim annotation 不能为 false(默认是 true) c. (非必须)可被抢占的 pod 数量大于 MinAvailable(在gang插件的preemptableFn/ReclaimableFn函数中)

  • (Backfill)

处理待调度Pod列表中没有指明资源申请量的Pod调度。

插件Plugins/Tiers

volcano通过优先队列实现对不同资源(job、task)的调度排序,插件为优先队列提供“比较函数(lessFn/OrderFn)”,从而影响资源的调度顺序。

 

0条评论
作者已关闭评论
j****n
4文章数
0粉丝数
j****n
4 文章 | 0 粉丝
原创

Volcano调度简述

2024-09-20 08:47:05
58
0

概念

操作对象(CR)

  • VolcanoJob

用户创建的一个训练任务,一个完整的训练任务可以包含若干子任务,它们由若干pod来执行。

区别于k8s的Job资源类型,VolcanoJob更适合机器学习等AI训练任务,更关注资源的声明和使用。

以下是来自volcano官网的一个VolcanoJob示例:

```yaml

apiVersion: batch.volcano.sh/v1alpha1
kind: Job  # 资源类型
metadata:
name: job-1
spec:
minAvailable: 1
schedulerName: volcano # 指明volcano调度器
queue: test # 指明运行训练任务的队列
policies:
   - event: PodEvicted
      action: RestartJob
tasks:
   - replicas: 1
      name: nginx
      policies:
      - event: TaskCompleted
      action: CompleteJob
      template:
      spec:
         containers:
            - command:
            - sleep
            - 10m
            image: nginx:latest
            name: nginx
            resources:
               requests:
                  cpu: 1
               limits:
                  cpu: 1
         restartPolicy: Never

```

  • PodGroup

    Volcano controller会监听VolcanoJob资源对象,之后创建一个对应的PodGroup后进入调度流程。

    PodGroup是实际volcano调度的对象。

Queue

Queue是容纳一组PodGroup的队列,也是该组PodGroup获取集群资源的划分依据。

```yaml

apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue # 资源类型
metadata:
name: test # 队列名称
spec:
weight: 1
reclaimable: false
capability: # 声明资源的可用量
   cpu: 2

```

Actions 调度阶段

Actions是调度的不同阶段。

  • Enqueue 入队

对session中的job进行入队(volcano调度用的优先队列),将入队的job设置为inqueue状态。

  • Allocate 分配

对应k8s调度的预选+优选过程。

  • (Reclaim) 资源回收

当存在pending task的Job时,Reclaim Action会计算集群节点中可回收的资源,将这部分任务驱逐、资源回收后,满足高优先级的Job。

实现抢占的几个条件:

  1. 队列条件: a. 可被抢占队列的 spec 设置 reclaimable = true b. (非必须)可被抢占队列的 allocated 全部资源大于 deserved(在proportion插件的ReclaimableFn函数中)

  2. 任务条件: a. 可被抢占的 pod 需要 running b. 可被抢占的 pod 的 reclaim annotation 不能为 false(默认是 true) c. (非必须)可被抢占的 pod 数量大于 MinAvailable(在gang插件的preemptableFn/ReclaimableFn函数中)

  • (Backfill)

处理待调度Pod列表中没有指明资源申请量的Pod调度。

插件Plugins/Tiers

volcano通过优先队列实现对不同资源(job、task)的调度排序,插件为优先队列提供“比较函数(lessFn/OrderFn)”,从而影响资源的调度顺序。

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0