GPU 常见故障和故障排除方法
GPU常见故障及排查方法
1. GPU日志收集
安装GPU驱动的系统下,root用户任意目录下执行命令:nvidia-bug-report.sh
执行命令后,当前目录下会生成日志压缩包:nvidia-bug-report.log.gz
2. 系统状态检测
对于GPU服务器建议客户维持较新的GPU驱动版本、禁用nouveau模块、打开GPU驱动内存常驻模式并配置开机自启动。
对于GPU服务器,建议进行以下配置:
- 维持较新的、正确的GPU驱动版本
- 禁用nouveau模块
- 打开GPU驱动内存常驻模式并配置开机自启动
- GPU故障后,建议使用
ipmitool power reset
命令对服务器进行冷重启后观察故障是否消失或重现
2.1 检查GPU驱动
GPU驱动下载注意事项:
-
从NVIDIA官网进行GPU驱动下载
-
选择正确的GPU型号
-
对于64位linux建议直接选择linux 64-bit
-
选择NVIDIA“推荐/认证”的驱动
2.2 禁用nouveau 模块
nouveau是NVIDIA显卡的开源驱动程序,会与NVIDIA官方GPU驱动发生冲突,需要在系统下禁用nouveau模块。
# 以下命令没有任何输出表示nouveau模块已经禁用
[root@zj ~]# lsmod | grep -i nouveau
# 以下输出表示nouveau模块没有禁用
[root@zj ~]# lsmod | grep -i nouveau
nouveau 1662531 0
mxm_wmi 13021 1 nouveau
wmi 19086 2 mxm_wmi,nouveau
i2c_algo_bit 13413 1 nouveau
video 24538 1 nouveau
drm_kms_helper 176920 2 nouveau,vmwgfx
ttm 99555 2 nouveau,vmwgfx
drm 397988 6 ttm,drm_kms_helper,nouveau,vmwgfx
i2c_core 63151 5 drm,i2c_piix4,drm_kms_helper,i2c_algo_bit,nouveau
禁用nouveau模块的方法参考如下:
# CentOS 7
# 编辑或新建 blacklist-nouveau.conf 文件
[root@zj ~]# vim /usr/lib/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
# 执行如下命令并重启系统使内核生效
[root@zj ~]# dracut -f
[root@zj ~]# shutdown -ry 0
2.3 配置GPU驱动内存常驻模式
打开GPU驱动内存常驻模式可以减少GPU掉卡、GPU带宽降低、GPU温度监测不到等诸多问题。建议打开GPU驱动内存常驻模式并配置开机自启动。
GPU驱动内存常驻模式检查常用方法:
-
nvidia-smi 输出中
Persistence-M
状态为on
-
nvidia-but-report.log中,
Persistence Mode
为Enabled
nvidia-smi 输出:
nvidia-but-report.log日志:
GPU 00000000:3B:00.0
Product Name : Tesla P40
Product Brand : Tesla
Display Mode : Enabled
Display Active : Disabled
Persistence Mode : Enabled
请确保现场服务器:
-
打开GPU驱动内存常驻模式
-
配置开机自启动
GPU驱动内存常驻模式开启方法,执行命令:
nvidia-smi -pm 1
或
# 以下命令对较新版本的GPU驱动有效
nvidia-persistenced --persistence-mode
开机自启动配置示例:
# vim /etc/rc.d/rc.local
# 在文件中添加一行
# nvidia-smi -pm 1
# 赋予/etc/rc.d/rc.local文件可执行权限
# chmod +x /etc/rc.d/rc.local
# 重启系统进行验证
2.4 获取GPU序列号
# nvidia-smi -q | grep -i serial
Serial Number : 0324018045603
Serial Number : 0324018044864
Serial Number : 0324018027716
Serial Number : 0323918059881
# 可以通过nvidia-smi -q -i id 来检查指定id的GPU序列号
# nvidia-smi -q -i 0 | grep -i serial
Serial Number : 0324018045603
3. GPU常见故障
3.1 GPU不识别
GPU识别状态检查
GPU识别状态检测时,首先要确保lspci
命令识别所有GPU,其次确保nvidia-smi
命令识别所有GPU。
-
lspci 检查GPU识别情况
lspci | grep -i nvidia
命令输出中确保所有GPU识别正常,并且每个GPU末尾标识为(rev a1)。输出信息末尾为(rev ff),表示GPU异常。
# 如下命令表示识别到8个GPU,且末尾标识为(rev a1)的GPU状态正常
# b5:00.0 GPU末尾标识为(rev ff),表示该GPU状态异常
~]# lspci | grep -i nvidia
3e:00.0 3D controller: NVIDIA Corporation Device 1db8 (rev a1)
3f:00.0 3D controller: NVIDIA Corporation Device 1db8 (rev a1)
40:00.0 3D controller: NVIDIA Corporation Device 1db8 (rev a1)
41:00.0 3D controller: NVIDIA Corporation Device 1db8 (rev ff)
- nvidia-smi 检查GPU识别情况
# nvidia-smi
Thu Dec 26 09:53:57 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM3... On | 00000000:3E:00.0 Off | 0 |
| N/A 42C P0 54W / 350W | 0MiB / 32480MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla V100-SXM3... On | 00000000:3F:00.0 Off | 0 |
| N/A 40C P0 48W / 350W | 0MiB / 32480MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla V100-SXM3... On | 00000000:40:00.0 Off | 0 |
| N/A 40C P0 52W / 350W | 0MiB / 32480MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla V100-SXM3... On | 00000000:41:00.0 Off | 0 |
| N/A 43C P0 54W / 350W | 0MiB / 32480MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
现场处理建议
优先对不识别的GPU进行对调测试,判断是否GPU或链路其他部件故障。
3.2 GPU带宽异常
GPU带宽检查
需要确保GPU当前带宽与额定带宽一致且为x16。
可以使用lspci 命令或nvidia-smi命令进行GPU带宽检查。
# lspci 命令
额定带宽:lspci -vvd 10de: | grep -i Lnkcap:
当前带宽:lspci -vvd 10de: | grep -i Lnksta:
# nvidia-smi 命令检查
nvidia-smi -q | grep -i -A 2 'Link width'
或
nvidia-smi --format=csv --query-gpu=index,name,serial,gpu_bus_id,pcie.link.width.current
示例一:
[root@localhost ~]# nvidia-smi -q | grep -i -A 2 'Link width'
Link Width
Max : 16x
Current : 16x
--
Link Width
Max : 16x
Current : 16x
--
示例二:
[root@localhost ~]# nvidia-smi --format=csv --query-gpu=index,name,serial,gpu_bus_id,pcie.link.width.current
index, name, serial, pci.bus_id, pcie.link.width.current
0, Tesla P40, 1321020022261, 00000000:04:00.0, 16
1, Tesla P40, 1320220073456, 00000000:05:00.0, 16
2, Tesla P40, 1320220073723, 00000000:08:00.0, 16
3, Tesla P40, 1320220073383, 00000000:09:00.0, 16
4, Tesla P40, 1320220073482, 00000000:85:00.0, 16
5, Tesla P40, 1320220073313, 00000000:86:00.0, 16
6, Tesla P40, 1320220073379, 00000000:89:00.0, 16
7, Tesla P40, 1320220073579, 00000000:8A:00.0, 16
现场处理建议
优先对不识别的GPU进行对调测试,判断是否GPU或链路其他部件故障。
3.3 GPU retired pages计数检查
3.3.1 NVIDIA 官方RMA标准
nvidia官网链接:nvidia GPU ECC RMA标准
How many pages can be mapped out before the GPU should be returned for repair?
If a board is found to exhibit 5 or more retired pages from uncorrectable memory errors within 30 days, or 10 or more retired pages from uncorrectable memory errors over the warranty period, it can be evaluated for an RMA. Please track the page retirement information for RMA application.
Additionally, a board that generates 60 or more total dynamic retired pages from correctable and uncorrectable memory errors is eligible for an RMA.
以上表示,对于GPU retired pages计数,满足以下任一条件或nvidia fieldiag 检测fail均可进行GPU更换。 Retired Pages参数中:
- 30天内产生的 double bit ecc ≥5
- 质保期内 double bit ecc ≥10
- 质保期内double bit ecc+single bit ecc≥60
3.3.2 retired pages查询方法
- 方法一
# 使用 -i 参数指定GPU id查询某一块GPU的ECC计数
# nvidia-smi -i <target gpu> -q -d PAGE_RETIREMENT
...
Retired pages
Single Bit ECC : 2
Double Bit ECC : 0
Pending : No
# 不使用 -i 参数查询所有GPU的ECC计数
# nvidia-smi -q -d PAGE_RETIREMENT
如下输出中Pending 的标志为No表示所有ECC报错地址空间已经被屏蔽,报错地址空间后续不会再被软件程序调用,不会再影响程序运行。
Pending :No
Yes 表示有需要被屏蔽的ECC报错地址,需要重启系统或重置GPU使其变为No。
- 方法二
该方法只能查看retired pages计数,无法查看retired pages是否已经被屏蔽
nvidia-smi -q -i <target gpu> | grep -i 'bit ecc'
#示例 查看0号GPU的retired pages计数
[root@localhost ~]# nvidia-smi -q -i 0 | grep -i 'bit ecc'
Single Bit ECC : 0
Double Bit ECC : 0
#不使用 -i 参数可以查看所有GPU的retired pages计数
[root@inspur ~]# nvidia-smi -q | grep -i 'bit ecc'
Single Bit ECC : 0
Double Bit ECC : 0
Single Bit ECC : 1
Double Bit ECC : 0
...
- 方法三
该方法可以查看所有retired pages的产生时间,便于判断是否满足nvidia RMA标准。
该方法需要较新的GPU驱动版本支持,否则无法查看retired pages产生时间
nvidia-smi -i <target gpu> --query-retired-pages=gpu_name,gpu_bus_id,gpu_serial,retired_pages.cause,retired_pages.timestamp --format=csv
GPU ECC计数请根据NVIDIA指标要求进行GPU更换,另需确保有ECC计数的GPU 报错地址空间已经被屏蔽,即Pending :No
。
现场处理建议
- 若GPU retired pages计数满足NVIDIA RMA标准则直接进行更换;
- 若GPU retired pages计数不满足NVIDIA RMA标准,需要检查当前报错的地址空间是否被屏蔽,即
Pending :No
,否则可重启系统或重置GPU屏蔽报错地址后再次测试程序运行是否仍会报错。 - 屏蔽报错地址后程序仍受ECC报错影响,进行fieldiag检测,测试FAIL则进行GPU更换。
- 对于
Volatile
和Aggregate
条目下出现的GPU ECC报错,可使用nvidia-smi -p 0/1
进行清除
3.4 GPU ERR!报错检查
GPU运行过程中会出现Fan ERR以及功率等ERR报错,可以通过检查nvidia-smi
输出中是否包含ERR!
报错判断。
# nvidia-smi
Thu Dec 26 09:53:57 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-SXM3... On | 00000000:3E:00.0 Off | 0 |
| ERR! 44C P0 ERR!/ 350W | 0MiB / 32480MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
也可以通过nvidia-bug-report日志中的
Fan Speed
或Power Draw
字段是否为Unknown Error
来判断。
现场处理建议
- 升级GPU驱动至较新的正确版本后,重启系统进行观察。
- 对调GPU测试观察报错是否跟随GPU。
3.5 GPU高温
故障现象:事件日志出现GPU高温告警或nvidia-smi
监控到GPU温度异常。
现场处理建议
- 检查服务器风扇工作是否正常
- 检查服务器风扇散热策略
- 检查bios/BMC固件版本是否正确
- 检查是否GPU散热膏涂抹不均(NVLink GPU)或GPU故障
3.6 GPU xid报错
参考NVIDIA XID Errors官方建议进行问题排查。
3.7 GPU 性能异常
可以使用cuda samples自带的BandwidthTest、P2pBandwidthLatencyTest等程序进行GPU性能检测,不同型号的GPU带宽等表现不同。
如下是cuda samples P2pBandwidthLatencyTest 的结果展示,GPU 6、7带宽异常。
<img src="https://gitee.com/Gavin_zj/blog/raw/master/blog_img/20201201112635.png" alt="GPU性能异常" style="zoom:150%;" />
现场处理建议
- 对调GPU测试判断是否GPU本身故障
- 多块GPU异常通常由bios版本、GPU交换板、主板、sas线缆、CPU等故障导致
推荐阅读
-
使用 vueDevtools 和性能共享进行性能故障排除
-
子网划分、可变长度子网掩码和 TCP/IP 故障排除__子网划分、掩码、网络概述
-
西门子 PLC 常见故障排除请参见此处(附 PLC 无线通信示例)
-
常见 DNS 故障排除和问题解决流程
-
如何在 PHP 微服务中实施分布式日志跟踪和故障排除
-
Oracle 12C EM Express 配置和故障排除
-
TDengine 无模式(无图案书写)常见问题的原因和故障排除
-
flinkx metaspace 在 flink 独立模式下内存溢出故障排除和问题解决
-
Robotjs 故障排除 - Robotjs 安装和使用教程指南
-
MySQL 故障排除和生产环境优化