更新时间:2024-11-12 GMT+08:00
分享

调度算法

在离线业务混部

在离线业务混部是将多种应用在一个集群内部署,通过预测分析应用特性,实现业务对集群资源的充分利用;

参数名

取值范围

默认值

是否允许修改

作用范围

colocation-enable

true/false

false

允许

CCE Turbo

从集群维度来看,混部是将多种应用在一个集群内部署,通过预测分析应用特性,实现业务对集群资源的充分利用;从节点维度来看,混部是将多个容器部署在同一个节点上,这些容器内的应用既包括在线类型,也包括离线类型。根据应用对资源质量需求的差异,在线应用可以归纳为延时敏感型LS(Latency Sensitive),通常对请求压力(QPS)或访问延迟(RT)等指标有明确的要求,对资源质量较为敏感;离线应用可以归纳为资源消耗型BE(Best Effort),通常是一些计算密集型的任务类应用,有较好的容错重试能力,对资源质量的要求相对较为宽松。

配置建议:

只有在HCE 2.0的OS节点支持

抢占调度

根据优先级规则为同一队列中高优先级任务执行抢占调度。

参数名

取值范围

默认值

是否允许修改

作用范围

preempt

true/false

false

允许

CCE Standard/CCE Turbo

开启抢占调度后,在集群资源不足的场景,高优先级作业将会驱逐低优先级作业,获取资源运行

抢占能力与pod延迟创建能力不可同时开启

资源碎片最小化调度

将Pod调度到资源使用较高的节点(尽量不往空白节点分配),以减少资源碎片。

参数名

取值范围

默认值

是否允许修改

作用范围

binpack

开启和关闭插件:true/false

插件对应的配置参数如下:

binpack.weight:非负整数。

binpack.cpu:非负整数。

binpack.memory:非负整数。

binpack.resources:用户自定义字符串

binpack.resources.<your_resource>:非负整数。

开启插件:true

插件对应的配置参数如下:

binpack.weight:10

binpack.cpu:1

binpack.memory:1

binpack.resources:nvidia.com/gpu

binpack.resources.nvidia.com/gpu:2

允许

CCE Standard/CCE Turbo

arguments参数:

binpack.weight:binpack插件本身在所有插件打分中的权重。

binpack.cpu:CPU资源在所有资源中的权重,默认是1。

binpack.memory:内存资源在所有资源中的权重,默认是1。

binpack.resources:Pod请求的其他自定义资源类型,例如nvidia.com/gpu。可添加多个并用英文逗号隔开。

binpack.resources.<your_resource>:自定义资源在所有资源中的权重,可添加多个类型的资源,其中<your_resource>为binpack.resources参数中定义的资源类型。例如binpack.resources.nvidia.com/gpu。

配置建议:

建议使用默认配置,如果业务有特殊的述求,可以根据业务实际场景调整各权重值。

  1. 希望重点提高集群CPU资源利用率,减少CPU资源碎片,可以将binpack.cpu权重值提高为10
  2. 希望提高集群GPU资源利用率,减少GPU碎片,可以通过binpack.resources添加自定义资源(GPU),并设定权重值为10

提高binpack插件的打分权重值后,该插件对于节点选择的影响力提高,nodeorder等插件对于节点的打分影响力将会被削弱

负载感知调度

Volcano调度器提供节点CPU、Memory的负载感知调度能力,感知集群内节点CPU、Memory的负载情况,将Pod优先调度到负载较低的节点,实现节点负载均衡,避免出现因单个节点负载过高而导致的应用程序或节点故障。

参数名

取值范围

默认值

是否允许修改

作用范围

usage

true/false

false

允许

CCE Standard/CCE Turbo

负载感知调度支持的配置参数如下:

参数

说明

默认值

负载感知调度策略权重

增大该权重值,可提高负载感知策略在整体调度中的影响力。

5

CPU权重

增大该权重值,优先均衡CPU资源。

1

内存权重

增大该权重值,优先均衡内存资源。

1

