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隔離。為了避免再次被隔離,可以參考上一步操作關閉自動隔離功能。