文档首页/ 云容器引擎 CCE/ 用户指南/ 调度/ GPU调度/ GPU虚拟化/ GPU虚拟化兼容Kubernetes默认GPU调度
更新时间:2025-08-19 GMT+08:00

GPU虚拟化兼容Kubernetes默认GPU调度

开启GPU虚拟化后,除显存隔离模式(设置volcano.sh/gpu-mem.128Mi参数)、算显隔离模式(同时设置volcano.sh/gpu-mem.128Mi和volcano.sh/gpu-core.percentage参数)外,工作负载还支持Kubernetes默认GPU调度(设置nvidia.com/gpu参数)。

开启GPU虚拟化并使用Kubernetes默认GPU调度时,存在以下场景:

  • 若nvidia.com/gpu被设置为小数:
    • 工作负载被调度至不支持GPU虚拟化的节点(详见前提条件)时,表示GPU共享调度,即多个容器可共享同一张物理GPU卡的计算资源和显存,适用于轻量级推理等对算力需求较低的场景。
    • 工作负载被调度至支持GPU虚拟化的节点(详见前提条件)时,表示GPU虚拟化的显存隔离模式,此时可以和显存隔离模式的工作负载共用一张GPU卡,但无法与算显隔离模式负载共用一张GPU卡。系统将按nvidia.com/gpu设定的比例为容器分配GPU显存,分配给容器的显存量需为128MiB的整数倍,否则自动向下取整。例如,在16GiB的GPU上,nvidia.com/gpu设置为0.5,则容器将被分配0.5×16GiB=8GiB=8192MiB(128MiB的64倍)。
  • 若nvidia.com/gpu被设置为整数,则表示GPU整卡调度,即该容器将独占使用一张物理GPU卡,系统不会将该卡划分给其他容器使用,适用于对资源性能和隔离要求高的场景。

使用不同GPU资源名称的Pod之间不支持装箱调度。例如,使用nvidia.com/gpu和volcano.sh/gpu-mem.128Mi声明资源的Pod,由于资源标识不一致,调度器无法将其视为同类资源,因此二者之间不支持装箱调度原则。

约束与限制

使用GPU虚拟化兼容Kubernetes默认GPU调度模式,要求配套的CCE AI 套件 (NVIDIA GPU)插件版本为2.0.10及以上、Volcano调度器插件版本为1.10.5及以上。

兼容GPU共享调度模式示例

  1. 使用kubectl连接集群。
  2. 创建一个使用nvidia.com/gpu资源的工作负载。

    创建gpu-app.yaml文件,示例如下:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: gpu-app
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gpu-app
      template:
        metadata:
          labels:
            app: gpu-app
        spec:
          schedulerName: volcano
          containers:
          - image: <your_image_address>     # 请替换为您的镜像地址
            name: container-0
            resources:
              requests:
                cpu: 250m
                memory: 512Mi
                nvidia.com/gpu: 0.1   # 填写时必须与limits.nvidia.com/gpu保持一致
              limits:
                cpu: 250m
                memory: 512Mi
                nvidia.com/gpu: 0.1   # 表示GPU申请值
          imagePullSecrets:
          - name: default-secret

  3. 执行以下命令,创建应用。

    kubectl apply -f gpu-app.yaml

  4. 登录容器查看容器被分配显存总量。

    kubectl exec -it gpu-app -- nvidia-smi

    预期输出:

    Thu Jul 27 07:53:49 2023       
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  NVIDIA A30          Off  | 00000000:00:0D.0 Off |                    0 |
    | N/A   47C    P0    34W / 165W |      0MiB /  2304MiB |      0%      Default |
    |                               |                      |             Disabled |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |  No running processes found                                                 |
    +-----------------------------------------------------------------------------+

    预期输出表明,Pod可使用的显存总量为2304MiB。

    本示例中,GPU节点上的显存总量为24258MiB,而24258MiB * 0.1 = 2425.8MiB并非128MiB的整数倍,因此进行向下取整至18倍,即18 * 128MiB=2304MiB。