文档首页/ 云容器引擎 CCE/ 用户指南/ 调度/ GPU调度/ 故障GPU的Pod自动驱逐功能
更新时间:2025-10-21 GMT+08:00
分享

故障GPU的Pod自动驱逐功能

GPU卡故障是指由于硬件损坏、驱动异常、通信失败或环境因素等原因,导致GPU无法正常提供计算服务的现象。当GPU卡发生故障时,可能导致Pod启动失败、任务中断、资源浪费等问题,对AI任务和高性能应用影响尤为显著。为了最小化GPU卡故障对业务的影响,CCE提供了故障GPU的Pod自动驱逐功能。开启该功能后,如果CCE AI套件(NVIDIA GPU)插件检测到特定的GPU故障场景,则可以将具有特定标签的Pod驱逐,驱逐后的Pod将由用户或控制器决定是否重建并调度。这有助于降低业务中断时间,提升系统稳定性。

前提条件

  • 已有Standard/Turbo集群,且版本在v1.27及以上。
  • 集群中已有正常运行的NVIDIA GPU节点。
  • 集群中已安装CCE AI套件(NVIDIA GPU)插件,插件版本要求如下:
    • 集群版本为v1.27时,插件版本在2.2.1及以上。
    • 集群版本为v1.28及以上时,插件版本在2.8.1及以上。

约束与限制

  • 开启故障GPU的Pod自动驱逐功能后,仅当CCE AI套件(NVIDIA GPU)插件检测到特定类型的GPU故障时,才会触发自动驱逐Pod的机制。此外,不同故障类型的隔离策略不同,Pod的后续调度行为将根据故障GPU的隔离策略而定,具体如下。支持自动驱逐Pod的GPU故障类型以及各故障类型对应的隔离策略的详细信息,请参见表1
    • 若故障发生后,系统对GPU卡进行隔离(包括单点故障的GPU设备隔离和故障GPU节点的GPU设备隔离):在GPU卡恢复为正常状态之前,Pod被驱逐后不会再次调度到该卡上,以防止业务反复受到影响。
    • 若故障发生后,系统不对GPU卡进行隔离:Pod被驱逐后在后续调度中仍可能再次分配到该卡上。
  • 故障GPU的Pod自动驱逐功能仅适用于使用整卡调度和共享模式的Pod,暂不支持驱逐使用GPU虚拟化模式的Pod。

操作流程

操作步骤

步骤说明

步骤一:开启故障GPU的Pod自动驱逐功能

在使用Pod自动驱逐功能时,需先在CCE AI套件(NVIDIA GPU)插件的device-plugin组件中启用对应开关。

步骤二:部署具有指定驱逐标签的工作负载

开启故障GPU的Pod自动驱逐功能后,当检测到相关故障时,系统会将带有特定标签的Pod驱逐。因此,部署工作负载时需提前为Pod添加指定标签,以确保其能在故障发生时被正确识别并触发驱逐机制。

步骤三:验证Pod是否能够被驱逐

当故障发生时可以通过故障GPU所在节点的事件,验证Pod是否能够被驱逐。

其他操作

非必选操作,请结合需求进行配置

您可以根据业务需求,自定义哪些Xid错误类型属于“严重错误”,哪些属于“应用引发的错误”,二者不能重复。其中“严重错误”会对GPU卡进行隔离,而“应用引发的错误”则不会对GPU卡进行隔离。

Xid严重错误默认为74和79,Xid应用引发的错误默认为13、31、43、45、68和137。

步骤一:开启故障GPU的Pod自动驱逐功能

在使用Pod自动驱逐功能时,需首先在CCE AI套件(NVIDIA GPU)插件的device-plugin组件中启用对应开关,具体步骤如下:

  1. 登录CCE控制台,单击集群名称,进入集群“概览页”。
  2. 在左侧导航栏中选择“插件中心”,在右侧找到CCE AI套件(NVIDIA GPU)插件,单击“编辑”
  3. “编辑插件”页面上方,单击“编辑YAML”。将YAML文件中的“enable_pod_eviction_on_gpu_error”值设置为true,以开启故障GPU的Pod自动驱逐功能。

    ...
    custom:
          annotations: {}
          compatible_with_legacy_api: false
          component_schedulername: kube-scheduler
          disable_mount_path_v1: false
          disable_nvidia_gsp: true
          driver_mount_paths: bin,lib64
          enable_fault_isolation: true
          enable_health_monitoring: true
          enable_metrics_monitoring: true
          enable_simple_lib64_mount: true
          enable_xgpu: false
          enable_xgpu_burst: false
          gpu_driver_config: {}
          health_check_xids_v2: 74,79    # 与Xid应用引发的错误不能重复
          install_nvidia_peermem: false
          is_driver_from_nvidia: true
          enable_pod_eviction_on_gpu_error: true 
    ...
    • enable_pod_eviction_on_gpu_error用于控制是否开启故障GPU的Pod自动驱逐功能,取值如下:
      • true:表示开启故障GPU的Pod自动驱逐功能。
      • false:默认值,表示不开启故障GPU的Pod自动驱逐功能。

  4. 配置完成后,在右下角单击“确定”。此时,CCE AI套件(NVIDIA GPU)插件将自动升级,待插件状态变为“运行中”后,故障GPU的Pod自动驱逐功能即可生效。

