Oamc

GPU 服务器常见故障处理 · 修改记录

这是 gpu/GPU 服务器常见故障处理.md 的改动记录。后台每次保存都会留一份快照, 这里显示的是快照之间的差异,不会混入其他文章的改动。

还没有后台修改记录。

Git 提交记录

下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。

#1 2026-10-25 +0 −0 refactor: 全部文章文件名中文化 0aa8fe6

这次没有正文改动。

#2 2026-10-25 +2 −2 快照: 重命名前的完整状态(含未整理的重复文件) ccb3350
 @@ -11,7 +11,7 @@ title: GPU 服务器常见故障处理
 GPU 服务器(训练卡、推理卡、显卡服务器)跑着任务出问题了:卡不见了、
 `nvidia-smi` 报错、显存占用异常、训练突然中断、推理结果不对、温度报警。
 
-这篇按「现象 → 定位 → 处理」整理,都是实际会遇到的。 11111
+这篇按「现象 → 定位 → 处理」整理,都是实际会遇到的。11111
 
 ## 前置条件
 
 @@ -571,4 +571,4 @@ nvidia-smi -pl 200    # 限制到 200W
 * **别在有 checkpoint 之前就反复重试训练**,卡反复掉可能损坏 checkpoint 文件。
 * **ECC 报错别忽略**,Volatile 涨可以清,Aggregate 涨就得换卡了。
 * **国产卡(华为昇腾、寒武纪等)的 CUDA 生态不一样**,这套命令大多不通用,
-    得看厂商自己的工具链。
+    得看厂商自己的工具链。
#3 2026-10-20 +1 −4 docs: 清理测试标记 52852a8
 @@ -8,9 +8,6 @@ title: GPU 服务器常见故障处理
 
 ## 场景
 
-
-E2E_HISTORY_555
-
 GPU 服务器(训练卡、推理卡、显卡服务器)跑着任务出问题了:卡不见了、
 `nvidia-smi` 报错、显存占用异常、训练突然中断、推理结果不对、温度报警。
 
 @@ -574,4 +571,4 @@ nvidia-smi -pl 200    # 限制到 200W
 * **别在有 checkpoint 之前就反复重试训练**,卡反复掉可能损坏 checkpoint 文件。
 * **ECC 报错别忽略**,Volatile 涨可以清,Aggregate 涨就得换卡了。
 * **国产卡(华为昇腾、寒武纪等)的 CUDA 生态不一样**,这套命令大多不通用,
-    得看厂商自己的工具链。
+    得看厂商自己的工具链。
#4 2026-10-20 +0 −1 docs: 清理测试标记 4eddabe
 @@ -8,7 +8,6 @@ title: GPU 服务器常见故障处理
 
 ## 场景
 
-FINAL_CHECK_999
 
 E2E_HISTORY_555
 
#5 2026-10-20 +3 −2 docs: 更新 gpu/gpu-server-troubleshoot 187166a
 @@ -1,5 +1,5 @@
 ---
-tags: [GPU, 显卡, 服务器, 故障处理, CUDA]
+tags: [GPU, CUDA]
 order: 70
 title: GPU 服务器常见故障处理
 ---
 @@ -8,6 +8,8 @@ title: GPU 服务器常见故障处理
 
 ## 场景
 
+FINAL_CHECK_999
+
 E2E_HISTORY_555
 
 GPU 服务器(训练卡、推理卡、显卡服务器)跑着任务出问题了:卡不见了、
 @@ -574,4 +576,3 @@ nvidia-smi -pl 200    # 限制到 200W
 * **ECC 报错别忽略**,Volatile 涨可以清,Aggregate 涨就得换卡了。
 * **国产卡(华为昇腾、寒武纪等)的 CUDA 生态不一样**,这套命令大多不通用,
     得看厂商自己的工具链。
-
#6 2026-10-20 +4 −0 测试 2d26e3a
 @@ -1,12 +1,15 @@
 ---
 tags: [GPU, 显卡, 服务器, 故障处理, CUDA]
 order: 70
+title: GPU 服务器常见故障处理
 ---
 
 # GPU 服务器常见故障处理
 
 ## 场景
 
+E2E_HISTORY_555
+
 GPU 服务器(训练卡、推理卡、显卡服务器)跑着任务出问题了:卡不见了、
 `nvidia-smi` 报错、显存占用异常、训练突然中断、推理结果不对、温度报警。
 
 @@ -571,3 +574,4 @@ nvidia-smi -pl 200    # 限制到 200W
 * **ECC 报错别忽略**,Volatile 涨可以清,Aggregate 涨就得换卡了。
 * **国产卡(华为昇腾、寒武纪等)的 CUDA 生态不一样**,这套命令大多不通用,
     得看厂商自己的工具链。
+
#7 2026-10-20 +573 −0 docs: 同步速查表和分类文章 c3e3513
 @@ -0,0 +1,573 @@
