全部產品
Search
文件中心

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

更新時間:Jun 25, 2025

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

節點標籤

節點池一添加的標籤。表示按整張卡的維度申請GPU資源。

節點池二添加的標籤。表示按GPU顯存維度申請GPU資源。

ack.node.gpu.schedule=cgpu

節點池三添加的標籤。表示按GPU顯存維度申請GPU資源且支援算力申請。

ack.node.gpu.schedule=core_mem

步驟二:部署GPU應用

節點池建立完成後,為了驗證節點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

image

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監控-節點維度

image

查看叢集GPU監控-應用Pod維度

在Prometheus監控大盤列表頁面,單擊GPU監控頁簽,然後單擊叢集GPU監控-應用Pod維度頁簽。Pod維度監控大盤的資訊如下:image

序號

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維度

image