開啟集群GPU監(jiān)控
GPU監(jiān)控2.0基于NVIDIA DCGM構(gòu)建功能強(qiáng)大的GPU監(jiān)控體系。本文介紹如何開啟集群GPU監(jiān)控。
前提條件
已創(chuàng)建托管GPU集群或?qū)S蠫PU集群。具體操作,請(qǐng)參見創(chuàng)建GPU集群或創(chuàng)建專有GPU集群。
已開通ARMS。具體操作,請(qǐng)參見開通ARMS。
背景信息
對(duì)運(yùn)維人員來(lái)說(shuō),實(shí)現(xiàn)對(duì)Kubernetes的大規(guī)模GPU設(shè)備可監(jiān)測(cè)能力至關(guān)重要。通過(guò)監(jiān)測(cè)GPU相關(guān)指標(biāo)能夠了解整個(gè)集群的GPU使用情況、健康狀態(tài)、工作負(fù)載性能等,從而實(shí)現(xiàn)對(duì)異常問(wèn)題的快速診斷、優(yōu)化GPU資源的分配、提升資源利用率等。除運(yùn)維人員以外,其他人員(例如數(shù)據(jù)科學(xué)家、AI算法工程師等)也能通過(guò)相關(guān)監(jiān)控指標(biāo)了解業(yè)務(wù)的GPU使用情況,以便進(jìn)行容量規(guī)劃和任務(wù)調(diào)度。
GPU監(jiān)控1.0版本基于NVML(NVIDIA Management Library)庫(kù)獲取GPU指標(biāo),并通過(guò)Prometheus和Grafana將指標(biāo)透?jìng)鹘o用戶,便于用戶監(jiān)控集群GPU資源的使用情況。但是,隨著新一代NVIDIA GPU的發(fā)行,內(nèi)部構(gòu)造更加復(fù)雜,用戶的使用場(chǎng)景也更加多樣,GPU監(jiān)控1.0對(duì)GPU的監(jiān)控指標(biāo)已經(jīng)不能完全滿足用戶的需求。
新一代NVIDIA支持使用數(shù)據(jù)中心GPU管理器DCGM(Data Center GPU Manager)來(lái)管理大規(guī)模集群中的GPU,GPU監(jiān)控2.0基于NVIDIA DCGM構(gòu)建功能更強(qiáng)大的GPU監(jiān)控體系。DCGM提供了種類豐富的GPU監(jiān)控指標(biāo),有如下功能特性:
GPU行為監(jiān)控
GPU配置管理
GPU Policy管理
GPU健康診斷
GPU級(jí)別統(tǒng)計(jì)和線程級(jí)別統(tǒng)計(jì)
NVSwitch配置和監(jiān)控
使用限制
節(jié)點(diǎn)NVIDIA GPU驅(qū)動(dòng)版本≥418.87.01。如果您需要進(jìn)行GPU Profiling,則節(jié)點(diǎn)NVIDIA GPU驅(qū)動(dòng)版本≥450.80.02。關(guān)于GPU Profiling的更多信息,請(qǐng)參見Feature Overview。
說(shuō)明目前使用的DCGM版本為2.3.6,該版本的DCGM在5XX系列的NVIDIA GPU驅(qū)動(dòng)上工作存在一些問(wèn)題,具體請(qǐng)參見dcgm-exporter collects metrics incorrectly?。
您可以通過(guò)SSH登錄GPU節(jié)點(diǎn),執(zhí)行
nvidia-smi
命令,查看安裝的GPU驅(qū)動(dòng)版本。更多信息,請(qǐng)參見通過(guò)SSH連接ACK專有集群的Master節(jié)點(diǎn)。
不支持對(duì)NVIDIA MIG進(jìn)行監(jiān)控。
注意事項(xiàng)
當(dāng)前DCGM可能會(huì)存在內(nèi)存泄漏的問(wèn)題,已通過(guò)為Exporter所在的Pod設(shè)置resources.limits
來(lái)規(guī)避這個(gè)問(wèn)題。當(dāng)內(nèi)存使用達(dá)到Limits限制時(shí),Exporter會(huì)重啟(一般一個(gè)月左右重啟一次),重啟后正常上報(bào)指標(biāo),在重啟后的幾分鐘內(nèi),Grafana可能會(huì)出現(xiàn)某些指標(biāo)的顯示異常(例如節(jié)點(diǎn)數(shù)突然變多),之后恢復(fù)正常。問(wèn)題詳情請(qǐng)參見The DCGM has a memory leak?。
費(fèi)用說(shuō)明
在ACK集群中使用ack-gpu-exporter
組件時(shí),默認(rèn)情況下它產(chǎn)生的阿里云Prometheus監(jiān)控指標(biāo)被視為基礎(chǔ)指標(biāo),并且是免費(fèi)的。然而,如果您需要調(diào)整監(jiān)控?cái)?shù)據(jù)的存儲(chǔ)時(shí)長(zhǎng),即保留監(jiān)控?cái)?shù)據(jù)的時(shí)間超過(guò)阿里云為基礎(chǔ)監(jiān)控服務(wù)設(shè)定的默認(rèn)保留期限,這可能會(huì)產(chǎn)生額外的費(fèi)用。關(guān)于阿里云Prometheus的自定義收費(fèi)策略,請(qǐng)參見計(jì)費(fèi)概述。
操作步驟
請(qǐng)確保ack-arms-prometheus組件版本≥1.1.7、GPU組件≥v2。
說(shuō)明查看或升級(jí)ack-arms-prometheus:在容器服務(wù)管理控制臺(tái)的集群詳情左側(cè)欄單擊 ,在頁(yè)面右側(cè)搜索arms,在ack-arms-prometheus卡片中查看或升級(jí)版本。
查看或升級(jí)GPU組件:在容器服務(wù)管理控制臺(tái)的集群詳情左側(cè)欄單擊 ,在頁(yè)面右上方單擊跳轉(zhuǎn)到Prometheus服務(wù),在大盤列表查看或升級(jí)GPU相關(guān)的監(jiān)控大盤版本。
驗(yàn)證阿里云Prometheus的GPU監(jiān)控能力。
部署tensorflow-benchmark應(yīng)用。
使用以下YAML內(nèi)容,創(chuàng)建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 #申請(qǐng)1張GPU卡。 workingDir: /root restartPolicy: Never
執(zhí)行以下命令,在GPU節(jié)點(diǎn)上部署tensorflow-benchmark應(yīng)用。
kubectl apply -f tensorflow-benchmark.yaml
執(zhí)行以下命令,查看Pod狀態(tài)。
kubectl get po
預(yù)期輸出:
NAME READY STATUS RESTARTS AGE tensorflow-benchmark-k*** 1/1 Running 0 114s
由預(yù)取輸出得到,當(dāng)前Pod處于
Running
狀態(tài)。
查看GPU監(jiān)控大盤。
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄單擊集群。
在集群列表頁(yè)面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇
。在Prometheus監(jiān)控頁(yè)面,單擊GPU監(jiān)控頁(yè)簽,然后單擊集群GPU監(jiān)控-集群維度頁(yè)簽。
從集群監(jiān)控大盤中可以看到GPU Pod運(yùn)行在節(jié)點(diǎn)cn-beijing.192.168.10.163上。
單擊集群GPU監(jiān)控-節(jié)點(diǎn)維度頁(yè)簽,選擇gpu_node為cn-beijing.192.168.10.163,查看該節(jié)點(diǎn)的GPU詳細(xì)信息。