+---
+tags: [GPU, 显卡, 服务器, 故障处理, CUDA]
+order: 70
+---
+
+# GPU 服务器常见故障处理
+
+## 场景
+
+GPU 服务器(训练卡、推理卡、显卡服务器)跑着任务出问题了:卡不见了、
+`nvidia-smi` 报错、显存占用异常、训练突然中断、推理结果不对、温度报警。
+
+这篇按「现象 → 定位 → 处理」整理,都是实际会遇到的。 11111
+
+## 前置条件
+
+* 能 SSH 上服务器,或者有 IPMI / iDRAC / iLO 的远程控制台
+* 记下这台机器用的卡型(A100 / H100 / L40S / RTX 4090 / 国产卡等)和驱动版本
+* 有**另一台同型号的机器**能对照,出问题时好比对
+* 重要任务先确认有 checkpoint,别在故障状态硬跑
+* 驱动和 CUDA 版本先记下来,换驱动前一定要记
+
+## 配置
+
+### 1\. nvidia\-smi 找不到卡
+
+最常见。按顺序查:
+
+```bash
+# 先看系统能不能看到卡
+nvidia-smi
+# 报错信息分几种:
+#   "command not found"          → 驱动没装或 PATH 不对
+#   "Failed to initialize NVML"  → 驱动加载了但和内核对不上
+#   "No devices were found"      → 驱动在,但没找到硬件
+```
+
+三种情况分别处理:
+
+**驱动没装 / 装了但 PATH 不对**
+
+```bash
+# 看驱动模块在不在
+lsmod | grep nvidia
+ls /proc/driver/nvidia/version
+
+# 模块没加载,但文件在
+modprobe nvidia
+nvidia-smi
+```
+
+**Failed to initialize NVML(驱动与内核版本不匹配)**
+
+这是升级内核或升级驱动之后最常见的。内核头文件和驱动版本对不上:
+
+```bash
+uname -r                                    # 当前内核
+cat /proc/driver/nvidia/version             # 驱动带的内核版本
+ls /usr/src/kernels/                        # 有没有对应的头文件
+```
+
+两种修法:
+
+```bash
+# 办法一:装当前内核的头文件,然后重装驱动
+apt install linux-headers-$(uname -r)
+# 重新安装对应的 .run 驱动包(会重新编译内核模块)
+
+# 办法二:回退内核(更稳,但要重启)
+# 编辑 /etc/default/grub,把 GRUB_DEFAULT 改成旧内核
+# update-grub && reboot
+```
+
+**No devices were found(驱动在,但卡不被识别)**
+
+```bash
+# PCI 层面能不能看到卡
+lspci | grep -i nvidia
+lspci -nn | grep -i "3d controller\|nvidia"
+
+# 内核有没有报错
+dmesg -T | grep -iE "nvidia|nvrm|nouveau" | tail -30
+```
+
+几种典型:
+
+```text
+"NVRM: Xid: ... GPU has fallen off the bus"   → 卡掉了,PCIe 链路问题(见第 4 节)
+"NVRM: Failed to initialize GPU"            → 卡本身或供电有问题
+"unable to map BAR"                          → 内存映射失败,可能是 IOMMU 或 PCIe 设置
+"Nouveau ... kernel driver"                  → 装了开源驱动,抢占了独显
+```
+
+如果是 nouveau 抢占了:
+
+```bash
+# 禁用开源驱动
+echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf
+echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf
+update-initramfs -u && reboot
+```
+
+**完全看不到卡(lspci 也没有)**
+
+那就是硬件层面的问题了:卡没插好、供电没接、卡坏了、或者 PCIe 插槽有问题。
+这个只能去机房看。
+
+### 2\. 驱动版本不对 / CUDA 版本不匹配
+
+```bash
+# 驱动版本
+nvidia-smi --query-gpu=driver_version --format=csv,noheader
+
+# CUDA 运行时版本(注意:这是驱动最高支持的版本,不是装的 toolkit 版本)
+nvidia-smi | head -3
+
+# PyTorch 实际用的版本
+python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
+
+# 实际加载的驱动
+cat /proc/driver/nvidia/version
+```
+
+对应关系:
+
+| CUDA 版本 | 最低驱动 |
+| ------- | ---- |
+| 12.4 | 550 |
+| 12.1 | 530 |
+| 11.8 | 520 |
+| 11.4 | 470 |
+
+注意几个容易混的点:
+
+```text
+torch.version.cuda     → 编译 PyTorch 时用的 CUDA 版本
+nvidia-smi 右上角的 CUDA → 驱动最高能支持的 CUDA 版本
+```
+
+**nvidia-smi 显示的 CUDA 版本比 torch.version.cuda 高是正常的**,不用管。
+反过来说,如果 `torch.cuda.is_available()` 返回 False,PyTorch 自己带的 CUDA 库
+和驱动不兼容才是问题。
+
+常见报错:
+
+```text
+"CUDA driver version is insufficient for CUDA runtime version"
+  → 驱动太老,升级驱动
+
+"CUDA error: no kernel image is available for execution on the device"
+  → 驱动不支持这张卡的架构(Ampere / Hopper / Ada 的 sm_xx)
+  → 升级驱动到支持该卡的版本,老驱动不认新卡
+
+"undefined symbol: cudaGetDriverEntryPoint"
+  → 装了多个 CUDA toolkit,环境变量指向了旧的
+```
+
+多 CUDA 版本共存时,看当前用的是哪个:
+

…… 改动较长,只显示前一部分