欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

GPU 常见故障和故障排除方法

最编程 2024-03-26 15:29:44
...

GPU常见故障及排查方法

1. GPU日志收集

安装GPU驱动的系统下,root用户任意目录下执行命令:nvidia-bug-report.sh

执行命令后,当前目录下会生成日志压缩包:nvidia-bug-report.log.gz

2. 系统状态检测

对于GPU服务器建议客户维持较新的GPU驱动版本、禁用nouveau模块、打开GPU驱动内存常驻模式并配置开机自启动。

对于GPU服务器,建议进行以下配置:

  • 维持较新的、正确的GPU驱动版本
  • 禁用nouveau模块
  • 打开GPU驱动内存常驻模式并配置开机自启动
  • GPU故障后,建议使用ipmitool power reset命令对服务器进行冷重启后观察故障是否消失或重现

2.1 检查GPU驱动

GPU驱动下载注意事项:

  • 从NVIDIA官网进行GPU驱动下载

  • 选择正确的GPU型号

  • 对于64位linux建议直接选择linux 64-bit

  • 选择NVIDIA“推荐/认证”的驱动

2.2 禁用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 -f
[root@zj ~]# shutdown -ry 0

2.3 配置GPU驱动内存常驻模式

打开GPU驱动内存常驻模式可以减少GPU掉卡、GPU带宽降低、GPU温度监测不到等诸多问题。建议打开GPU驱动内存常驻模式并配置开机自启动。

GPU驱动内存常驻模式检查常用方法:

  • nvidia-smi 输出中Persistence-M状态为on

  • nvidia-but-report.log中,Persistence ModeEnabled

    nvidia-smi 输出:

GPU驱动内存常驻模式

​ 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.4 获取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常见故障

3.1 GPU不识别

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 |
+-------------------------------+----------------------+----------------------+
现场处理建议

优先对不识别的GPU进行对调测试,判断是否GPU或链路其他部件故障。

3.2 GPU带宽异常

GPU带宽检查

需要确保GPU当前带宽与额定带宽一致且为x16。

可以使用lspci 命令或nvidia-smi命令进行GPU带宽检查。

# lspci 命令
额定带宽:lspci -vvd 10de: | grep -i Lnkcap:
当前带宽:lspci -vvd 10de: | grep -i Lnksta:

GPU带宽检查

# 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或链路其他部件故障。

3.3 GPU retired pages计数检查

3.3.1 NVIDIA 官方RMA标准

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参数中:

  1. 30天内产生的 double bit ecc ≥5
  2. 质保期内 double bit ecc ≥10
  3. 质保期内double bit ecc+single bit ecc≥60
3.3.2 retired pages查询方法
  • 方法一
# 使用 -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

image-20200706215711739

GPU ECC计数请根据NVIDIA指标要求进行GPU更换,另需确保有ECC计数的GPU 报错地址空间已经被屏蔽,即Pending :No

现场处理建议
  1. 若GPU retired pages计数满足NVIDIA RMA标准则直接进行更换;
  2. 若GPU retired pages计数不满足NVIDIA RMA标准,需要检查当前报错的地址空间是否被屏蔽,即Pending :No,否则可重启系统或重置GPU屏蔽报错地址后再次测试程序运行是否仍会报错。
  3. 屏蔽报错地址后程序仍受ECC报错影响,进行fieldiag检测,测试FAIL则进行GPU更换。
  4. 对于VolatileAggregate条目下出现的GPU ECC报错,可使用nvidia-smi -p 0/1进行清除

3.4 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 |
+-------------------------------+----------------------+----------------------+

也可以通过nvidia-bug-report日志中的Fan SpeedPower Draw字段是否为Unknown Error来判断。

现场处理建议
  1. 升级GPU驱动至较新的正确版本后,重启系统进行观察。
  2. 对调GPU测试观察报错是否跟随GPU。

3.5 GPU高温

故障现象:事件日志出现GPU高温告警或nvidia-smi监控到GPU温度异常。

现场处理建议
  1. 检查服务器风扇工作是否正常
  2. 检查服务器风扇散热策略
  3. 检查bios/BMC固件版本是否正确
  4. 检查是否GPU散热膏涂抹不均(NVLink GPU)或GPU故障

3.6 GPU xid报错

参考NVIDIA XID Errors官方建议进行问题排查。

3.7 GPU 性能异常

可以使用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%;" />

现场处理建议
  1. 对调GPU测试判断是否GPU本身故障
  2. 多块GPU异常通常由bios版本、GPU交换板、主板、sas线缆、CPU等故障导致