全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:监控集群GPU资源最佳实践

更新时间:Jun 07, 2026

GPU监控基于NVIDIA DCGM实现对集群GPU节点的监控。本文将介绍如何查看基于三种不同的GPU申请方式所展现出的监控结果。

前提条件

背景信息

GPU监控支持对集群GPU节点进行全方位监控,提供集群维度、节点维度和应用Pod维度GPU监控大盘。可参见监控面板说明了解更多详细信息。

  • 在集群维度GPU监控大盘,您可以查看集群或节点池维度的相关信息,例如集群层面的利用率、显存使用、XID错误检测等。

  • 在节点维度GPU监控大盘,您可以查看节点维度的相关信息,例如节点中GPU详情、利用率、显存使用等。

  • 在应用Pod维度GPU监控大盘,您可以查看Pod维度的相关信息。例如Pod申请的GPU资源、利用率等。

本文以如下流程为例,介绍三种不同的GPU申请方式所展现出的不同监控结果。

image

注意事项

  • 当前GPU监控指标的采集间隔为15秒,这可能导致Grafana监控仪表盘展示的数据存在一定延迟。因此可能会出现在监控显示节点无可用显存,但实际Pod还能调度到该节点上。出现该现象可能是在两次监控采集之间(15 秒内)有Pod完成任务并释放GPU资源,调度器感知后,将处于Pending的Pod调度到这个节点上。

  • 监控大盘只支持监控通过在Pod中配置resources.limits的方式申请的GPU资源。更多信息,请参见为Pod和容器管理资源

    节点使用GPU资源时存在以下情况,可能会导致监控大盘的数据不准确:

    • 直接在节点上运行GPU应用。

    • 通过docker run命令直接启动容器运行GPU应用。

    • 在Pod的env中直接添加环境变量NVIDIA_VISIBLE_DEVICES=allNVIDIA_VISIBLE_DEVICES=<GPU ID>等,通过环境变量NVIDIA_VISIBLE_DEVICES直接为Pod申请GPU资源,并且运行了GPU程序。

    • 在Pod的securityContext中配置privileged: true,并且运行了GPU程序。

    • 在Pod中未设置环境变量NVIDIA_VISIBLE_DEVICES,但Pod所使用的镜像在制作时,默认配置环境变量NVIDIA_VISIBLE_DEVICES=all,并且运行了GPU程序。

  • GPU卡已分配的显存和已使用的显存不一定相同。例如某一张GPU卡共有16 GiB显存,为某个Pod分配了5 GiB显存,但Pod的启动命令为sleep 1000,即Pod处于Running但需要经过1000秒后才会使用GPU,因此存在GPU卡已分配的显存为5 GiB,但已使用的显存为0 GiB的情况。

步骤一:创建节点池

Pod按整张卡方式或显存维度申请GPU资源(包括申请GPU算力资源),GPU监控大盘均可以展示其相关指标。

本示例将在集群中创建三个节点池,展示不同GPU资源申请模式下的Pod调度与资源占用情况。关于创建节点池的具体步骤,请参见创建节点池。节点池部分信息如下:

配置项

说明

示例值

节点池名称

节点池一的名称。

exclusive

节点池二的名称。

share-mem

节点池三的名称。

share-mem-core

实例规格

节点的实例规格,本文以运行Tensorflow Benchmark项目为例,需申请10 GiB显存,节点规格需大于10GiB。

ecs.gn7i-c16g1.4xlarge

期望节点数

节点池应该维持的总节点数量。

1

节点标签(Labels)

节点池一添加的标签。表示按整张卡的维度申请GPU资源。

节点池二添加的标签。表示按GPU显存维度申请GPU资源。

ack.node.gpu.schedule=cgpu

节点池三添加的标签。表示按GPU显存维度申请GPU资源且支持算力申请。

ack.node.gpu.schedule=core_mem

步骤二:部署GPU应用

节点池创建完成后,为了验证节点GPU相关指标是否正常,需要在节点上运行一些GPU测试任务。可参见开启调度功能了解各任务所需匹配标签及调度关系。三个任务的部分信息如下:

任务名称

任务运行的节点池

申请的GPU资源

tensorflow-benchmark-exclusive

exclusive

nvidia.com/gpu: 1

