ACK通過ack-node-problem-detector(簡稱ACK NPD)組件檢測GPU資源健康狀態。當GPU節點出現XID/SXID錯誤等異常時,ACK NPD組件自動檢測異常GPU,配合ACK NVIDIA Device Plugin組件可對異常GPU進行隔離,此時其他正常的GPU可以繼續提供服務,以儘可能減少業務上的損失,提高叢集的可靠性和營運效率。
ack-node-problem-detector(ACK NPD)是ACK基於社區開源專案node-problem-detector改造和增強叢集節點例外狀況事件監控組件,提供豐富的GPU異常檢測項以增強GPU情境的異常發現能力。發現對應的異常時,組件會根據異常類型產生相應的Kubernetes Event及Node Condition。
注意事項
隔離異常 GPU 卡後,若節點上剩餘 GPU 不足以滿足任務需求(如 8 卡任務在僅有 7 卡可用時),任務將無法調度,可能導致 GPU 資源閑置。 自動隔離並不等於自動修複,發生 GPU 卡自動隔離的節點執行個體將持續計費,您仍需修複節點,建議配置GPU 異常警示以便及時處理。GPU狀態恢複正常後,對該GPU裝置的隔離會自動解除。
您也可以根據業務需求,開啟/關閉GPU自動隔離。NVIDIA Device Plugin組件在特定版本支援異常GPU卡自動隔離,但關閉隔離能力操作方式不同。詳細操作,請參見 如何關閉NVIDIA Device Plugin原生GPU隔離能力。
NVIDIA的XID和SXID是由GPU驅動通過NVRM事件機制寫入
/var/log/messages或/var/log/syslog中。ACK NPD會記錄每個XID和SXID是否已被處理,如果在發現XID或SXID後,只要對節點進行重啟操作,不管這條XID或SXID所對應的問題是否已被解決(例如XID 79指明需要更換GPU裝置才能解決問題),ACK NPD將不會對這條XID或SXID產生Event或Node Condition,即ACK NPD認為這條XID已被解決。ACK NPD檢測NVIDIA XID或者NVIDIA SXID是通過檢測節點
/var/log/messages檔案或/var/log/syslog檔案完成的。如果dmesg日誌被重新導向到其他檔案,ACK NPD將無法檢測NVIDIA XID和SXID。從ACK NPD 1.2.29版本開始,ACK NPD中GPU異常檢測外掛程式將單獨以DaemonSet方式部署,DaemonSet名稱為ack-accel-health-monitor。
某些情況下,當節點出現GPU異常後,可能會導致節點上無法建立GPU容器,GPU異常檢測容器可能受到影響,導致該容器無法建立,繼而檢測工作無法正常執行。
由於ACK 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自動隔離機制
自 ACK Node Problem Detector(ACK NPD)組件 1.2.35 版本及ACK NVIDIA Device Plugin組件 0.7.0 版本起,GPU 自動隔離的觸發方式將由預設觸發調整為按配置觸發。更多詳細內容,請參見【產品變更】關於GPU自動隔離功能變更的公告。
舊版機制(預設觸發)
ACK NPD組件檢測到GPU異常時,產生GPU隔離檔案,ACK NVIDIA Device Plugin組件將該檔案中列出的所有 GPU 裝置隔離,即預設在檢測到特定異常後自動隔離GPU,使用者可通過配置是否產生NVIDIA GPU 隔離檔案,控制自動隔離功能的啟停。
新版機制(按配置觸發)
ACK NPD組件檢測到GPU異常時,產生異常檢測報告,由 ACK NVIDIA Device Plugin 組件根據異常檢測報告及使用者配置的觸發 GPU 自動隔離的NPD檢查項決定是否隔離GPU,ACK NVIDIA Device Plugin組件預設未配置任何觸發隔離的檢測項,即預設不會觸發GPU自動隔離,使用者可通過配置觸發隔離的檢測項,定義在檢測到哪些異常後自動隔離異常GPU。
關於兩種機制的適用範圍,請參見GPU自動隔離行為。
為相容舊版隔離機制,ACK NPD組件新版本仍會保留產生舊格式GPU隔離檔案的行為,但新版 ACK NVIDIA Device Plugin組件已不再讀取該檔案,相關隔離行為完全由其自身的配置決定。
GPU自動隔離行為
新版機制僅適用於 Kubernetes 1.32 及以上版本 的 ACK 叢集。
對於 Kubernetes 1.32 以下版本的叢集,仍按照舊版機制執行 GPU 自動隔離。
不同組件版本組合下,GPU 自動隔離行為如下:
ACK NPD 版本 | ACK NVIDIA Device Plugin 版本 | GPU自動隔離行為 | 開啟/關閉GPU自動隔離方式 |
ACK NPD版本 < 1.2.24 | N/A | 不具備 GPU 異常檢測能力。 | N/A |
ACK NPD版本 ≥ 1.2.24 | ACK NVIDIA Device Plugin 版本 < 0.7.0 | 按舊版機制執行隔離行為。 | 按舊版方式操作。 |
1.2.24 ≤ ACK NPD版本 <1.2.35 | ACK NVIDIA Device Plugin 版本 ≥ 0.7.0 | GPU自動隔離功能不生效,其他功能正常。 由於低版本 ACK NPD 不輸出異常檢測報告,新版 ACK NVIDIA Device Plugin 無法擷取異常 GPU 資訊,因此不會執行自動隔離。 | N/A 建議升級ACK NPD至最新版本,使用新版機制 |
ACK NPD版本 ≥ 1.2.35 灰階發布中,請提交工單申請白名單 | ACK NVIDIA Device Plugin 版本 ≥ 0.7.0 灰階發布中,請提交工單申請白名單 | 按新版機制執行隔離行為。 | 按新版方式操作。 |
關於如何查看ACK NPD和ACK NVIDIA Device Plugin組件版本以及升級組件,請參見查看/升級ACK NPD版本和查看/升級NVIDIA Device Plugin版本。
開啟/關閉GPU自動隔離
關閉GPU自動隔離或者GPU自動隔離功能不生效時,隻影響是否自動隔離GPU卡。即當ACK NPD檢測到GPU異常後,仍會根據ACK NPD檢查項觸發Node Condition、Kubernetes Event及警示,但不會自動隔離異常GPU。
新版方式
開啟後當觸發ACK NPD檢查項時,將自動隔離異常 GPU 卡。自動隔離並不等於自動修複,發生 GPU 卡自動隔離的節點執行個體將持續計費,您仍需修複節點,建議配置GPU 異常警示以便及時處理;若未選擇任何檢查項,則不會自動隔離。
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在組件管理頁面,搜尋ack-nvidia-device-plugin組件,在其卡片位置單擊配置。
在彈出的對話方塊中,開啟或關閉GPU自動隔離。
開啟:勾選啟用 GPU 自動隔離,並選擇觸發 GPU 自動隔離的NPD檢查項。
關閉:取消勾選啟用 GPU 自動隔離,或者不配置檢查項。
舊版方式
當檢測到 GPU 異常時,ack-node-problem-detector 組件將按照預設隔離策略產生 NVIDIA GPU 隔離檔案,ack-nvidia-device-plugin 組件將根據該檔案內容自動隔離異常 GPU 卡,以避免新的負載調度到異常 GPU 後無法正常運行,其他正常的 GPU 可以繼續提供服務。而自動隔離並不會執行自動修複,發生 GPU 卡自動隔離的節點執行個體將持續計費,您仍需手動重啟或維修節點,並建議配置GPU 異常警示以便及時處理。
當 ack-node-problem-detector組件版本為 v1.2.30 及以上時,支援通過組件管理中的配置項
generateNvidiaGpuIsolationFile控制是否自動隔離異常 GPU。當組件升級後,請結合GPU自動隔離行為判斷新組件版本對應的開啟/關閉GPU自動隔離的操作方式。
開啟:舊版機制預設觸發GPU自動隔離,可通過將
generateNvidiaGpuIsolationFile(1.2.30 及以上版本)或EnabledIsolateGPU(1.2.24至1.2.29版本)設定為true重新開啟。關閉:
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,單擊組件管理。
在日誌與監控頁簽,尋找ack-node-problem-detector組件,然後根據當前組件版本執行對應操作。
1.2.24 至 1.2.29 版本:請升級至最新版本。
1.2.30 及以上版本:請單擊配置。
在組件升級或組件配置介面中,將
generateNvidiaGpuIsolationFile(是否產生NVIDIA GPU 隔離檔案)設定為false,然後單擊確認。說明若您此前在1.2.24至1.2.29版本通過修改
ack-node-problem-detector-daemonset的EnabledIsolateGPU配置為false臨時關閉了GPU自動隔離功能,在升級ACK NPD組件版本時該關閉配置會自動保留。如果您在關閉後希望重新開啟GPU卡自動隔離功能,可將generateNvidiaGpuIsolationFile設定為true。
針對已經產生的GPU卡自動隔離,可通過登入到發生XID錯誤的節點,刪除
/etc/nvidia-device-plugin/unhealthyDevices.json檔案,來解除該節點上的GPU隔離。為了避免再次被隔離,可以參考上一步操作關閉自動隔離功能。
檢測項及修複建議
發現GPU異常後,請參照 Nvidia Xid Errors進行修複。也可根據節點執行個體類型(如ECS、靈駿)在對應雲產品控制台查詢是否存在節點執行個體的營運事件,或者通過自主診斷工具對節點硬體異常進行排查。
下表中是否自動隔離GPU卡為舊版機制的預設隔離行為,新版本機制將按照使用者自訂配置決定是否自動隔離,詳細內容請參見GPU自動隔離機制。
其他相關Event
獨佔GPU情境下,舊版機制下預設自動隔離異常GPU,新版機制下需在組件管理中配置觸發項。隔離後,新的GPU應用Pod不會被分配至該GPU卡。您可查看Kubernetes Node上報的Resource中的nvidia.com/gpu數量以查看隔離效果。等待GPU卡恢複後,ACK會自動解除隔離。
觸發原因 | Event內容 | 描述 |
GPU卡隔離 | 是
| GPU卡因檢測出的異常被隔離。 |
GPU卡解除隔離 | 是
| GPU卡異常恢複,解除卡隔離。 |