使用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