全部產品
Search
文件中心

Container Service for Kubernetes:GPU異常檢測與自動隔離

更新時間:Dec 04, 2025

本文介紹如何正確安裝、配置和使用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 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

  • Type: Warning

  • Reason: NvidiaXID13Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 13 error has occurred.

  • Graphics Engine Exception.

  • 通常是數組越界、指令錯誤,小機率是硬體問題。

None

NvidiaXID31Error

  • Type: Warning

  • Reason: NvidiaXID31Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 31 error has occurred.

  • GPU memory page fault.

  • 通常是應用程式的非法地址訪問,小機率是驅動或者硬體問題。

None

NvidiaXID43Error

  • Type: Warning

  • Reason: NvidiaXID43Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 43 error has occurred.

  • GPU stopped processing.

  • 當您的應用程式遇到軟體誘發的異常並必須終止時,會記錄此事件。GPU仍然處於健康狀態。

  • 在大多數情況下,這並不表示驅動程式存在問題,而是您的應用程式出錯。

None

NvidiaXID45Error

  • Type: Warning

  • Reason: NvidiaXID45Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 45 error has occurred.

  • Preemptive cleanup, due to previous errors - Most likely to see when running multiple cuda applications and hitting a DBE.

  • 當您的應用程式中止並且核心驅動程式終止在GPU上啟動並執行GPU應用程式時,會記錄此事件。

  • Control-C、GPU重設和sigkill都是應用程式被中止並建立此事件的樣本。

  • 在許多情況下,這並不表示存在錯誤,而是您或系統的操作導致。

None

NvidiaXID48Error

  • Type: NvidiaXID48Error

  • Reason: NodeHasNvidiaXID48Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 48 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID48Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 48 error has occurred.

  • Double Bit ECC Error(DBE).

  • 當GPU檢測到不可糾正的錯誤發生時,會記錄此事件。這一情況也會反饋給應用程式。需要GPU重設或重啟節點才能清除此錯誤。

重啟節點。

NvidiaXID63Error

  • Type: Warning

  • Reason: NvidiaXID63Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 63 error has occurred.

  • ECC page retirement or row remapping recording event.

  • 當應用程式遭遇到GPU顯存硬體錯誤時,NVIDIA自錯誤修正機制會將錯誤的記憶體地區retire或者remap,retirement和remapped資訊需要記錄到infoROM中才能永久生效。

  • Volta架構:記錄ECC page retirement事件到infoROM成功。

  • Ampere架構:記錄row remapping事件到infoROM成功。

None

NvidiaXID64Error

  • Type: Warning

  • Reason: NvidiaXID64Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 64 error has occurred.

  • ECC page retirement or row remapper recording failure.

  • 與Xid 63的觸發情境類似,只是Xid 63代表retirement和remapped資訊成功記錄到infoROM,Xid 64代表該記錄操作失敗。

None

NvidiaXID74Error

  • Type: NvidiaXID74Error

  • Reason: NodeHasNvidiaXID74Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 74 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID74Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 74 error has occurred.

  • Fatal NVLINK Error.

  • NVLink硬體錯誤產生的Xid,收到此事件說明GPU已經出現嚴重硬體故障,需要下線維修。

硬體維修。

NvidiaXID79Error

  • Type: NvidiaXID79Error

  • Reason: NodeHasNvidiaXID79Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 79 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID79Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 79 error has occurred.

  • GPU has fallen off the bus.

  • GPU硬體檢測到掉卡,無法從匯流排上檢測到。收到此事件說明GPU已經出現嚴重硬體故障,需要下線維修。

硬體維修。

NvidiaXID94Error

  • Type: Warning

  • Reason: NvidiaXID94Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 94 error has occurred.

  • Contained ECC error.

  • 當應用程式遭遇到GPU不可糾正的顯存ECC錯誤時,NVIDIA錯誤抑制(contained)機制會嘗試將錯誤抑制在當前已出現問題的應用程式中,而不會讓錯誤影響GPU上的所有應用程式。當抑制機製成功抑制錯誤時,會產生Xid 94事件,僅影響遭遇了不可糾正ECC錯誤的應用程式。

None

NvidiaXID95Error

  • Type: NvidiaXID95Error

  • Reason: NodeHasNvidiaXID95Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 95 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID95Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 95 error has occurred.

  • Uncontained ECC error.

  • Xid95代表抑制失敗,此時表明運行在該GPU上的所有應用程式都已受到影響,受影響的GPU必須重設後,應用程式才能重新啟動。

重啟節點。

NvidiaXID119Error

  • Type: NvidiaXID119Error

  • Reason: NodeHasNvidiaXID119Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 119 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID119Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 119 error has occurred.

  • GSP RPC Timeout.

  • 在等待GSP核心響應RPC訊息時發生逾時。

重啟節點。

NvidiaXID120Error

  • Type: NvidiaXID120Error

  • Reason: NodeHasNvidiaXID120Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 120 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID120Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 120 error has occurred.

  • GSP Error.

  • 在GPU的GSP核心上啟動並執行代碼出錯。

