ACK通過ack-node-problem-detector(NPD)組件監測GPU資源的健康狀態。當GPU節點出現XID/SXID錯誤等異常時,NPD組件自動檢測並隔離異常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。
注意事項
-
當檢測到 GPU 異常時,ack-node-problem-detector 組件將按照預設隔離策略產生 NVIDIA GPU 隔離檔案,ack-nvidia-device-plugin 組件將根據該檔案內容自動隔離異常 GPU 卡,以避免新的負載調度到異常 GPU 後無法正常運行,其他正常的 GPU 可以繼續提供服務。隔離異常 GPU 卡後,若節點上剩餘 GPU 不足以滿足任務需求(如 8 卡任務在僅有 7 卡可用時),任務將無法調度,可能導致 GPU 資源閑置。 自動隔離並不等於自動修複,發生 GPU 卡自動隔離的節點執行個體將持續計費,您仍需修複節點,建議配置 GPU 異常警示以便及時處理 。
您也可以根據業務需求,關閉異常GPU自動隔離功能。詳細操作步驟,請參考 如何關閉NPD的異常GPU卡自動隔離能力 。NVIDIA Device Plugin組件在特定版本支援異常GPU卡自動隔離,但關閉隔離能力操作方式不同。詳細操作,請參見 如何關閉NVIDIA Device Plugin原生GPU隔離能力 。
-
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。 -
從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
檢測項及修複建議
發現GPU異常後,請參照 Nvidia Xid Errors 進行修複。也可根據節點執行個體類型(如ECS、靈駿)在對應雲產品控制台查詢是否存在節點執行個體的營運事件,或者通過自主診斷工具對節點硬體異常進行排查。
修複建議 為 None 表示無需對硬體採取任何操作,建議自行檢查應用配置是否正常 。
|
檢測項名稱 |
是否產生Node Condition |
是否產生Event |
描述 |
是否預設隔離GPU卡 |
修複建議 |
|
NvidiaXID13Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID31Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID43Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID44Error |
是
|
是
|
|
是(NPD <= 1.2.28) |
重啟節點。 |
|
NvidiaXID45Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID48Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID61Error |
是
|
是
|
|
是(NPD <= 1.2.28) |
重啟節點。 |
|
NvidiaXID62Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID63Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID64Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID69Error |
是
|
是
|
|
是(NPD <= 1.2.28) |
重啟節點。 |
|
NvidiaXID74Error |
是
|
是
|
|
是 |
硬體維修。 |
|
NvidiaXID79Error |
是
|
是
|
|
是 |
硬體維修。 |
|
NvidiaXID94Error |
否 |
是
|
|
否 |
None |
|
NvidiaXID95Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID109Error |
是
|
是
|
|
是(NPD <= 1.2.28) |
None |
|
NvidiaXID119Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID120Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID140Error |
是
|
是
|
|
是 |
重啟節點。 |
|
NvidiaXID[code]Error |
否 |
是(僅產生三次事件)
|
未出現在該表中的其他XID。 |
否 |
提交工單。 |
|
NvidiaSXID[code]Error |
否 |
是(僅產生三次事件)
|
|
否 |
None |
|
NvidiaEccModeNotEnabled |
是
|
是(持續產生事件,直到問題修複)
|
節點ECC Mode未開啟。 |
否 |
開啟ECC Mode並重啟節點。 |
|
NvidiaPendingRetiredPages |
是
|
是(持續產生事件,直到問題修複)
|
|
是 |
重啟節點。 |
|
NvidiaRemappingRowsFailed |
是
|
是(持續產生事件,直到問題修複)
|
GPU存在行重新對應失敗。 |
是 |
硬體維修。 |
|
NvidiaRemappingRowsRequireReset |
是
|
是(持續產生事件,直到問題修複)
|
GPU遇到了無法糾正的、未包含的錯誤,需要通過重設GPU進行恢複。為了恢複操作,應該儘快重設GPU。 |
是(NPD <= 1.2.28) |
重啟節點。 |
|
NvidiaDeviceLost |
是
|
是(持續產生事件,直到問題修複)
|
|
是 |
硬體維修。 |
|
NvidiaInfoRomCorrupted |
是
|
是(持續產生事件,直到問題修複)
|
|
是 |
硬體維修。 |
|
NvidiaPowerCableErr |
是
|
是(持續產生事件,直到問題修複)
|
|
是 |
硬體維修。 |
|
NvidiaPersistencedOffline |
是
|
是
|
NVIDIA Persistenced服務未運行。 |
否 |
重啟nvidia-persistenced服務。 |
|
NvidiaFabricManagerOffline |
是
|
是
|
NVIDIA Fabric Manager服務未運行。 |
否 |
重啟Fabric Manager服務。 |
|
NvidiaTemperatureHigh |
是
|
是
|
GPU溫度過高超過100攝氏度。 |
否 |
None |
|
NvidiaNVLinkStateErr |
是
|
是
|
NVIDIA NVLink狀態變成down。 |
否 |
重啟機器。 |
其他相關Event
獨佔GPU情境下,NPD預設會根據異常檢測項自動進行GPU卡的隔離。隔離後,新的GPU應用Pod不會被分配至該GPU卡。您可查看Kubernetes Node上報的Resource中的nvidia.com/gpu數量以查看隔離效果。等待GPU卡恢複後,ACK會自動解除隔離。
|
觸發原因 |
Event內容 |
描述 |
|
GPU卡隔離 |
是
|
GPU卡因檢測出的異常被隔離。 |
|
GPU卡解除隔離 |
是
|
GPU卡異常恢複,解除卡隔離。 |
常見問題
如何關閉NPD的異常GPU卡自動隔離能力?
問題背景
當節點 GPU 出現異常時,ACK 會通過NPD自動隔離異常GPU,防止任務被調度到異常GPU上。而自動隔離並不會執行自動修複,發生 GPU 卡自動隔離的節點執行個體將持續計費,您仍需手動重啟或維修節點,並建議配置 GPU 異常警示以便及時處理。
-
隔離後,若節點剩餘 GPU 不足以滿足任務需求(如 8 卡任務在僅有 7 卡可用時),任務將無法調度,可能導致GPU資源閑置。
-
GPU狀態恢複正常後,對該GPU裝置的隔離會自動解除。
-
如需關閉自動隔離(出現異常GPU仍然上報資源,不做異常GPU隔離),請參考後續解決方案。
解決方案
當 ack-node-problem-detector組件版本為 v1.2.30 及以上時,支援通過組件管理中的配置項 generateNvidiaGpuIsolationFile 控制是否自動隔離異常 GPU。
-
關閉NPD的GPU自動隔離能力。
-
(推薦)方式一:通過組件管理修改組件配置。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
-
在日誌與監控頁簽,尋找ack-node-problem-detector組件,然後根據當前組件版本執行對應操作。
-
1.2.24 至 1.2.29 版本:查看可升級到的版本,若可升級到1.2.30及以上版本,請單擊升級。
1.2.30版本正在灰階中,若您看不到 v1.2.30 或更高版本,請提交工單申請。
-
1.2.30 及以上版本:請單擊配置。
-
-
在組件升級或組件配置介面中,將
generateNvidiaGpuIsolationFile(是否產生NVIDIA GPU 隔離檔案)設定為false,然後單擊確認。說明若您此前通過方式二臨時關閉了 GPU 自動隔離功能,在升級NPD組件版本時該關閉配置會自動保留。如果您在關閉後希望重新開啟GPU卡自動隔離功能,可將
generateNvidiaGpuIsolationFile設定為true。
-
-
方式二:通過YAML手動修改配置。
說明以下關閉NPD的GPU自動隔離能力為臨時方案,NPD升級到1.2.30以下版本後配置會丟失,您需在升級後按照以下步驟重新設定。建議您升級到1.2.30及以上版本以持久化該組件配置。
-
編輯NPD組件YAML。
kubectl edit ds -n kube-system ack-node-problem-detector-daemonset -
修改
EnabledIsolateGPU配置為false。修改前:
--EnabledIsolateGPU=true修改後:
--EnabledIsolateGPU=false
-
-
-
解除已經產生的GPU卡自動隔離。
針對已經產生的GPU卡自動隔離,可通過登入到發生XID錯誤的節點,刪除
/etc/nvidia-device-plugin/unhealthyDevices.json檔案,來解除該節點上的GPU隔離。為了避免再次被隔離,可以參考上一步操作關閉自動隔離功能。