真实负载阈值生效方式

  • 软约束:节点CPU、内存真实负载达到阈值后,新的任务优先被分配至真实负载未达到阈值的节点,但是该节点依然允许调度。
  • 硬约束:节点CPU、内存真实负载达到阈值后,该节点不允许调度新的任务。

硬约束

CPU真实负载阈值

节点CPU真实利用率超过该阈值后,会根据真实负载阈值生效方式,将工作负载优先或强制调度到其他节点。

80

内存真实负载阈值

节点内存真实利用率超过该阈值后,会根据真实负载阈值生效方式,将工作负载优先或强制调度到其他节点。

80

配置建议:

为达到最优的负载感知调度效果,可以选择关闭装箱(binpack)策略。装箱策略(binpack)根据Pod的Request资源信息,将Pod优先调度到资源消耗较多的节点,在一定程度上会影响负载感知调度的效果。多种策略的结合使用案例可参考资源利用率优化调度配置案例

节点优选策略

优选节点的常用算法,通过模拟分配从各个维度为节点打分,找到最适合当前作业的节点。

参数名

取值范围

默认值

是否允许修改

作用范围

nodeorder

开启和关闭插件:true/false

打分参数:

nodeaffinity.weight:非负整数。

podaffinity.weight:非负整数。

leastrequested.weight:非负整数。

balancedresource.weight:非负整数。

mostrequested.weight:非负整数。

tainttoleration.weight:非负整数。

imagelocality.weight:非负整数。

volumebinding.weight:非负整数。

podtopologyspread.weight:非负整数。

开启插件:TRUE

nodeaffinity.weight:1。

podaffinity.weight:1。

leastrequested.weight:1。

balancedresource.weight:1。

mostrequested.weight:0。

tainttoleration.weight:1。

imagelocality.weight:1。

volumebinding.weight:1。

podtopologyspread.weight:2。

允许

CCE Standard/CCE Turbo

打分参数:

nodeaffinity.weight:节点亲和性优先调度,默认值是1。

podaffinity.weight:Pod亲和性优先调度,默认值是1。

leastrequested.weight:资源分配最少的节点优先,默认值是1。

balancedresource.weight:节点上面的不同资源分配平衡的优先,默认值是1。

mostrequested.weight:资源分配最多的节点优先,默认值是0。

tainttoleration.weight:污点容忍高的优先调度,默认值是1。

imagelocality.weight:节点上面有Pod需要镜像的优先调度,默认值是1。

volumebinding.weight:Local PV延迟绑定调度,默认值是1。

podtopologyspread.weight:Pod拓扑调度,默认值是2。

配置建议:

建议使用默认配置,如果业务有特殊的述求,可以根据业务实际场景调整各权重值。

增大策略对应的权重值,可以使该策略在节点打分时发挥更大的影响力。

NodeOrder和Binpack对某个节点的给出的基础分值,并根据对应的权重值进行倍数放大,调整插件中某个策略的权重值后,该策略对于节点打分的整体影响力增加,其他插件对节点评分的影响力将会同步被削弱。

公平调度

DRF调度算法(Dominant Resource Fairness)可以根据作业使用的主导资源份额进行调度,资源份额较小的作业将具有更高优先级。

参数名

取值范围

默认值

是否允许修改

作用范围

drf

true/false

true

允许

CCE Standard/CCE Turbo

DRF调度算法的全称是Dominant Resource Fairness,是基于容器组Domaint Resource的调度算法。volcano-scheduler观察每个Job请求的主导资源,并将其作为对集群资源使用的一种度量,根据Job的主导资源,计算Job的share值,在调度的过程中,具有较低share值的Job将具有更高的调度优先级。这样能够满足更多的作业,不会因为一个资源份额较大业务,导致大批资源份额小的业务无法调度。DRF调度算法能够确保在多种类型资源共存的环境下,尽可能满足分配的公平原则。

配置建议:

DRF调度算法优先考虑集群中业务的吞吐量,适用单次AI训练、单次大数据计算以及查询等批处理小业务场景。

