基于Nvidia xid进行GPU故障定位

举报
可以交个朋友 发表于 2023/12/15 18:03:12 2023/12/15
【摘要】 在使用GPU的过程中并不总是顺利的,有时会发生 硬件错误例如GPU掉卡,GPU温度过高,GPU PCIe线路脱落,有时也会发生软件错误例如Nvidia驱动不匹配,cuda版本不支持等,有时也会出现用户业务代码错误导致无法使用GPU

一、 背景

AI兴起的浪潮下,各种人工智能,机器学习,云计算,大数据,包括视频解码编码都依赖强大的算力支持。GPU作为AI时代的算力核心发挥着至关重要的作用。

在使用GPU的过程中并不总是顺利的,

  • 有时会发生 硬件错误例如GPU掉卡,GPU温度过高,GPU PCIe线路脱落;
  • 有时也会发生软件错误例如Nvidia驱动不匹配,cuda版本不支持等;
  • 有时也会出现用户业务代码错误导致无法使用GPU。

因此我们前期可以借助nvidia xid errors来进行判断错误类型。


二、GPU使用知识科普

  1. GPU节点如何查看驱动显卡信息: nvidia-smi
    根据驱动安装的方式不同,该命令在节点上执行的路径也不一样,gpu-operator方式可能需要前往driver-installer容器中查看显卡驱动信息
    image.png

  2. GPU节点如何判断显卡设备是否加载成功

    cd /dev &&  ls -lrt |grep nvidia
    

    image.png
    该目录下有nvidia0 表示只有一张显卡。如果是多张显卡会有 nvidia1,nvidia2等设备

  3. k8s调度gpu依据
    kube-scheduler在进行gpu资源调度时,开源社区参考的字段是 nvidia.com/gpu

    status:
      allocatable:
        cpu: 7910m
        memory: 62104404Ki
        nvidia.com/gpu: "1"
        pods: "64"
        ......
      capacity:
        cpu: "8"
        memory: 65330004Ki
        nvidia.com/gpu: "1"
        pods: "64"
        ......
    

    需要对应的k8s node.status.allocatable上有相关资源nvidia.com/gpu: "1",1 表示有一张显卡可供调度


三、K8s环境部署GPU业务&定位调试

  1. 前提准备
    k8s集群需要有一张GPU卡,并且安装了相关的GPU调度插件,Nvidia 驱动程序等。开源环境下可以使用gpu-operator全家桶一次性安装。

  2. demo部署
    为了能够展示监控效果,需要产生XID错误,本demo将提交一个能够产生XID 43的任务,该任务的yaml文件如下:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: xid43-sample
      namespace: gpu
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: xid43-sample
        spec:
          containers:
          - name: xid-sample
            image: swr.cn-north-4.myhuaweicloud.com/k8s-solution/make-xid43:1.0
            command:
            - sleep
            - 365d
            resources:
              limits:
                nvidia.com/gpu: 1 #申请一张GPU卡
            workingDir: /root
          restartPolicy: Never
    

    image.png

  3. 执行任务
    登录Pod,在容器内执行任务脚本。

    cuda-memcheck --log-file cudatestmemcheck.log python gen_xid.py
    

    会发现控制台打印了一堆错误:
    image.png

  4. 定位故障
    此时执行 nvidia-smi -q查看ecc似乎也没什么异常。
    image.png
    查看系统内核日志信息: dmesg -T |grep -i xid
    image.png
    发现有: NVRM: Xid (PCI:0000:00:0d): 43

    根据nvidia官方提示xid 43报错: 当用户应用程序访问驱动软件引起的故障并且必须终止时,会记录此事件。 但是GPU 会保持健康状态。在大多数情况下,这并不表示驱动程序错误,而是用户应用程序错误。

    image.png


四、 XID errors 说明

  • 什么是 Xid errors:
    XID消息是来自NVIDIA驱动程序的错误报告,该报告打印到操作系统的内核日志或事件日志上。 XID消息表明发生了一般的GPU错误,通常是由于驱动程序错误地编程或者发送给 GPU 的命令被损坏 所导致的。Xid可以指示GPU硬件问题,NVIDIA软件问题或用户应用程序问题。
    xid提供给用户和 NVIDIA厂商 都可以使用的诊断信息,极大帮助了诊断问题。

  • 如何使用Xid:
    Xid 消息旨在用作调试指南。由于许多问题可能有多种可能的根本原因,因此仅从 Xid 值了解每个问题并不总是可行的。 例如,Xid errors可能表明用户程序尝试访问无效内存。但是,从理论上讲,由于 PCIE 或帧缓冲区(“FB”)问题导致的内存损坏可能会损坏任何命令,从而导致几乎任何错误。一般来说,Xid 分类可以作为进一步研究每个问题的起点。

  • 辅助定位工具

    1. nvidia-smi: 它是一个随 NVIDIA 驱动一起安装的命令行程序。它会报告系统中每个 GPU 的基本监控数据和硬件参数、配置数据。 nvidia-smi 可以列出 ECC 错误计数 (Xid 48) 并指示电源线是否已拔出 (Xid 54) 等。同时运行“nvidia-smi –q”以获得全面输出。

    2. DCGM: nvidia data center gpu manager是一套用于在集群环境中管理和监控 NVIDIA 数据中心 GPU 的工具。它包括主动健康监控、全面诊断、系统警报和治理策略(包括电源和时钟管理)。 DCGM 诊断是一款运行状况检查工具,可以检查基本的 GPU 运行状况,包括是否存在 ECC 错误、PCIe 问题、带宽问题以及运行 CUDA 程序的常见问题。

    3. nvidia-bug-report.sh : 它是与 NVIDIA 驱动一起安装的脚本。它从系统收集调试日志和命令输出,包括内核日志和NVIDIA驱动程序本身收集的日志。该命令应以 root 身份运行。nvidia-bug-report.sh 通常会快速运行,但在极少数情况下可能会运行缓慢。最多需要一小时才能完成。如果命令仍然挂起,请使用附加参数运行命令,如下所示:nvidia-bug-report.sh --safe-mode --extra-system-data


