更新时间:2025-08-19 GMT+08:00

准备GPU虚拟化资源

CCE GPU虚拟化采用xGPU虚拟化技术,能够动态对GPU设备显存与算力进行划分,单个GPU卡最多虚拟化成20个GPU虚拟设备。本文介绍如何在GPU节点上实现GPU的调度和隔离能力。

前提条件

配置

支持版本

集群版本

v1.23.8-r0、v1.25.3-r0及以上

操作系统

Huawei Cloud EulerOS 2.0操作系统

GPU类型

支持Tesla T4、Tesla V100类型的GPU

驱动版本

GPU虚拟化功能仅支持535.216.03、470.57.02、510.47.03、535.54.03版本的GPU驱动

运行时

仅支持containerd

插件

集群中需要同时安装以下插件:

步骤一:开启GPU虚拟化

集群中需要同时安装CCE AI套件(NVIDIA GPU)插件和Volcano调度器插件。

  1. 登录CCE控制台,单击集群名称进入集群,在左侧选择“配置中心”。
  2. 切换至“异构资源配置”页签,开启“GPU虚拟化”,支持配置集群级别和节点池级别的GPU虚拟化。

    • 集群级别的GPU虚拟化:
      1. 开启“GPU配置 > GPU虚拟化”,开启后,全局默认开启GPU虚拟化,支持单GPU卡的算力与显存切分。
      2. “集群默认驱动”的中选择支持GPU虚拟化的驱动。
      3. 在页面右下角单击“确认配置”
      图1 开启集群级别GPU虚拟化
    • 节点池级别的GPU虚拟化:安装2.7.2及以上版本的CCE AI套件(NVIDIA GPU)插件时,支持以节点池级别配置GPU虚拟化开关。
      1. “GPU配置 > 节点池配置”中单击添加行。
      2. “节点池”列表中选择需要配置GPU虚拟化的节点池,并在“驱动选择”中选择支持GPU虚拟化的驱动。配置节点池自定义驱动后,节点池中节点优先使用当前节点池自定义驱动,未指定驱动的节点将使用集群默认驱动。
        • 系统将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。
        • 更新驱动版本后,新建节点直接生效,存量节点需重启节点生效。
      3. 在GPU虚拟化列中,单击,开启节点池级别的GPU虚拟化。如果您需要为多个节点池配置GPU虚拟化,请单击“添加行”,继续添加。
      4. 在页面右下角单击“确认配置”
      图2 开启节点池级别GPU虚拟化

  3. GPU虚拟化配置完成后,您可以进一步验证GPU虚拟化是否配置成功。

    在左侧导航栏单击“集群 > 节点管理”,在右侧切换至“节点”页签,找到配置GPU虚拟化的节点。在对应节点的“操作”列,单击“更多 > 查看YAML”。如果YAML中“node-status.volcano.sh/nvidia”字段的值为“{"enableXGPU":true}”,则说明该节点GPU虚拟化配置成功。

    图3 验证GPU虚拟化是否成功

步骤二:创建GPU节点

您需要在集群中创建支持GPU虚拟化的节点以使用GPU虚拟化功能,具体操作步骤请参见创建节点创建节点池。如果您的集群中已有符合前提条件的GPU节点,您可以跳过此步骤。

步骤三(可选):修改Volcano调度策略

Volcano针对GPU节点的调度策略默认为Spread,即如果节点配置相同,会选择一个正在运行的容器数量最少的节点,可以尽量将容器平均分配到各个节点。而Binpack调度策略与之相反,它会尽可能地把所有的容器调度到一台节点上运行,尽量少用节点,避免资源碎片化。

如果在使用GPU虚拟化特性时需要使用Binpack调度策略,可以在Volcano插件的高级配置中进行修改,具体操作步骤如下。

  1. 登录CCE控制台,单击集群名称进入集群,在左侧选择“配置中心”。
  2. 在“调度配置”页面,在“默认调度器”中将“Kube-scheduler调度器”切换至“Volcano调度器”,并在下方“专家模式”中,单击“开始使用”。

  3. 修改Volcano调度配置。

    1. nodeorder插件中,添加arguments参数,配置leastrequested.weight为0,即资源分配最少的节点优先级设置为0。
    2. 新增binpack插件,并指定GPU虚拟化自定义资源(volcano.sh/gpu-core.percentagevolcano.sh/gpu-mem.128Mi)的权重。
    示例如下:
    ...
    default_scheduler_conf:
      actions: allocate, backfill, preempt
      tiers:
        - plugins:
            - name: priority
            - enablePreemptable: false
              name: gang
            - name: conformance
        - plugins:
            - enablePreemptable: false
              name: drf
            - name: predicates
            - name: nodeorder
              arguments:
                leastrequested.weight: 0 # 将资源分配最少的节点优先级设置为0
        - plugins:
            - name: cce-gpu-topology-predicate
            - name: cce-gpu-topology-priority
            - name: xgpu
            - name: binpack # 添加binpack插件,并指定GPU虚拟化资源的权重
              arguments:
                binpack.resources: volcano.sh/gpu-core.percentage,volcano.sh/gpu-mem.128Mi
                binpack.resources.volcano.sh/gpu-mem.128Mi: 10
                binpack.resources.volcano.sh/gpu-core.percentage: 10
        - plugins:
            - name: nodelocalvolume
            - name: nodeemptydirvolume
            - name: nodeCSIscheduling
            - name: networkresource
    ...

  4. 单击“保存”。

相关文档

如果需要创建使用GPU虚拟化的工作负载,请参见使用GPU虚拟化