基于Nvidia xid进行GPU故障定位
【摘要】 在使用GPU的过程中并不总是顺利的,有时会发生 硬件错误例如GPU掉卡,GPU温度过高,GPU PCIe线路脱落,有时也会发生软件错误例如Nvidia驱动不匹配,cuda版本不支持等,有时也会出现用户业务代码错误导致无法使用GPU
一、 背景
AI兴起的浪潮下,各种人工智能,机器学习,云计算,大数据,包括视频解码编码都依赖强大的算力支持。GPU作为AI时代的算力核心发挥着至关重要的作用。
在使用GPU的过程中并不总是顺利的,
- 有时会发生 硬件错误例如GPU掉卡,GPU温度过高,GPU PCIe线路脱落;
- 有时也会发生软件错误例如Nvidia驱动不匹配,cuda版本不支持等;
- 有时也会出现用户业务代码错误导致无法使用GPU。
因此我们前期可以借助nvidia xid errors来进行判断错误类型。
二、GPU使用知识科普
-
GPU节点如何查看驱动显卡信息:
nvidia-smi
根据驱动安装的方式不同,该命令在节点上执行的路径也不一样,gpu-operator方式可能需要前往driver-installer容器中查看显卡驱动信息
-
GPU节点如何判断显卡设备是否加载成功
cd /dev && ls -lrt |grep nvidia
该目录下有nvidia0 表示只有一张显卡。如果是多张显卡会有 nvidia1,nvidia2等设备 -
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业务&定位调试
-
前提准备
k8s集群需要有一张GPU卡,并且安装了相关的GPU调度插件,Nvidia 驱动程序等。开源环境下可以使用gpu-operator全家桶一次性安装。 -
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
-
执行任务
登录Pod,在容器内执行任务脚本。cuda-memcheck --log-file cudatestmemcheck.log python gen_xid.py
会发现控制台打印了一堆错误:
-
定位故障
此时执行nvidia-smi -q
查看ecc似乎也没什么异常。
查看系统内核日志信息:dmesg -T |grep -i xid
发现有:NVRM: Xid (PCI:0000:00:0d): 43
根据nvidia官方提示xid 43报错: 当用户应用程序访问驱动软件引起的故障并且必须终止时,会记录此事件。 但是GPU 会保持健康状态。在大多数情况下,这并不表示驱动程序错误,而是用户应用程序错误。
四、 XID errors 说明
-
什么是 Xid errors:
XID消息是来自NVIDIA驱动程序的错误报告,该报告打印到操作系统的内核日志或事件日志上。 XID消息表明发生了一般的GPU错误,通常是由于驱动程序错误地编程或者发送给 GPU 的命令被损坏 所导致的。Xid可以指示GPU硬件问题,NVIDIA软件问题或用户应用程序问题。
xid提供给用户和 NVIDIA厂商 都可以使用的诊断信息,极大帮助了诊断问题。 -
如何使用Xid:
Xid 消息旨在用作调试指南。由于许多问题可能有多种可能的根本原因,因此仅从 Xid 值了解每个问题并不总是可行的。 例如,Xid errors可能表明用户程序尝试访问无效内存。但是,从理论上讲,由于 PCIE 或帧缓冲区(“FB”)问题导致的内存损坏可能会损坏任何命令,从而导致几乎任何错误。一般来说,Xid 分类可以作为进一步研究每个问题的起点。
-
辅助定位工具
-
nvidia-smi: 它是一个随 NVIDIA 驱动一起安装的命令行程序。它会报告系统中每个 GPU 的基本监控数据和硬件参数、配置数据。 nvidia-smi 可以列出 ECC 错误计数 (Xid 48) 并指示电源线是否已拔出 (Xid 54) 等。同时运行“nvidia-smi –q”以获得全面输出。
-
DCGM: nvidia data center gpu manager是一套用于在集群环境中管理和监控 NVIDIA 数据中心 GPU 的工具。它包括主动健康监控、全面诊断、系统警报和治理策略(包括电源和时钟管理)。 DCGM 诊断是一款运行状况检查工具,可以检查基本的 GPU 运行状况,包括是否存在 ECC 错误、PCIe 问题、带宽问题以及运行 CUDA 程序的常见问题。
-
nvidia-bug-report.sh : 它是与 NVIDIA 驱动一起安装的脚本。它从系统收集调试日志和命令输出,包括内核日志和NVIDIA驱动程序本身收集的日志。该命令应以 root 身份运行。nvidia-bug-report.sh 通常会快速运行,但在极少数情况下可能会运行缓慢。最多需要一小时才能完成。如果命令仍然挂起,请使用附加参数运行命令,如下所示:nvidia-bug-report.sh --safe-mode --extra-system-data
-
五、 XID errors 清单
列举生产中常见的xid事件:
-
XID 13: GR: SW Notify Error
:
常见原因:一般为用户应用程序故障。通常这是一个数组下标越界错误。也有可能是非法指令,非法寄存器等其他情况。
极少数情况下 会出现硬件故障或者软件错误导致XID 13 -
XID 31: Fifo: MMU Error
:
常见原因: 一般为应用程序级别故障。 当MMU上报故障时,当gpu芯片上的应用程序进行非法地址访问时,会触发此类故障并记录。 -
XID 32: PBDMA Error
:
常见原因: 一般是硬件问题。当 DMA 控制器报告故障时,会记录此事件,该控制器通过 PCI-E 总线管理 NVIDIA 驱动程序和 GPU 之间的通信流。这些故障主要涉及PCI的质量问题,一般不是由用户应用程序操作引起的。
解决方式: 联合硬件运维处理
-
XID 43: RESET CHANNEL VERIF ERROR
:
常见原因:基本是用户应用程序故障。不影响GPU的健康状况
解决方式: 联合开发同事处理
-
XID 45: OS: Preemptive Channel Removal
:
常见原因: 通常这并代表发生故障。用户程序退出中止,control-C cpu reset sigkill 都会导致此类事件 -
XID 48: DBE (Double Bit Error) ECC Error
:
常见原因:怀疑硬件故障。当gpu检测到不可修正的错误,会记录该事件。 -
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
解决方式:联合硬件同事排查
-
XID 74: Nvlink ERROR
:
常见原因:多半为硬件故障。多卡GPU之间使用nvlink进行通讯时出现问题,链路故障或者g卡故障都会导致。
解决方式:可自行通过gpu reset 或者重启节点 进行恢复。如果此时还无法恢复,需要进行维修处理。
-
XID 79: GPU has fallen off the bus
:
常见原因: 多半是硬件问题。具体现象为当gpu驱动尝试通过PCI-e总线访问GPU,访问失败。此事件通常由PCIe链路上的硬件故障引起,导致GPU由于链路中断而无法访问。
解决方式:硬件维修
-
XID 93: Non-fatal violation of provisioned inforom wear limit
:
常见原因: 当GPU驱动程序因违反使用nvflash-elsesessionstart导致更新infoROM失败。大多数情况下,这并不是软件驱动故障。 -
XID 94, 95: CONTAINED/UNCONTAINED ECC ERRORs
:
常见原因:当应用程序遭遇到 GPU 不可纠正的显存 ECC 错误时,NVIDIA 错误抑制机制会尝试将错误抑制在踩到硬件故障的应用程序,而不会让错误导致 GPU 上的所有应用程序受到影响。当抑制机制成功抑制错误时,会产生Xid 94事件,仅影响遭遇了不可纠正 ECC 错误的应用程序。 Xid95 代表抑制失败,此时表明运行在该 GPU 上的所有应用程序都已受到影响。
解决方式: 联合硬件同事处理
-
XID 110 SECURITY FAULT ERROR
:
常见原因:硬件故障。
解决方式: 恢复最近所有的系统硬件修改,并冷启动系统。需联系硬件处理。
-
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)