五、 XID errors 清单

列举生产中常见的xid事件:

  1. XID 13: GR: SW Notify Error:
    常见原因:一般为用户应用程序故障。通常这是一个数组下标越界错误。也有可能是非法指令,非法寄存器等其他情况。
    极少数情况下 会出现硬件故障或者软件错误导致XID 13

  2. XID 31: Fifo: MMU Error:
    常见原因: 一般为应用程序级别故障。 当MMU上报故障时,当gpu芯片上的应用程序进行非法地址访问时,会触发此类故障并记录。

  3. XID 32: PBDMA Error:
    常见原因: 一般是硬件问题。当 DMA 控制器报告故障时,会记录此事件,该控制器通过 PCI-E 总线管理 NVIDIA 驱动程序和 GPU 之间的通信流。这些故障主要涉及PCI的质量问题,一般不是由用户应用程序操作引起的。
    解决方式: 联合硬件运维处理

  4. XID 43: RESET CHANNEL VERIF ERROR:
    常见原因:基本是用户应用程序故障。不影响GPU的健康状况
    解决方式: 联合开发同事处理

  5. XID 45: OS: Preemptive Channel Removal:
    常见原因: 通常这并代表发生故障。用户程序退出中止,control-C cpu reset sigkill 都会导致此类事件

  6. XID 48: DBE (Double Bit Error) ECC Error:
    常见原因:怀疑硬件故障。当gpu检测到不可修正的错误,会记录该事件。

  7. XID 63, 64: ECC Page Retirement or ROW REMAPPING:
    常见原因: ECC显存故障,常见于硬件故障。 当应用程序遭遇到 GPU 显存硬件错误时,NVIDIA 自纠错机制会将错误的内存区域retire 或者 remap,retirement 和remapped 信息需要记录到 infoROM 中才能永久生效。
    A 系列显卡开始支持row remapping
    A系列之前的显卡,例如T4 V100 P100 支持dynamic page retirement
    解决方式:联合硬件同事排查

  8. XID 74: Nvlink ERROR:
    常见原因:多半为硬件故障。多卡GPU之间使用nvlink进行通讯时出现问题,链路故障或者g卡故障都会导致。
    解决方式:可自行通过gpu reset 或者重启节点 进行恢复。如果此时还无法恢复,需要进行维修处理。

  9. XID 79: GPU has fallen off the bus:
    常见原因: 多半是硬件问题。具体现象为当gpu驱动尝试通过PCI-e总线访问GPU,访问失败。此事件通常由PCIe链路上的硬件故障引起,导致GPU由于链路中断而无法访问。
    解决方式:硬件维修

  10. XID 93: Non-fatal violation of provisioned inforom wear limit:
    常见原因: 当GPU驱动程序因违反使用nvflash-elsesessionstart导致更新infoROM失败。大多数情况下,这并不是软件驱动故障。

  11. XID 94, 95: CONTAINED/UNCONTAINED ECC ERRORs:
    常见原因:当应用程序遭遇到 GPU 不可纠正的显存 ECC 错误时,NVIDIA 错误抑制机制会尝试将错误抑制在踩到硬件故障的应用程序,而不会让错误导致 GPU 上的所有应用程序受到影响。当抑制机制成功抑制错误时,会产生Xid 94事件,仅影响遭遇了不可纠正 ECC 错误的应用程序。 Xid95 代表抑制失败,此时表明运行在该 GPU 上的所有应用程序都已受到影响。
    解决方式: 联合硬件同事处理

  12. XID 110 SECURITY FAULT ERROR:
    常见原因:硬件故障。
    解决方式: 恢复最近所有的系统硬件修改,并冷启动系统。需联系硬件处理。

  13. XID 119, 120: GSP RPC Timeout / GSP Error:
    常见原因: 当在 GPU 的 GSP 核心上运行的代码中发生错误/或在等待 GPU 的 GSP 核心响应 RPC 消息时发生超时时。
    解决方式: 可以尝试重启节点或者重置GPU。如果还不行联系硬件处理

官方累计的xid数量大概125个,以上为常见的xid事件。后续会陆续补上剩余的xid事件…


六、 参考资料

nvidia 官方资料: https://docs.nvidia.com/deploy/xid-errors/index.html

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。