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 ModeEnabled

    nvidia-smi 输出:

GPU服务器故障诊断_第1张图片

​ 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:

GPU服务器故障诊断_第2张图片

# 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常见故障检查流程图

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)

3.6 GPU带宽检查

3.7 GPU背板无法加电

3.8 GPU驱动版本检查