表示申请1张GPU卡。

tensorflow-benchmark-share-mem

share-mem

aliyun.com/gpu-mem: 10

表示申请10 GiB显存。

tensorflow-benchmark-share-mem-core

share-mem-core

  • aliyun.com/gpu-mem: 10

  • aliyun.com/gpu-core.percentage: 30

表示申请10 GiB显存和1张GPU卡的30%算力。

  1. 创建Job文件。

    • 使用以下YAML内容,创建tensorflow-benchmark-exclusive.yaml文件。

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: tensorflow-benchmark-exclusive
      spec:
        parallelism: 1
        template:
          metadata:
            labels:
              app: tensorflow-benchmark-exclusive
          spec:
            containers:
            - name: tensorflow-benchmark
              image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
              command:
              - bash
              - run.sh
              - --num_batches=5000000
              - --batch_size=8
              resources:
                limits:
                  nvidia.com/gpu: 1 #申请1张GPU卡。
              workingDir: /root
            restartPolicy: Never
    • 使用以下YAML内容,创建tensorflow-benchmark-share-mem.yaml文件。

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: tensorflow-benchmark-share-mem
      spec:
        parallelism: 1
        template:
          metadata:
            labels:
              app: tensorflow-benchmark-share-mem
          spec:
            containers:
            - name: tensorflow-benchmark
              image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
              command:
              - bash
              - run.sh
              - --num_batches=5000000
              - --batch_size=8
              resources:
                limits:
                  aliyun.com/gpu-mem: 10 #申请10 GiB显存。
              workingDir: /root
            restartPolicy: Never
    • 使用以下YAML内容,创建tensorflow-benchmark-share-mem-core.yaml文件。

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: tensorflow-benchmark-share-mem-core
      spec:
        parallelism: 1
        template:
          metadata:
            labels:
              app: tensorflow-benchmark-share-mem-core
          spec:
            containers:
            - name: tensorflow-benchmark
              image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3
              command:
              - bash
              - run.sh
              - --num_batches=5000000
              - --batch_size=8
              resources:
                limits:
                  aliyun.com/gpu-mem: 10 #申请10 GiB显存。
                  aliyun.com/gpu-core.percentage: 30  #申请1张卡的30%算力。
              workingDir: /root
            restartPolicy: Never
  2. 执行以下命令,部署Job任务。

    kubectl apply -f tensorflow-benchmark-exclusive.yaml
    kubectl apply -f tensorflow-benchmark-share-mem.yaml
    kubectl apply -f tensorflow-benchmark-share-mem-core.yaml
  3. 执行以下命令,查看Pod的运行状态。

    kubectl get pod

    预期输出:

    NAME                                        READY   STATUS    RESTARTS   AGE
    tensorflow-benchmark-exclusive-7dff2        1/1     Running   0          3m13s
    tensorflow-benchmark-share-mem-core-k24gz   1/1     Running   0          4m22s
    tensorflow-benchmark-share-mem-shmpj        1/1     Running   0          3m46s

    由预期输出得到,Pod均处于Running状态,表示Job任务部署成功。

步骤三:查看GPU监控大盘

查看集群GPU监控-集群维度

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > Prometheus 监控

  3. 在Prometheus监控大盘列表页面,单击GPU 监控页签,然后单击集群GPU监控-集群维度页签。集群维度监控大盘的信息如下,更多信息,请参见集群维度监控大盘

    image

    序号

    Panel名称

    说明

    Total GPU Nodes

    共有3个GPU节点。

    Allocated GPUs

    GPU总数为3,已分配GPU数为1.9。

    说明

    如果是按整张卡维度申请GPU,一张卡分配的比例为1;如果是共享GPU调度,分配比例为某张卡已分配的显存与这张卡总显存的比例。

    Allocated GPU Memory

    已分配63.0%的显存。

    Used GPU Memory

    已使用35.5%的显存。

    Average GPU Utilization

    所有卡的平均利用率为74%。

    GPU Memory Copy Utilization

    所有卡的平均内存复制利用率为43.7%。

    GPU Node Details

    集群中GPU节点的信息,包括节点名称、GPU卡索引号、GPU利用率、内存控制器利用率等。

查看集群GPU监控-节点维度

