本指南說明如何診斷及解決附加 GPU 的 Compute Engine VM 常見問題,包括硬體錯誤和效能瓶頸。
使用 NVIDIA DCGM 疑難排解 GPU VM 問題
NVIDIA Data Center GPU Manager (DCGM) 是一套工具,可用於管理及監控叢集環境中的 NVIDIA 資料中心 GPU。
如要使用 DCGM 排解 GPU 環境中的問題,請完成下列步驟:
- 請確認您使用的是適用於 VM 所連結 GPU 型號的最新建議 NVIDIA 驅動程式。如要查看驅動程式版本,請參閱建議使用的 NVIDIA 驅動程式版本。
- 確認您已安裝最新版的 DCGM。如要安裝最新版本,請參閱 DCGM 安裝。
診斷問題
執行dcgmi診斷指令時,診斷工具回報的問題會包含解決問題的後續步驟。下列範例顯示 dcgmi diag -r memory -j 指令的可執行輸出內容。
{
........
"category":"Hardware",
"tests":[
{
"name":"GPU Memory",
"results":[
{
"gpu_id":"0",
"info":"GPU 0 Allocated 23376170169
bytes (98.3%)",
"status":"Fail",
""warnings":[
{
"warning":"Pending page
retirements together with a DBE were detected on GPU 0. Drain the GPU and reset it or reboot the node to resolve this issue.",
"error_id":83,
"error_category":10,
"error_severity":6
}
]
}
.........
從上述輸出片段中,您可以看到 GPU 0 有待處理的網頁停用作業,這是由無法復原的錯誤所導致。輸出內容提供專屬 error_id,以及偵錯問題的建議。以這個範例輸出內容來說,建議您排空 GPU 並重新啟動 VM。在大多數情況下,按照輸出內容中這個部分的指示操作,即可解決問題。
排解 A3 VM 的 GPU 效能問題
A3 機器系列可搭配 NVIDIA H200 或 H100 GPU。這個系列包括 A3 Ultra (H200)、A3 Mega (H100)、A3 High (H100) 和 A3 Edge (H100) 機型。
找出故障節點
在多節點 GPU 叢集上進行大規模訓練或基準化工作時,可能會停止回應或效能不佳。通常是因為一或多個節點效能不佳,導致整個作業變慢。本節說明如何執行 NCCL 基準測試或分析 NCCL 記錄,找出有問題的節點或主體機器。
執行 NCCL 基準測試
如要找出導致失敗的節點群組,請使用 NCCL 基準 (例如 all_reduce_perf) 系統性地測試叢集的子集。
- 如要識別節點集,請將節點分組為邏輯集,例如 Slurm 中的分割區。
- 如要建立主機檔案,請為每個節點集分別建立主機檔案,並列出主機名稱和每個節點的 GPU 數量。您指定的時段數量取決於 A3 VM 類型的 GPU 數量。舉例來說,
a3-highgpu-8gVM 有 8 個 GPU,因此您必須指定slots=8。 - 如要執行基準測試,請針對每個節點集個別執行
all_reduce_perf基準測試。mpirun -x LD_LIBRARY_PATH --hostfile HOSTFILE_NAME -n TOTAL_PROCESSES \ ./build/all_reduce_perf -b 1G -e 8G -f 2 -g NUM_GPUS_PER_NODE更改下列內容:
HOSTFILE_NAME:主機檔案的名稱,其中包含節點清單,以及節點集中每個節點的 GPU 數量。TOTAL_PROCESSES:要在節點集的所有主機上啟動的 MPI 程序總數。NUM_GPUS_PER_NODE:每個節點的 GPU 數量。所有 A3 機型的值都是8。
- 如要分析結果,如果工作停止回應或在特定節點集上顯示的匯流排頻寬明顯較低 (
busbw),該節點集可能發生故障。 - 如要細分,如果節點集有問題,請將主機檔案分成兩半,然後重新測試,縮小二分搜尋範圍,直到找出個別行為異常的節點為止。
分析 NCCL 記錄
如果基準測試方法無法找出節點,請分析詳細的 NCCL 記錄。
- 如要啟用偵錯記錄,請在您打算執行工作負載的殼層工作階段中,設定下列環境變數:
export NCCL_DEBUG=INFO export NCCL_DEBUG_SUBSYS=INIT,NET,COLL export NCCL_DEBUG_FILE="LOG_DIRECTORY/nccl_log.%h.%p"將
設定LOG_DIRECTORY替換為您要儲存記錄的目錄。NCCL_DEBUG_FILE和%h和%p會為每個程序建立專屬的非交錯記錄檔。如果您使用
mpirun執行多節點工作負載,請使用-x旗標將這些變數傳播至所有節點。例如:mpirun -x NCCL_DEBUG -x NCCL_DEBUG_SUBSYS -x NCCL_DEBUG_FILE ... - 如要找出第一個錯誤,請使用下列指令,在所有記錄檔中找出最早的逾時或失敗事件:
grep "NCCL WARN.*NET/FasTrak" LOG_DIRECTORY/* | sed 's/.*NET\/FasTrak\(.*\)/\1/g' \ | sort | head -n 20將
LOG_DIRECTORY替換為儲存記錄的目錄。 - 如要計算集體作業,落後節點完成的集體作業較少。計算可疑等級的
"opCount"個項目:grep "opCount" LOG_DIRECTORY/nccl_log.HOSTNAME.PID | wc -l更改下列內容:
LOG_DIRECTORY:儲存記錄的目錄HOSTNAME:節點的主機名稱PID:NCCL 程序的程序 ID
- 如要在工作中止前收集更多記錄資料,請暫時增加資料傳輸逾時時間:
export NCCL_FASTRAK_DATA_TRANSFER_TIMEOUT_MS=3600000
監控 GPU 熱節流
如果 A3 系列 VM 在負載下持續達到超過 87°C 的溫度,效能可能會下降。如要檢查叢集節點的 GPU 熱節流,請使用 nvidia-smi 或 dcgmi。
使用 nvidia-smi
如要檢查節點上所有 GPU 的目前溫度和節流狀態,請執行下列指令:
nvidia-smi --query-gpu=timestamp,name,pci.bus_id,temperature.gpu,clocks_throttle_reasons.hw_slowdown --format=csv
在輸出內容中,clocks_throttle_reasons.hw_slowdown 資料欄中的 Active 值表示 GPU 因溫度過高而受到節流。
使用 dcgmi
NVIDIA Data Center GPU Manager (DCGM) 診斷套件包含熱違規檢查。如要執行第 1 級診斷,請執行下列指令:
dcgmi diag -r 1
如果「Thermal」部分顯示 Warn 或 Fail,表示測試期間發生熱能違規情形。如果熱能違規事項伴隨時脈節流,GPU 可能過熱,需要進一步調查。
Xid 錯誤
建立已附加 GPU 的 VM 後,您必須在 GPU VM 上安裝 NVIDIA 裝置驅動程式,應用程式才能存取 GPU。不過,有時這些驅動程式會傳回錯誤訊息。
Xid 訊息是 NVIDIA 驅動程式的錯誤報告,會列印至 Linux VM 的作業系統核心記錄或事件記錄。這些訊息會放在 /var/log/messages 檔案中。如要進一步瞭解 Xid 訊息 (包括可能原因),請參閱 NVIDIA 說明文件。
Google 如何處理 Xid 錯誤
Google 會使用被動健康狀態檢查評估 GPU 系統。如果系統指出需要更換硬體,Google 會自動啟動緊急維護程序。Google 會偵測 Xid 錯誤,並主動將電腦送修。如果錯誤代碼顯示硬體故障機率很高,例如 Xid 74、79 和 140,部分 Xid 程式碼可能是軟體或硬體問題所致,因此 Google 會使用模式比對來觸發維修,並非每次發生都會自動維修。
Xid 錯誤類型
以下列出三種主要 Xid 錯誤類別,以及建議的復原動作:
應用程式錯誤:表示應用程式程式碼內有問題。 應用程式錯誤包括 Xid (例如 Xid 13、31、94、95 和 137),這些 Xid 表示各種記憶體存取違規行為,類似於區隔錯誤。這些並非 ECC 錯誤。如要排解這些錯誤,NVIDIA 建議使用下列任一偵錯方法:
- 直接偵錯:直接在 cuda-gdb 中執行應用程式,或執行 Compute Sanitizer memcheck 工具。
- 例外狀況後偵錯:使用
CUDA_DEVICE_WAITS_ON_EXCEPTION=1執行應用程式。發生例外狀況時,GPU 驅動程式會凍結應用程式狀態,但不會結束,因此您稍後可以附加偵錯工具 (cuda-gdb -p <PID>) 來檢查即時堆疊追蹤。
驅動程式錯誤:表示 NVIDIA GPU 驅動程式造成問題。如要解決這些錯誤,請確認你使用的是最新版 NVIDIA 驅動程式。Google 會監控這些錯誤,並與 NVIDIA 合作修正驅動程式。
韌體或硬體可復原錯誤:這表示韌體或硬體發生錯誤,但不需要更換硬體即可復原。如要解決這些錯誤,請採取手動復原措施,例如重設 GPU 或重新啟動執行個體。韌體或硬體可復原的錯誤包括: 錯誤修正碼 (ECC) 錯誤 (適用於 Xid,例如 Xid 48、 63 和 64),表示偵測和減輕 ECC 錯誤的各個階段。如要進一步瞭解頁面淘汰和 ECC 錯誤緩解措施,請參閱 NVIDIA 的動態頁面淘汰常見問題。
查看 Xid 訊息
如要快速診斷 GPU 工作負載失敗、停止回應或效能降低的原因,請檢查執行個體的核心記錄 (dmesg 或 /var/log/kern.log),找出 NVIDIA Xid 錯誤代碼。
查看下列小節中的 Xid 錯誤表格,可立即解決問題:
- 找出根本原因:判斷失敗原因是否為應用程式錯誤 (例如非法記憶體存取)、驅動程式衝突或實體硬體故障 (例如雙位元 ECC 記憶體錯誤)。
- 判斷作業擁有權:檢查您必須立即手動套用的復原措施 (例如重設 GPU、重新啟動 VM 或執行偵錯工具),以及 Google 在主機上主動管理的自動修復和硬體更換動作。
- 採取正確的復原步驟:避免不必要的疑難排解程序,並確切瞭解何時手動復原就足夠,何時需要將主機回報為故障。有時手動復原不足以解決問題,例如錯誤來源位於 GPU 快取 (SRAM) 中,無法重新對應 (以
Xid 48和SRAM Threshold Exceeded=Yes表示),或是 GPU 已用盡重新對應的記憶體庫 (以Xid 64: All reserved rows for bank are remapped表示)。在這些情況下,Google 會偵測到 GPU 符合硬體更換資格,並主動將機器送修。如果工作負載發生週期性錯誤,或您發現記憶體故障問題一再發生,可以回報故障主機,啟動自動維修或更換程序。如果是 GKE,請參閱「如何在 GKE 中回報主機故障」。
Xid 處理
下列各節會依技術類別,將常見的 Xid 錯誤訊息分組,並提供權威解決方案和責任:
- GPU 記憶體錯誤 (Xid
48、63、64、92、94、95) - GPU 系統處理器 (GSP) 錯誤 (Xid
119、120) - 非法記憶體存取錯誤 (Xid
13、31、137) - 其他常見的 Xid 錯誤訊息 (Xid
74、79、109、149)
GPU 記憶體錯誤
GPU 記憶體是指 GPU 上可用的記憶體,可用於暫時儲存資料。GPU 記憶體受到錯誤修正碼 (ECC) 保護,可偵測及修正單一位元錯誤 (SBE),並偵測及回報雙位元無法修正的錯誤 (DBE)。
GPU 在使用壽命期間發生這類記憶體錯誤是預料中的事。在 NVIDIA A100 GPU 發布前,系統支援動態頁面淘汰。對於 NVIDIA A100 以上版本的 GPU (例如 NVIDIA H100),我們導入了 row remap 錯誤復原機制,可處理 HBM (DRAM) 錯誤。ECC 預設為啟用,Google 強烈建議您保持啟用狀態。
下表列出常見的 GPU 記憶體錯誤,以及建議的解決方法:
| Xid 錯誤訊息 | 顧客動作 | Google 動作 |
|---|---|---|
Xid 48: Double Bit ECC
ECC 偵測到雙位元 (無法修正) 記憶體錯誤。這項錯誤一律會中斷執行中的工作負載,並產生 Xid 48。 |
|
Google 會監控 GPU 何時符合硬體更換資格,例如 HBM 重新對應的記憶體庫用盡,或是 GPU 超過生命週期 SRAM 錯誤門檻,並主動將機器送修,更換 GPU。 |
Xid 63: ECC page retirement or row remapping recording
event
表示系統因記憶體錯誤,記錄了動態頁面淘汰或列重新對應事件。 |
|
Google 會監控錯誤門檻,並在 GPU 需要實體維修或更換時,將機器送修。 |
Xid 64: ECC page retirement or row remapper recording
failure
訊息包含下列資訊: Xid 64: All reserved rows for bank are remapped
|
|
當重新對應的記憶體空間用盡 ( |
如果同時收到至少兩則下列 Xid 訊息:
訊息包含下列資訊: Xid XX: row remap pending
|
|
如果重對應庫用盡,或 GPU 需要實體維修或更換,Google 會將機器送修。 |
Xid 92: High single-bit ECC error rate |
GPU 驅動程式修正可修正的錯誤後,就會傳回這則 Xid 訊息,不應影響工作負載。這則 Xid 訊息僅供參考。您無須採取任何行動。 |
無 |
Xid 94: Contained error
指出是否發生 GPU 錯誤,以及錯誤是否僅限於單一應用程式。 單獨的 Xid 94 無法指出錯誤的根本原因,必須與其他同時發生的 Xid 錯誤一起解讀,才能判斷基本原因。 |
|
無 |
Xid 95: Uncontained error
表示發生 GPU 錯誤,且不限於單一應用程式。 單獨的 Xid 95 無法指出錯誤的根本原因,必須與其他同時發生的 Xid 錯誤一起解讀,才能判斷基本原因。 |
無 |
GSP 錯誤
GPU 系統處理器 (GSP) 是在 GPU 上執行的微控制器,可處理部分低階硬體管理功能。
| Xid 錯誤訊息 | 顧客動作 | Google 動作 |
|---|---|---|
Xid 119: GSP RPC timeout |
|
無,如果錯誤持續發生,且您提交了支援案件,Google 會透過支援工作流程調查硬體或驅動程式狀態。 |
Xid 120: GSP error |
違規存取記憶體錯誤
應用程式發生違規記憶體存取錯誤時,系統會傳回下列 Xid:
| Xid 錯誤訊息 | 顧客動作 | Google 動作 |
|---|---|---|
|
系統偵測到記憶體存取違規,類似於區隔錯誤。這類錯誤通常表示應用程式有錯誤,導致 GPU 記憶體超出存取範圍,或存取已釋放的緩衝區,例如取消參照無效指標或超出範圍的陣列。除非同時出現 Xid 48,否則這些錯誤不代表 ECC 錯誤。 |
如要解決這個問題,請對應用程式中的記憶體存取錯誤進行偵錯。您可以使用 cuda-gdb、Compute Sanitizer 或 cuda-memcheck。 詳情請參閱 NVIDIA Xid 說明文件。 |
無,在極少數情況下,硬體效能降低可能會導致系統誤報非法記憶體存取錯誤,這時您可以使用 NVIDIA Data Center GPU Manager (DCGM) 執行 |
其他常見的 Xid 錯誤訊息
| Xid 錯誤訊息 | 顧客動作 | Google 動作 |
|---|---|---|
Xid 74: NVLINK error |
|
無 |
Xid 79: GPU has fallen off the bus
這表示驅動程式無法與 GPU 通訊,因為硬體問題導致 GPU 從 PCI 匯流排消失。 |
如要復原工作負載,請使用下列任一方法,具體做法取決於專案是否已啟用緊急維護:
|
Google 偵測到 GPU 已從 PCI 匯流排脫落,並將機器送修。 |
Xid 109: Context switch timeout
Xid 109 是 NVIDIA GPU 驅動程式回報的一般錯誤,當 GPU 執行個體無法在預期逾時期間內先占或切換工作時,就會產生這項錯誤。 Google 長期與 NVIDIA 合作調查 Xid 109,並在最新驅動程式中修正了因驅動程式錯誤而導致的已知原因。Xid 109 並非硬體問題所致。 |
|
無 |
提及 0x02a 的 Xid 149,例如以下範例: |
|
無 |
重設 GPU
某些問題可能需要重設 GPU 才能解決。如要重設 GPU,請完成下列步驟:
- 如果 N1、G2、A2 和 G4 VM 連接一或多個 GPU,請重新啟動 VM。
- 如要為 G4 VM 連接部分 GPU (少於一個 GPU),請完成下列步驟:
- 如果是 A3、A4、A4X 和 A4X Max 執行個體,請執行
sudo nvidia-smi --gpu-reset。- 對於大多數 Linux VM,
nvidia-smi可執行檔位於/var/lib/nvidia/bin目錄中。 - 如果是 GKE 節點,
nvidia-smi可執行檔位於/home/kubernetes/bin/nvidia目錄中。
- 對於大多數 Linux VM,
- 在 GKE 節點上,您也可以使用 gpu-reset-tool,自動重設節點上的所有 GPU。使用這項工具時,您只需要指定目標節點名稱。
此外,每當您重設 VM 或停止並重新啟動 VM 時,系統也會重設 GPU。如要進一步瞭解 VM 生命週期狀態,以及 VM 復原動作之間的差異,請參閱「Compute Engine 執行個體生命週期」和「暫停、停止或重設 Compute Engine 執行個體」。
建立支援紀錄
如果按照本頁面的指引操作後仍無法解決問題,請收集下列資訊並建立支援案件:
- 受影響執行個體所在專案的專案 ID。
- 叢集中所有執行個體名稱或 ID 的清單。
- 透過疑難排解程序識別出的可疑節點清單。
- 完整、非交錯的 NCCL 記錄,並啟用偵錯設定。
- 硬體健康狀態檢查的輸出內容 (
dcgmi、nvidia-smi)。 - 失敗的確切基準或工作負載指令。
- 相關記錄檔,例如主機引擎和診斷記錄。如要收集這些資訊,請執行
gather-dcgm-logs.sh,這個檔案位於預設安裝位置的/usr/local/dcgm/scripts中。 - NVIDIA 錯誤報告。執行
nvidia-bug-report.sh。如要使用 Blackwell GPU,請按照「Generate NVIDIA Bug Report for Blackwell GPUs」(為 Blackwell GPU 產生 NVIDIA 錯誤報告) 一文的說明操作。 - 環境最近的任何變更詳情 (失敗前)。
後續步驟
詳閱 GPU 機型。