全部產品
Search
文件中心

Container Service for Kubernetes:監控叢集GPU資源最佳實務

更新時間:Jun 08, 2026

GPU監控基於NVIDIA DCGM實現對叢集GPU節點的監控。本文將介紹如何查看基於三種不同的GPU申請方式所展現出的監控結果。

前提條件

背景資訊

GPU監控支援對叢集GPU節點進行全方位監控,提供叢集維度、節點維度和應用Pod維度GPU監控大盤。可參見監控面板說明瞭解更多詳細資料。

  • 在叢集維度GPU監控大盤,您可以查看叢集或節點池維度相關資訊,例如叢集層面的利用率、顯存使用、XID錯誤偵測等。

  • 在節點維度GPU監控大盤,您可以查看節點維度相關資訊,例如節點中GPU詳情、利用率、顯存使用等。

  • 在應用Pod維度GPU監控大盤,您可以查看Pod維度相關資訊。例如Pod申請的GPU資源、利用率等。

本文以如下流程為例,介紹三種不同的GPU申請方式所展現出的不同監控結果。

注意事項

  • 當前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. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  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)。