在Prometheus监控大盘列表页面,单击GPU 监控页签,然后单击集群GPU监控-节点维度页签,选择GPUNode为目标节点,本文以cn-hangzhou.10.166.154.xxx为例。节点维度监控大盘的信息如下:

image

image

image

GPU Process Details 面板表格中除 Pod 信息外,还提供 Container NameAllocate ModeProcess IdProcess NameProcess TypeGPU IndexUsed GPU MemoSM UtilizationGPU Memory Copy UtilDecode UtilizationEncode Utilization 指标列。

Panel组

序号

Panel名称

说明

Overview

GPU Mode

GPU模式为共享模式,按显存和算力维度申请GPU资源。

NVIDIA Driver Version

安装的GPU驱动版本为535.161.07。

Allocated GPUs

总GPU个数为1,已分配GPU个数为0.45。

GPU Utilization

GPU的平均利用率为26%。

Allocated GPU Memory

已分配的GPU显存值占总显存值的45.5%。

Used GPU Memory

当前使用的GPU显存值占总显存值的36.4%。

Allocated Computing Power

0号GPU卡已分配30%算力。

说明

只有在节点开启算力分配的情况下,节点已分配的算力比例(Allocated Computing Power)才有数据显示,因此本文示例的三个节点,只有包含ack.node.gpu.schedule=core_mem标签的节点显示数据。

Utilization

GPU Utilization

0号GPU卡利用率最小值为0%,最大值为33%,平均值为12%。

Memory Copy Utilization

0号GPU卡内存复制利用率最小值为0%,最大值为22%,平均值为8%。

Memory&BAR1

GPU Memory Details

GPU内存信息,包括GPU卡的UUID、索引号、卡型号等。

BAR1 Used

已使用BAR1为4 MB。

Memory Used

GPU卡已使用的显存大小为8.17 GB。

BAR1 Total

总BAR1为32.8 GB。

GPU Process

GPU Process Details

GPU线程详细信息,包括Process所属的Pod命名空间、Process所属的Pod名称等。

也可在下方查看更多高级指标,详情请参见集群GPU监控-节点维度

高级指标包括 GPU Process(2 panels)、Profiling(12 panels)、Temperature & Energy(4 panels)、Clock(6 panels)、Retired Pages(2 panels)和 Violation(6 panels)共六个 Panel 组,默认处于折叠状态,可单击展开查看详情。

查看集群GPU监控-应用Pod维度

在Prometheus监控大盘列表页面,单击GPU 监控页签,然后单击集群GPU监控-应用Pod维度页签。Pod维度监控大盘的信息如下:该面板以表格形式展示各 Pod 的 GPU 指标,除下文说明的字段外,还包含 Pod SourceAllocated Mode(exclusive 或 share)、SM UtilizationGPU Memory Copy UtilizationDecode UtilizationEncode Utilization 等列。

序号

Panel名称

说明

GPU Pod Details

集群申请GPU资源的Pod信息,包括Pod所在的命名空间、Pod名称、节点名称、已使用的显存等。

说明
  • Allocated GPU Memory表示为Pod分配的显存。如果是共享GPU调度,节点在上报API Server每张卡总的显存时,仅支持上报整数,所以上报的显存数为节点的真实显存向下取整。例如节点上某张卡的总显存为31.7 GiB,节点上报给API Server时,只能上报31 GiB,如果Pod申请了10 GiB,那么为该Pod分配的真实显存为31.7*(10/31)=10.2 GiB。

  • Allocated Computing Power表示为Pod分配的算力。如果Pod没有申请算力,则该值显示为“-”,从图中可以看到名为tensorflow-benchmark-share-mem-core-k24gz的Pod申请了30%的算力。

也可在下方查看更多高级指标,详情请参见集群GPU监控-应用Pod维度

高级指标面板分组包括:Pod Metrics(GPU Device)(6 panels)、Pods Metrics(Host Resource)(8 panels)、GPU Utilization(Associated with Pod)(4 panels)、GPU Memory & BAR1(Associated with Pod)(5 panels)、GPU Profiling(Associated with Pod)(12 panels)、GPU Temperature & Energy(Associated with Pod)(4 panels)和 GPU Clock(Associated with Pod)(6 panels)。