步骤二:部署具有指定驱逐标签的工作负载

开启故障GPU的Pod自动驱逐功能后,当检测到相关故障时,系统会将带有特定标签的Pod驱逐。因此,部署工作负载时需提前为Pod添加指定标签,以确保其能在故障发生时被正确识别并触发驱逐机制。

  1. 返回CCE控制台,单击集群名称进入集群。在左侧导航栏单击“工作负载”,右上角单击“创建工作负载”。
  2. “容器配置 > 基本信息 >GPU配额”中选择“GPU整卡”“共享模式”,并设置对应参数。

    • GPU整卡:表示GPU整卡调度,即该容器将独立使用GPU卡,系统不会将该卡划分给其他容器使用。
    • 共享模式:表示GPU共享调度,即多个容器可共享同一张物理GPU卡的计算资源和显存。
    图1 GPU整卡

  3. 在“高级配置>标签与注解”中,增加标签“evict_on_gpu_error=true”。插件检测到GPU故障时,会对故障GPU上带有此标签的Pod下发驱逐命令。

    图2 增加驱逐标签

  4. 其他参数请参考创建工作负载进行配置。参数配置完成后,在右下角单击“创建工作负载”。待工作负载变为运行中后,则表示创建成功。

以Job为例,其他类型工作负载在相同位置添加相同标签即可

  1. 登录客户端机器,并通过kubectl连接集群
  2. 执行以下命令,创建一个YAML文件,用于创建需要具有指定驱逐标签的Job。

    vim k8-job.yaml

    文件内容如下,为负载添加驱逐标签evict_on_gpu_error: "true"

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: k8-job
    spec:
      completions: 2
      parallelism: 2
      template:
        metadata:                         # 手动为负载添加特定标签。
          labels:                         
            evict_on_gpu_error: "true"   # 插件检测到GPU故障时,会对故障GPU上带有此标签的Pod下发驱逐命令
        spec:
          restartPolicy: Never
          schedulerName: volcano
          containers:
            - name: k8-job
              image: pytorch:latest  # 替换为您镜像
              imagePullPolicy: IfNotPresent
              command: ["/bin/bash", "-c", "python /etc/scripts/run.py"]  # 替换为您的应用命令
              resources:
                limits:
                  nvidia.com/gpu: 1
                requests:
                  nvidia.com/gpu: 1

  3. 执行以下命令,创建工作负载。

    kubectl apply -f k8-job.yaml

    回显结果如下,则说明工作负载已创建。

    job.batch/k8-job created

  4. 执行以下命令,查看Pod是否创建成功。

    kubectl get pod -n default

    回显结果如下,状态皆为Running,则说明创建成功。

    NAME                      READY   STATUS        RESTARTS   AGE
    k8-job1-jdjbb             1/1     Running       0          28s
    k8-job1-pr5m4             1/1     Running       0          28s

步骤三:验证Pod是否能够被驱逐

当故障发生时可以通过故障GPU所在节点的事件,验证Pod是否能够被驱逐。

  1. 登录CCE控制台,单击集群名称,进入集群“概览页”。
  2. 在左侧导航栏单击“节点列表,右侧切换至“节点”页签。
  3. 在故障GPU所在节点的操作列,单击“事件”。若出现如下事件,则说明相关Pod驱逐成功。

    图3 Pod驱逐事件

其他操作

Xid严重错误默认为74和79,Xid应用引发的错误默认为13、31、43、45、68和137。您可以根据业务需求,自定义哪些Xid错误类型属于“严重错误”,哪些属于“应用引发的错误”,二者不能重复。其中“严重错误”会对GPU卡进行隔离,而“应用引发的错误”则不会对GPU卡进行隔离。

该操作非必选项,请结合需求进行配置。

相关文档