GPU常見故障及排查方法

GPU常見故障及排查方法

1. GPU日誌收集

安裝GPU驅動的系統下,root用戶任意目錄下執行命令:nvidia-bug-report.shhtml

執行命令後,當前目錄下會生成日誌壓縮包:nvidia-bug-report.log.gzlinux

2. 系統狀態檢測

對於GPU服務器建議客戶維持較新的GPU驅動版本、禁用nouveau模塊、打開GPU驅動內存常駐模式並配置開機自啓動。ios

對於GPU服務器,建議進行如下配置:git

  • 維持較新的、正確的GPU驅動版本
  • 禁用nouveau模塊
  • 打開GPU驅動內存常駐模式並配置開機自啓動
  • GPU故障後,建議使用ipmitool power reset命令對服務器進行冷重啓後觀察故障是否消失或重現

2.1 檢查GPU驅動

GPU驅動下載注意事項:shell

  • 從NVIDIA官網進行GPU驅動下載vim

  • 選擇正確的GPU型號
  • 對於64位linux建議直接選擇linux 64-bit
  • 選擇NVIDIA「推薦/認證」的驅動
    GPU常見故障及排查方法

2.2 禁用nouveau 模塊

nouveau是NVIDIA顯卡的開源驅動程序,會與NVIDIA官方GPU驅動發生衝突,須要在系統下禁用nouveau模塊bash

# 如下命令沒有任何輸出表示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驅動內存常駐模式並配置開機自啓動。app

GPU驅動內存常駐模式檢查經常使用方法:ide

  • 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 六、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等故障致使
相關文章
相關標籤/搜索