容器内执行nvidia-smi报错提示Failed to initialize NVML

使用GPU的容器运行了一个训练任务,一段时间以后查看训练任务失败,进POD容器内执行nvidia-smi返回"Failed to initialize NVML: Unknown Error"。

目前该问题是一个已知问题,是由于在docker环境中daemon.json文件中配置了

"exec-opts": ["native.cgroupdriver=systemd"]

同时通过systemctl daemon-reload等命令守护进程重载命令,导致容器化的GPU工作负载可能会突然失去对GPU的访问,GPU目前不提供自动创建重新链接设备的符号的创建,从而出现以上问题。

目前唯一在docker上唯一解决的方法是cgroup驱动不要使用systemd,修改成以下配置

"exec-opts": ["native.cgroupdriver=cgroupfs"]

另外有些containerd环境可能也有上述问题,但是我本地使用的container1.7.10这个版本没有复现该问题,但是在docker环境下100%复现,环境是否存在这个问题可以通过以下方式复现,在POD中添加

command: ["bash", "-c"]
args: ["while true; do nvidia-smi -L; sleep 3; done;"]

然后创建POD容器

kubectl logs -f -n <namespace> <pod_name>
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)

这时我们在宿主机执行daemon-reload命令

systemctl daemon-reload

然后再此查看POD容器日志

kubectl logs -f -n <namespace> <pod_name>
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
GPU 0: NVIDIA GeForce RTX 2060 (UUID: GPU-c455907b-b566-3bf7-e873-8115c0fb869a)
Failed to initialize NVML: Unknown Error
Failed to initialize NVML: Unknown Error
Failed to initialize NVML: Unknown Error

这样就复现了该问题,该问题可以查看github:https://github.com/NVIDIA/nvidia-container-toolkit/issues/48



内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/962.html