XID错误消息是NVIDIA驱动报告的错误信息,一般会将错误消息记录在/var/log/messages(或使用dmesg -T查看),如果一个节点有XID错误消息,说明节点发生了与GPU有关的错误,这个错误有可能是由于GPU硬件故障引起,也有可能是软件问题引起的(比如:运行的程序有bug)。
每个XID 错误消息都有一个编号,从XID错误描述的官方页面可以查询得到。例如:如果发生了XID为43的错误,那么可以通过官方网站查询到XID 43的描述信息:
更详细的描述信息:
可以知道XID 43产生的原因一般是因为用户的应用程序代码有bug导致的。
模拟产生XID错误
为了能够展示监控效果,需要产生XID错误,本次示例将提交一个能够产生XID 43的任务,该任务的yaml文件如下:
apiVersion: batch/v1
kind: Job
metadata:
name: xid43-sample
spec:
parallelism: 1
template:
metadata:
labels:
app: xid43-sample
spec:
containers:
- name: xid-sample
image: registry.cn-beijing.aliyuncs.com/ai-samples/make-xid43:1.0
command:
- sleep
- 365d
resources:
limits:
nvidia.com/gpu: 1 #申请一张GPU卡
workingDir: /root
restartPolicy: Never
使用kubectl apply提交该任务,等待任务处于Running,使用kubectl get po查询任务Pod状态:
# kubectl get po
NAME READY STATUS RESTARTS AGE
xid43-sample-qzfs7 1/1 Running 0 4m32s
可以看到,任务的Pod处于Running状态。
然后使用kubectl exec进入pod内部:
# kubectl exec -ti xid43-sample-qzfs7 bash
进入pod以后,使用如下命令产生一个XID 43错误:
root@xid43-sample-qzfs7:~# cuda-memcheck --log-file cudatestmemcheck.log python gen_xid.py
监控XID错误
登录到GPU监控2.0大盘,具体操作如下:
-
在 集群列表 页面中,单击目标集群名称或者目标集群右侧 操作 列下的 详情 。
-
在集群管理页左侧导航栏中,选择 运维管理 > Prometheus监控 。
-
在 Prometheus监控 大盘列表页面,单击 GPU监控 页签,您分别可以看到 集群维度的GPU监控大盘 和 节点维度的GPU监控大盘 , 点击“集群维度GPU监控大盘” 。
从“The Last one XID Error”这个面板可以看到,cn-beijing.192.168.10.169的0号GPU卡发生了XID 43错误:
当然也可以在“节点维度的GPU监控大盘”查看,选择节点为cn-beijing.192.168.10.169,在“The Last one XID Error”这个面板可以看到,0号GPU卡发生了XID 43错误。
总结
本篇文档介绍了如何利用GPU监控2.0查看节点是否发生XID错误,目前监控XID错误的能力还是比较弱,比如:如果是一张GPU上运行多个应用,如果有应用产生XID错误,当前还无法显示该XID错误是由哪个程序产生的。