1. GPU日志收集
安装GPU驱动的系统下,任意目录下执行命令:nvidia-bug-report.sh
执行命令后,当前目录下会生成日志压缩包:nvidia-bug-report.log.gz
2. GPU基础状态检测
对于GPU服务器建议客户维持较新的GPU驱动版本、禁用nouveau模块、打开GPU驱动内存常驻模式并配置开机自启动。
对于GPU服务器,建议以下进行以下配置:
- 维持较新的、正确的GPU驱动版本
- 禁用nouveau模块
- 打开GPU驱动内存常驻模式并配置开机自启动
处理GPU服务器故障时,只要涉及服务器关机的操作,均建议对GPU基础状态进行检测,基础状态检测包括:
nouveau模块是否禁用、GPU识别情况、GPU驱动内存常驻模式、GPU 带宽、GPU ECC报错、GPU ERR报错、GPU nvlink状态。
2.1 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 -force
[root@zj ~]# shutdown -ry 0
2.2 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.3 检测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 | +-------------------------------+----------------------+----------------------+
2.4 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'
2.5 GPU ECC计数检查
GPU ECC计数可以通过以下方法进行检查。
如下输出中Pending 的标志为No表示所有ECC报错地址空间已经被屏蔽,报错地址空间后续不会再被软件程序调用,不会再影响程序运行。
Pending :No
Yes 表示有需要被屏蔽的ECC报错地址,需要重启系统或重置GPU使其变为No。
# 使用 -i 参数指定GPU id查询某一块GPU的ECC计数
# nvidia-smi -i -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
也可通过nvidia-smi | grep -i 'bit ecc'
命令进行查看。
GPU ECC计数请根据公司指标要求进行GPU更换,另需确保有ECC计数的GPU 报错地址空间已经被屏蔽,即Pending :No
。
2.6 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 |
+-------------------------------+----------------------+----------------------+
2.7 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故障诊断流程
以下为GPU常见故障检查流程图