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模块已经禁用 [ ~]# lsmod | grep -i nouveau # 以下输出表示nouveau模块没有禁用 [ ~]# 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 文件 [ ~]# vim /usr/lib/modprobe.d/blacklist-nouveau.conf blacklist nouveau options nouveau modeset=0 # 执行如下命令并重启系统使内核生效 [ ~]# dracut -force [ ~]# 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 <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
也可通过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常见故障检查流程图
3.1 GPU基础状态检查
3.2 lspci GPU不识别
![02-lspci GPU不识别](https://gitee.com/Gavin_zj/blog/raw/master/blog_img/02-lspci GPU不识别.svg)
3.3 nvidia-smi GPU不识别
![03-nvidia-smi GPU不识别](https://gitee.com/Gavin_zj/blog/raw/master/blog_img/03-nvidia-smi GPU不识别.svg)
3.4 GPU ERR报错
![04-GPU ERR](https://gitee.com/Gavin_zj/blog/raw/master/blog_img/04-GPU ERR.svg)
3.5 GPU ECC报错检查
![05-GPU ECC报错2](https://gitee.com/Gavin_zj/blog/raw/master/blog_img/05-GPU ECC报错2.svg)