重啟節點。

NvidiaXID140Error

  • Type: NvidiaXID140Error

  • Reason: NodeHasNvidiaXID140Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 140 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID140Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 140 error has occurred.

  • Unrecovered ECC Error.

  • 當GPU驅動程式在GPU記憶體中檢測到不可糾正的錯誤,這些錯誤影響了驅動程式標記頁面以進行動態網頁面下線或行重新對應的能力時,可能會發生此事件。需要重設GPU。

重啟節點。

NvidiaEccModeNotEnabled

  • Type: NvidiaEccModeNotEnabled

  • Reason: EccModeNotEnabled

  • Message: GpuIds=xxx;EccModeCurrent=xxx;EccModePending=xxx;MSG=The ECC mode of the GPU is not enabled.

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaEccModeNotEnabled

  • Message: GpuIds=xxx;EccModeCurrent=xxx;EccModePending=xxx;MSG=The ECC mode of the GPU is not enabled.

節點ECC Mode未開啟。

開啟ECC Mode並重啟節點。

NvidiaPendingRetiredPages

  • Type: NvidiaPendingRetiredPages

  • Reason: NodeHasNvidiaPendingRetiredPages

  • Message: GpuIds=xxx;VolatileTotalUncorrected=xxx;AggregateTotalUncorrected=xxx;MSG=There are retired pages in a pending state on the GPU.

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaPendingRetiredPages

  • Message: GpuIds=xxx;VolatileTotalUncorrected=xxx;AggregateTotalUncorrected=xxx;MSG=There are retired pages in a pending state on the GPU.

  • GPU存在處於pending狀態的Retired Pages。

  • 需要重設GPU才能使這些Retired Pages生效。

重啟節點。

NvidiaRemappingRowsFailed

  • Type: NvidiaRemappedRowsFailed

  • Reason: GPUMemoryRemappingRowsFailed

  • Message: GpuIds=xxx;RemappedDueToUncorrectableErrors=xxx;MSG=The GPU has encountered an error with row mapping.

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaRemappedRowsFailed

  • Message: GpuIds=xxx;RemappedDueToUncorrectableErrors=xxx;MSG=The GPU has encountered an error with row mapping.

GPU存在行重新對應失敗。

硬體維修。

NvidiaRemappingRowsRequireReset

  • Type: NvidiaRemappingRowsRequireReset

  • Reason: UncontainedEccError

  • Message: GpuIds=xxx;MSG=Remapping rows requires GPU reset.

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaRemappingRowsRequireReset

  • Message: GpuIds=xxx;MSG=Remapping rows requires GPU reset.

GPU遇到了無法糾正的、未包含的錯誤,需要通過重設GPU進行恢複。為了恢複操作,應該儘快重設GPU。

重啟節點。

NvidiaDeviceLost

  • Type: NvidiaDeviceLost

  • Reason: NodeHasNvidiaDeviceLost

  • Message: GpuIds=xxx;MSG=The GPU has fallen off the bus or has otherwise become inaccessible

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaDeviceLost

  • Message: GpuIds=xxx;MSG=The GPU has fallen off the bus or has otherwise become inaccessible.

  • The GPU has fallen off the bus or has otherwise become inaccessible.

  • GPU已從匯流排上脫落或變得不可訪問。

硬體維修。

NvidiaInfoRomCorrupted

  • Type: NvidiaInfoRomCorrupted

  • Reason: NodeHasNvidiaInfoRomCorrupted

  • Message: GpuIds=xxx;MSG=GPU infoROM is corrupted

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaInfoRomCorrupted

  • Message: GpuIds=xxx;MSG=GPU infoROM is corrupted.

  • infoROM is corrupted.

  • infoROM已損壞。

硬體維修。

NvidiaPowerCableErr

  • Type: NvidiaPowerCableErr

  • Reason: NodeHasNvidiaPowerCableErr

  • Message: GpuIds=xxx;MSG=A device's external power cables are not properly attached

是(持續產生事件,直到問題修複)

  • Type: Warning

  • Reason: NvidiaPowerCableErr

  • Message: GpuIds=xxx;MSG=A device's external power cables are not properly attached.

  • A device's external power cables are not properly attached.

  • 裝置的外部電源線串連不當。

硬體維修。

NvidiaXID44Error

  • Type: NvidiaXID44Error

  • Reason: NodeHasNvidiaXID44Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 44 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID44Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 44 error has occurred.

  • Graphics Engine fault during context switch

  • 通常意味著在GPU上發生了不可糾正的錯誤,並且該錯誤也會報告給使用者應用程式。需要進行GPU重設或節點重啟以清除此錯誤。

重啟節點。

NvidiaXID61Error

  • Type: NvidiaXID61Error

  • Reason: NodeHasNvidiaXID61Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 61 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID61Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 61 error has occurred.

  • Internal micro-controller breakpoint/warning (newer drivers)

  • 通常意味著在GPU上發生了不可糾正的錯誤,並且該錯誤也會報告給使用者應用程式。需要進行GPU重設或節點重啟以清除此錯誤。

