本文介紹如何正確安裝、配置和使用ACK GPU異常檢測組件,以便更好地管理和維護ACK環境中的GPU資源。通過本文內容,您可以瞭解如何監測GPU資源的健康狀態,提高叢集的可靠性和效率。
前提條件
已安裝ack-node-problem-detector(NPD),且組件版本為1.2.24及以上。
0.17.0及以上版本的ack-nvidia-device-plugin與1.2.24及以上版本的NPD搭配使用時,當NPD檢測到GPU異常時,將自動隔離GPU卡,當NPD檢測到GPU恢複正常後,將自動解除GPU卡的隔離。
關於如何查看ack-nvidia-device-plugin組件版本以及升級組件,請參見查看NVIDIA Device Plugin版本。
ack-node-problem-detector(NPD)是ACK基於社區開源專案node-problem-detector改造和增強叢集節點例外狀況事件監控組件,提供豐富的GPU異常檢測項以增強GPU情境的異常發現能力。發現對應的異常時,組件會根據異常類型產生相應的Kubernetes Event或Kubernetes Node Condition。
注意事項
NVIDIA的XID和SXID是GPU驅動通過NVRM事件機制寫入
/var/log/messages或/var/log/syslog中。NPD會記錄每個XID和SXID是否已被處理,如果在發現XID或SXID後,只要對節點進行重啟操作,不管這條XID或SXID所對應的問題是否已被解決(例如XID 79指明需要更換GPU裝置才能解決問題),NPD將不會對這條XID或SXID產生Event或Node Condition,即NPD認為這條XID已被解決。NPD檢測NVIDIA XID或者NVIDIA SXID是通過檢測節點
/var/log/messages檔案或/var/log/syslog檔案完成的。如果dmesg日誌被重新導向到其他檔案,NPD將無法檢測NVIDIA XID和SXID當節點上的GPU出現異常時,ACK具備自動隔離異常GPU的能力,以防止新的任務被調度到異常裝置上。自動隔離並不會使GPU狀態恢複至正常,您仍需根據具體異常類型選擇手動重啟節點或進行硬體維修。開啟自動隔離可能會導致一些與您期望不一致的行為,例如:8卡任務因為一張卡出現問題後無法正常調度。以下方式可關閉異常GPU自動隔離:
升級NPD組件版本:從NPD 1.2.29版本開始,NPD GPU檢測外掛程式預設關閉自動隔離異常GPU裝置的功能。
手動關閉自動隔離:詳細操作步驟,請參考如何關閉NPD的異常GPU卡自動隔離能力。
NVIDIA Device Plugin組件在特定版本支援異常GPU卡自動隔離,但關閉隔離能力操作方式不同。詳細操作,請參見如何關閉NVIDIA Device Plugin原生GPU隔離能力。
從NPD 1.2.29版本開始,NPD中GPU異常檢測外掛程式將單獨以DaemonSet方式部署,DaemonSet名稱為ack-accel-health-monitor。
某些情況下,當節點出現GPU異常後,可能會導致節點上無法建立GPU容器,GPU異常檢測容器可能受到影響,導致該容器無法建立,繼而檢測工作無法正常執行。
由於NPD GPU檢測外掛程式Pod需要檢測GPU裝置和GPU組件狀態,需要開啟
privileged=true等高許可權,具體參考下表。叢集RBAC許可權
容器許可權
Node: get
Node/Status: update
Events: create
privileged: true唯讀掛載宿主機
/dev/kmsg唯讀掛載宿主機
/usr/lib唯讀掛載宿主機
/etc唯讀掛載宿主機
/usr/lib64唯讀掛載宿主機
/proc
檢測項及修複建議
修複建議為None表示無需對硬體採取任何操作。建議自行檢查應用配置是否正常。
檢測項名稱 | 是否產生Node Condition | 是否產生Event | 描述 | 是否預設隔離GPU卡 | 修複建議 |
NvidiaXID13Error | 否 | 是
|
| 否 | None |
NvidiaXID31Error | 否 | 是
|
| 否 | None |
NvidiaXID43Error | 否 | 是
|
| 否 | None |
NvidiaXID45Error | 否 | 是
|
| 否 | None |
NvidiaXID48Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID63Error | 否 | 是
|
| 否 | None |
NvidiaXID64Error | 否 | 是
|
| 否 | None |
NvidiaXID74Error | 是
| 是
|
| 是 | 硬體維修。 |
NvidiaXID79Error | 是
| 是
|
| 是 | 硬體維修。 |
NvidiaXID94Error | 否 | 是
|
| 否 | None |
NvidiaXID95Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID119Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID120Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID140Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaEccModeNotEnabled | 是
| 是(持續產生事件,直到問題修複)
| 節點ECC Mode未開啟。 | 否 | 開啟ECC Mode並重啟節點。 |
NvidiaPendingRetiredPages | 是
| 是(持續產生事件,直到問題修複)
|
| 是 | 重啟節點。 |
NvidiaRemappingRowsFailed | 是
| 是(持續產生事件,直到問題修複)
| GPU存在行重新對應失敗。 | 是 | 硬體維修。 |
NvidiaRemappingRowsRequireReset | 是
| 是(持續產生事件,直到問題修複)
| GPU遇到了無法糾正的、未包含的錯誤,需要通過重設GPU進行恢複。為了恢複操作,應該儘快重設GPU。 | 是 | 重啟節點。 |
NvidiaDeviceLost | 是
| 是(持續產生事件,直到問題修複)
|
| 是 | 硬體維修。 |
NvidiaInfoRomCorrupted | 是
| 是(持續產生事件,直到問題修複)
|
| 是 | 硬體維修。 |
NvidiaPowerCableErr | 是
| 是(持續產生事件,直到問題修複)
|
| 是 | 硬體維修。 |
NvidiaXID44Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID61Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID62Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID69Error | 是
| 是
|
| 是 | 重啟節點。 |
NvidiaXID[code]Error | 否 | 是(僅產生三次事件)
| 未出現在該表中的其他XID。 | 否 | 提交工單。 |
NvidiaSXID[code]Error | 否 | 是(僅產生三次事件)
|
| 否 | None |
其他相關Event
獨佔GPU情境下,NPD預設會根據異常檢測項自動進行GPU卡的隔離。隔離後,新的GPU應用Pod不會被分配至該GPU卡。您可查看Kubernetes Node上報的Resource中的nvidia.com/gpu數量以查看隔離效果。等待GPU卡恢複後,ACK會自動解除隔離。
觸發原因 | Event內容 | 描述 |
GPU卡隔離 | 是
| GPU卡因檢測出的異常被隔離。 |
GPU卡解除隔離 | 是
| GPU卡異常恢複,解除卡隔離。 |
常見問題
如何關閉NPD的異常GPU卡自動隔離能力?
以下關閉NPD的GPU隔離能力為臨時方案,升級NPD版本後配置會丟失。您可在升級後按照以下步驟重新設定。
問題背景
當節點 GPU 出現異常時,ACK 會通過NPD自動隔離異常GPU,防止任務被調度到異常GPU上。而自動隔離並不會執行自動修複,您仍需手動重啟或維修節點,並建議配置 GPU 異常警示以便及時處理。
隔離後,若節點剩餘 GPU 不足以滿足任務需求(如 8 卡任務在僅有 7 卡可用時),任務將無法調度,可能導致GPU資源閑置。
GPU狀態恢複正常後,對該GPU裝置的隔離會自動解除。
如需關閉自動隔離(出現異常GPU仍然上報資源,不做異常GPU隔離),請參考後續解決方案。
解決方案
關閉NPD的GPU自動隔離能力。
1.2.24及以上且1.2.28以下組件版本
編輯NPD組件YAML。
kubectl edit ds -n kube-system ack-node-problem-detector-daemonset修改
EnabledIsolateGPU配置為false。修改前:
--EnabledIsolateGPU=true修改後:
--EnabledIsolateGPU=false
1.2.28及以上組件版本
編輯NPD組件YAML。
kubectl edit ds ack-accel-health-monitor -n kube-system修改
GenerateNvidiaGpuIsolationFile配置為false。修改前:
--GenerateNvidiaGpuIsolationFile=true修改後:
--GenerateNvidiaGpuIsolationFile=false
解除已經產生的GPU卡自動隔離。
針對已經產生的GPU卡自動隔離,可通過登入到發生XID錯誤的節點,刪除
/etc/nvidia-device-plugin/unhealthyDevices.json檔案,來解除該節點上的GPU隔離。為了避免再次被隔離,可以參考上一步操作關閉自動隔離功能。