GPU監控2.0基於NVIDIA DCGM構建功能強大的GPU監控體系。本文介紹如何開啟叢集GPU監控。
前提條件
背景資訊
對營運人員來說,實現對Kubernetes的大規模GPU裝置可監測能力至關重要。通過監測GPU相關指標能夠瞭解整個叢集的GPU使用方式、健康狀態、工作負載效能等,從而實現對異常問題的快速診斷、最佳化GPU資源的分配、提升資源使用率等。除營運人員以外,其他人員(例如資料科學家、AI演算法工程師等)也能通過相關監控指標瞭解業務的GPU使用方式,以便進行容量規劃和任務調度。
GPU監控1.0版本基於NVML(NVIDIA Management Library)庫擷取GPU指標,並通過Prometheus和Grafana將指標透傳給使用者,便於使用者監控叢集GPU資源的使用方式。但是,隨著新一代NVIDIA GPU的發行,內部構造更加複雜,使用者的使用情境也更加多樣,GPU監控1.0對GPU的監控指標已經不能完全滿足使用者的需求。
新一代NVIDIA支援使用資料中心GPU管理器DCGM(Data Center GPU Manager)來管理大規模叢集中的GPU,GPU監控2.0基於NVIDIA DCGM構建功能更強大的GPU監控體系。DCGM提供了種類豐富的GPU監控指標,有如下功能特性:
GPU行為監控
GPU組態管理
GPU Policy管理
GPU健康診斷
GPU層級統計和線程層級統計
NVSwitch配置和監控
使用限制
節點NVIDIA GPU驅動版本≥418.87.01。如果您需要進行GPU Profiling,則節點NVIDIA GPU驅動版本≥450.80.02。關於GPU Profiling的更多資訊,請參見Feature Overview。
說明目前使用的DCGM版本為2.3.6,該版本的DCGM在5XX系列的NVIDIA GPU驅動上工作存在一些問題,具體請參見dcgm-exporter collects metrics incorrectly?。
您可以通過SSH登入GPU節點,執行
nvidia-smi
命令,查看安裝的GPU驅動版本。更多資訊,請參見通過SSH串連ACK專有叢集的Master節點。
不支援對NVIDIA MIG進行監控。
注意事項
當前DCGM可能會存在記憶體流失的問題,已通過為Exporter所在的Pod設定resources.limits
來規避這個問題。當記憶體使用量達到Limits限制時,Exporter會重啟(一般一個月左右重啟一次),重啟後正常上報指標,在重啟後的幾分鐘內,Grafana可能會出現某些指標的顯示異常(例如節點數突然變多),之後恢複正常。問題詳情請參見The DCGM has a memory leak?。
費用說明
在ACK叢集中使用ack-gpu-exporter
組件時,預設情況下它產生的阿里雲Prometheus監控指標被視為基礎指標,並且是免費的。然而,如果您需要調整監控資料的儲存時間長度,即保留監控資料的時間超過阿里雲為基礎監控服務設定的預設保留期限,這可能會產生額外的費用。關於阿里雲Prometheus的自訂收費策略,請參見計費概述。
操作步驟
請確保ack-arms-prometheus組件版本≥1.1.7、GPU組件≥v2。
說明查看或升級ack-arms-prometheus:在Container Service管理主控台的叢集詳情左側欄單擊 ,在頁面右側搜尋arms,在ack-arms-prometheus卡片中查看或升級版本。
查看或升級GPU組件:在Container Service管理主控台的叢集詳情左側欄單擊 ,在頁面右上方單擊跳轉到Prometheus服務,在大盤列表查看或升級GPU相關的監控大盤版本。
驗證阿里雲Prometheus的GPU監控能力。
部署tensorflow-benchmark應用。
使用以下YAML內容,建立tensorflow-benchmark.yaml檔案。
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark 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=50000 - --batch_size=8 resources: limits: nvidia.com/gpu: 1 #申請1張GPU卡。 workingDir: /root restartPolicy: Never
執行以下命令,在GPU節點上部署tensorflow-benchmark應用。
kubectl apply -f tensorflow-benchmark.yaml
執行以下命令,查看Pod狀態。
kubectl get po
預期輸出:
NAME READY STATUS RESTARTS AGE tensorflow-benchmark-k*** 1/1 Running 0 114s
由預取輸出得到,當前Pod處於
Running
狀態。
查看GPU監控大盤。
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在Prometheus監控頁面,單擊GPU監控頁簽,然後單擊叢集GPU監控-叢集維度頁簽。
從叢集監控大盤中可以看到GPU Pod運行在節點cn-beijing.192.168.10.163上。
單擊叢集GPU監控-節點維度頁簽,選擇gpu_node為cn-beijing.192.168.10.163,查看該節點的GPU詳細資料。