安装GPU驱动的系统下,root用户任意目录下执行命令:nvidia-bug-report.sh
执行命令后,当前目录下会生成日志压缩包:nvidia-bug-report.log.gz
对于GPU服务器建议客户维持较新的GPU驱动版本、禁用nouveau模块、打开GPU驱动内存常驻模式并配置开机自启动。
对于GPU服务器,建议进行以下配置:
ipmitool power reset
命令对服务器进行冷重启后观察故障是否消失或重现GPU驱动下载注意事项:
从NVIDIA官网进行GPU驱动下载
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
打开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
# 重启系统进行验证
# 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
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
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或链路其他部件故障。
需要确保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或链路其他部件故障。
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
# 使用 -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
。
Pending :No
,否则可重启系统或重置GPU屏蔽报错地址后再次测试程序运行是否仍会报错。Volatile
和Aggregate
条目下出现的GPU ECC报错,可使用nvidia-smi -p 0/1
进行清除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高温告警或nvidia-smi
监控到GPU温度异常。
参考NVIDIA XID Errors官方建议进行问题排查。
可以使用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%;" />
原文:https://blog.51cto.com/zaa47/2560477