组调度

将一组Pod看做一个整体进行资源分配。观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。

参数名

取值范围

默认值

是否允许修改

作用范围

gang

true/false

true

允许

CCE Standard/CCE Turbo

Gang调度策略是volcano-scheduler的核心调度算法之一,它满足了调度过程中的“All or nothing”的调度需求,避免Pod的任意调度导致集群资源的浪费。具体算法是,观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。

配置建议:

基于容器组概念的Gang调度算法十分适合需要多进程协作的场景。AI场景往往包含复杂的流程,Data Ingestion、Data Analysts、Data Splitting、Trainer、Serving、Logging等,需要一组容器进行协同工作,就很适合基于容器组的Gang调度策略。MPI计算框架下的多线程并行计算通信场景,由于需要主从进程协同工作,也非常适合使用Gang调度策略。容器组下的容器高度相关也可能存在资源争抢,整体调度分配,能够有效解决死锁。

在集群资源不足的场景下,gang的调度策略对于集群资源的利用率的提升是非常明显的。

虚拟GPU资源调度

支持GPU虚拟化资源调度。

参数名

取值范围

默认值

是否允许修改

作用范围

xGPU

true/false

true

允许

CCE Standard/CCE Turbo

支持GPU单卡算力、显存分割与隔离的调度能力

配置建议:

使用GPU的场景默认开启,不使用GPU资源可以选择关闭

昇腾NPU预选调度

支持昇腾NPU HCCS亲和预选调度

参数名

取值范围

默认值

是否允许修改

作用范围

cce-gpu-topology-predicate

true/false

true

允许

CCE Standard/CCE Turbo

一台AI服务器上共有8块NPU 1980芯片,4P * 2方式。每4块NPU 1980芯片之间通过HCCS互联,4块之间通过PCIe swith互联。

HCCS互联的4块NPU 1980芯片较PCIe swith互联有更大的带宽,可以针对HCCS做亲和性调度发挥HCCS的带宽优势。

配置建议:

使用NPU的集群默认开启,不使用NPU资源可以关闭

昇腾NPU优选调度

支持昇腾NPU HCCS亲和优选调度

参数名

取值范围

默认值

是否允许修改

作用范围

cce-gpu-topology-priority

true/false

true

允许

CCE Standard/CCE Turbo

优先占满一台节点的NPU 1980芯片,减少资源碎片

配置建议:

使用NPU的集群默认开启,不使用NPU资源可以关闭

专家模式

如果上述Volcano的典型配置无法满足您的业务场景,可以使用专家模式定制专属于您的调度策略

参数名

取值范围

默认值

是否允许修改

作用范围

expert-mode

json格式

actions: 'allocate, backfill, preempt'
  tiers:
    - plugins:
        - name: 'priority'
        - name: 'gang'
        - name: 'conformance'
        - name: 'lifecycle'
          arguments:
            lifecycle.MaxGrade: 10
            lifecycle.MaxScore: 200.0
            lifecycle.SaturatedTresh: 1.0
            lifecycle.WindowSize: 10
    - plugins:
        - name: 'drf'
        - name: 'predicates'
        - name: 'nodeorder'
    - plugins:
        - name: 'cce-gpu-topology-predicate'
        - name: 'cce-gpu-topology-priority'
        - name: 'cce-gpu'
    - plugins:
        - name: 'nodelocalvolume'
        - name: 'nodeemptydirvolume'
        - name: 'nodeCSIscheduling'
        - name: 'networkresource'

允许

CCE Standard/CCE Turbo

volcano-scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action 中算法的具体实现细节。

您可以根据官方文档中对每个action和plugin的说明,定义专属于您的调度策略。

详情可参见:https://support.huaweicloud.com/usermanual-cce/cce_10_0193.html#section1

配置建议:

使用默认配置

该项配置有一定的使用门槛,需要对调度有深入了解的客户,才可以根据官方文档进行定制化修改调度策略。

相关文档