GPU服务器故障诊断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPU服务器故障诊断相关的知识,希望对你有一定的参考价值。

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 输出:

技术图片

? 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)

3.6 GPU带宽检查

技术图片

3.7 GPU背板无法加电

技术图片

3.8 GPU驱动版本检查

技术图片

以上是关于GPU服务器故障诊断的主要内容,如果未能解决你的问题,请参考以下文章

故障诊断分析基于matlab FFT轴承故障诊断含Matlab源码 1397期

故障诊断预测基于matlab FFT与DBN轴承故障诊断预测含Matlab源码 1741期

如何诊断打印机故障

动手教你学故障诊断:Python实现Tensorflow+CNN深度学习的轴承故障诊断(西储大学数据集)(含完整代码)

故障诊断基于PSO_VMD_MCKD方法的风机轴承微弱故障诊断

故障诊断用于轴承故障诊断的性能增强时变形态滤波方法及用于轴承断层特征提取的增强数学形态算子研究(Matlab代码实现)