文档首页/ 云容器引擎 CCE/ 用户指南/ 调度/ GPU调度/ 使用Kubernetes默认GPU调度
更新时间:2025-08-11 GMT+08:00
分享

使用Kubernetes默认GPU调度

Standard/Turbo集群支持使用Kubernetes默认GPU调度模式。该模式基于Device Plugin机制,通过资源类型实现对GPU的标准化管理。当节点安装了CCE AI套件(NVIDIA GPU)插件后,CCE可以自动识别节点上的GPU数量,并在调度时通过resources.limits字段为Pod分配资源(如nvidia.com/gpu: 1)。nvidia.com/gpu支持设置为整数和小数:

  • 当nvidia.com/gpu的值设置为正整数(如nvidia.com/gpu: 1)时,表示GPU整卡调度,即该容器将独占使用一张物理GPU卡,系统不会将该卡划分给其他容器使用,适用于对资源性能和隔离要求高的场景。
  • 当nvidia.com/gpu的值设置为小数(如nvidia.com/gpu: 0.2)时,表示GPU共享调度,即多个容器可共享同一张物理GPU卡的计算资源和显存,适用于轻量级推理等对算力需求较低的场景。

本文将进一步为您介绍如何使用Kubernetes默认GPU调度模式。关于该模式的更多信息,请参见调度GPU

前提条件

  • 创建GPU类型节点,具体请参见创建节点
  • 集群中需要安装CCE AI套件(NVIDIA GPU)插件,且安装时注意要选择节点上GPU型号对应的驱动,具体请参见CCE AI套件(NVIDIA GPU)
  • 在v1.27及以下的集群中使用默认GPU调度能力时,CCE AI套件(NVIDIA GPU)插件会把驱动的目录挂载到/usr/local/nvidia/lib64,在容器中使用GPU资源需要将/usr/local/nvidia/lib64追加到LD_LIBRARY_PATH环境变量中。v1.28及以上的集群中则无需执行此步骤。

    通常可以通过如下三种方式追加环境变量。

    • 制作镜像的Dockerfile中配置LD_LIBRARY_PATH。(推荐)
      ENV LD_LIBRARY_PATH /usr/local/nvidia/lib64:$LD_LIBRARY_PATH
    • 镜像的启动命令中配置LD_LIBRARY_PATH。
      /bin/bash -c "export LD_LIBRARY_PATH=/usr/local/nvidia/lib64:$LD_LIBRARY_PATH && ..."
    • 创建工作负载时定义LD_LIBRARY_PATH环境变量(需确保容器内未配置该变量,不然会被覆盖)。
      ...
                env:
                  - name: LD_LIBRARY_PATH
                    value: /usr/local/nvidia/lib64
      ...

创建默认GPU调度工作负载

创建默认GPU调度工作负载时,支持使用控制台和kubectl命令行的方式,具体如下:

  1. 登录CCE控制台,单击集群名称进入集群。在左侧导航栏单击“工作负载”,右上角单击“创建工作负载”。
  2. “容器配置 > 基本信息 >GPU配额”中选择对应的调度方式,并在下方填写需要的资源量。默认GPU调度包括“GPU整卡”“共享模式”,具体介绍如下:

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

  3. (可选步骤)如果需要为该工作负载指定GPU资源,请在“GPU显卡”处选择对应GPU资源。选择完成后,系统将根据资源类型让Pod与相关节点亲和,从而让Pod选择正确的节点。
  4. 其他参数请参考创建工作负载进行配置,参数配置完成后,在右下角单击“创建工作负载”。待工作负载变为运行中后,则表示创建成功。
  1. 使用kubectl连接集群。
  2. 执行以下命令,创建YAML文件,用于创建一个使用Kubernetes默认GPU调度的工作负载。

    vim gpu-app.yaml

    文件内容如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gpu-test
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gpu-test
      template:
        metadata:
          labels:
            app: gpu-test
        spec:
          nodeSelector:
            accelerator: nvidia-t4
          containers:
          - image: nginx:perl
            name: container-0
            resources:
              requests:
                cpu: 250m
                memory: 512Mi
                nvidia.com/gpu: 1   # 非必填,填写时必须与limits.nvidia.com/gpu保持一致
              limits:
                cpu: 250m
                memory: 512Mi
                nvidia.com/gpu: 1   # 用于指定GPU资源量
          imagePullSecrets:
          - name: default-secret
    • nodeSelector:可选参数,表示节点选择器。创建GPU节点后,系统将会为其加上对应资源标签。使用GPU资源时,可以根据标签让Pod与相关节点亲和,从而让Pod选择正确的节点。

      您可以通过以下命令查询节点的标签:

      kubectl get node -L accelerator

      回显结果如下,加粗部分即为对应标签值:

      NAME           STATUS   ROLES    AGE     VERSION                                    ACCELERATOR
      10.100.2.179   Ready    <none>   8m43s   v1.19.10-r0-CCE21.11.1.B006-21.11.1.B006   nvidia-t4
    • resources.limits.nvidia.com/gpu:用于指定GPU资源量。
      • 当nvidia.com/gpu的值设置为正整数(如nvidia.com/gpu: 1)时,表示GPU整卡调度,即该容器将独占使用一张物理GPU卡,系统不会将该卡划分给其他容器使用。
      • 当nvidia.com/gpu的值设置为小数(如nvidia.com/gpu: 0.2)时,表示GPU共享调度,即多个容器可共享同一张物理GPU卡的计算资源和显存。

      requests.nvidia.com/gpu为非必填项,填写时必须与limits.nvidia.com/gpu保持一致

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

    kubectl apply -f gpu-app.yaml

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

    deployment.apps/gpu-test created

  4. 执行以下命令,查看已创建的Pod名称。

    kubectl get pod -n default

    回显结果如下:

    NAME                      READY   STATUS    RESTARTS   AGE
    gpu-test-6bdb4d7cb-pmtc2   1/1     Running   0          21s

  5. 执行以下命令,登录容器内部。

    kubectl -n default exec -it gpu-test-6bdb4d7cb-pmtc2 -c container-0 -- /bin/bash

  6. 在容器内执行以下命令,查看GPU是否分配成功。

    nvidia-smi

    由回显结果可知,GPU分配成功

常见问题

问题现象:工作负载创建失败,报错信息如下:

  • 0/2 nodes are available: 2 Insufficient nvidia.com/gpu.
  • 0/4 nodes are available: 1 InsufficientResourceOnSingleGPU, 3 Insufficient nvidia.com/gpu.

问题原因:对应的GPU资源不足。指定nvidia.com/gpu后,系统不会将负载调度到没有GPU的节点,当资源不足时,将会产生上述错误。

解决方案:购买对应的GPU节点,保证GPU资源充足。

相关文档