重啟節點。

NvidiaXID62Error

  • Type: NvidiaXID62Error

  • Reason: NodeHasNvidiaXID62Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 62 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID62Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 62 error has occurred.

  • Internal micro-controller halt (newer drivers)

  • 這些異常意味著在GPU上發生了不可糾正的錯誤,並且該錯誤也會報告給使用者應用程式。需要進行GPU重設或節點重啟以清除此錯誤。

重啟節點。

NvidiaXID69Error

  • Type: NvidiaXID69Error

  • Reason: NodeHasNvidiaXID69Error

  • Message: TS=xxx;GpuIds=xxx;MSG=An NVIDIA XID 69 error has occurred.

  • Type: Warning

  • Reason: NvidiaXID69Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid 69 error has occurred.

  • Graphics Engine class error

  • 這些異常意味著在GPU上發生了不可糾正的錯誤,並且該錯誤也會報告給使用者應用程式。需要進行GPU重設或節點重啟以清除此錯誤。

重啟節點。

NvidiaXID[code]Error

是(僅產生三次事件)

  • Type: Warning

  • Reason: NvidiaXID[code]Error

  • Message: GpuIds=xxx;TS=xxx;Xid=xxx;MSG=An nvidia xid [code] error has occurred.

未出現在該表中的其他XID。

提交工單

NvidiaSXID[code]Error

是(僅產生三次事件)

  • Type: Warning

  • Reason: NvidiaSXID[code]Error

  • Message: TS=xxx;NVSwitchIds=xxx;MSG=An nvidia sxid [code] error has occurred.

  • SXID錯誤可以分為三類,分別是:

    • Correctable:錯誤已糾正。系統行為不受此類錯誤的影響。無需額外恢複。

    • Fatal:錯誤對裝置來說是致命的,系統行為受到影響,從此錯誤中恢複的唯一方法是重設裝置或重新啟動系統。

    • Non-fatal:錯誤對裝置來說不是致命的,系統行為受到影響,可能不需要重設裝置或重新啟動系統。

None

其他相關Event

獨佔GPU情境下,NPD預設會根據異常檢測項自動進行GPU卡的隔離。隔離後,新的GPU應用Pod不會被分配至該GPU卡。您可查看Kubernetes Node上報的Resource中的nvidia.com/gpu數量以查看隔離效果。等待GPU卡恢複後,ACK會自動解除隔離。

觸發原因

Event內容

描述

GPU卡隔離

  • Type: Warning

  • Reason: NvidiaDeviceIsolated

  • Message: GpuIds=xxx;MSG=nvidia device has been isolated due to detected issues.

GPU卡因檢測出的異常被隔離。

GPU卡解除隔離

  • Type: Normal

  • Reason: NvidiaDeviceRecovered

  • Message: GpuIds=xxx;MSG=nvidia device has recovered from the fault.

GPU卡異常恢複,解除卡隔離。

常見問題

如何關閉NPD的異常GPU卡自動隔離能力?

重要

以下關閉NPD的GPU隔離能力為臨時方案,升級NPD版本後配置會丟失。您可在升級後按照以下步驟重新設定。

問題背景

當節點 GPU 出現異常時,ACK 會通過NPD自動隔離異常GPU,防止任務被調度到異常GPU上。而自動隔離並不會執行自動修複,您仍需手動重啟或維修節點,並建議配置 GPU 異常警示以便及時處理。

  • 隔離後,若節點剩餘 GPU 不足以滿足任務需求(如 8 卡任務在僅有 7 卡可用時),任務將無法調度,可能導致GPU資源閑置。

  • GPU狀態恢複正常後,對該GPU裝置的隔離會自動解除。

  • 如需關閉自動隔離(出現異常GPU仍然上報資源,不做異常GPU隔離),請參考後續解決方案。

解決方案

  1. 關閉NPD的GPU自動隔離能力。

    1.2.24及以上且1.2.28以下組件版本

    1. 編輯NPD組件YAML。

      kubectl edit ds -n kube-system ack-node-problem-detector-daemonset
    2. 修改EnabledIsolateGPU配置為false

      修改前:

       --EnabledIsolateGPU=true

      修改後:

      --EnabledIsolateGPU=false

    1.2.28及以上組件版本

    1. 編輯NPD組件YAML。

      kubectl edit ds ack-accel-health-monitor -n kube-system
    2. 修改GenerateNvidiaGpuIsolationFile配置為false

      修改前:

      --GenerateNvidiaGpuIsolationFile=true

      修改後:

      --GenerateNvidiaGpuIsolationFile=false
  2. 解除已經產生的GPU卡自動隔離。

    針對已經產生的GPU卡自動隔離,可通過登入到發生XID錯誤的節點,刪除/etc/nvidia-device-plugin/unhealthyDevices.json檔案,來解除該節點上的GPU隔離。為了避免再次被隔離,可以參考上一步操作關閉自動隔離功能。