本文最后更新于:2025年8月22日 下午
在 Docker 中使用 GPU 时,过一段时间后就会报错
Failed to initialize NVML Unknown Error, 本文记录原因和解决方案。
问题描述
-
Ubuntu 22/24 都存在该问题,应该和操作系统版本无关
-
Nvidia 驱动 535
-
容器中 接入 GPU
此时容器中运行 nvidia-smi 可以看到显卡信息
过几个小时之后,再次运行 nvidia-smi ,报错:
1 | |
问题原因
The host performs daemon-reload (or a similar activity). If the container uses systemd to manage cgroups, daemon-reload “triggers reloading any Unit files that have references to NVIDIA GPUs.” Then, your container loses access the reloaded GPU references.
主机执行守护进程重新加载(或类似活动)。如果容器使用 systemd 来管理 cgroup,则 daemon-reload 会触发重新加载任何引用 NVIDIA GPU 的 Unit 文件。然后,您的容器将无法访问重新加载的 GPU 引用。
问题复现
使用这一解决方案前需要确认是这个问题,方法很容易。
当您的容器仍然具有 GPU 访问权限时,打开一个“ 主机 ”终端并运行:
1 | |
然后,返回到容器。如果容器中的 nvidia-smi 立即出现问题,您可以继续使用解决方法。
解决方案
最简单的方法是通过 docker daemon.json 禁用容器中的 cgroup。如果禁用 cgroups 不会伤害您,请按照以下步骤作。一切都在宿主机系统中完成。
1 | |
然后,在文件中添加此参数设置。
1 | |
不要忘记在此参数设置之前添加逗号。这是一个众所周知的 JSON 语法,但我认为有些人可能不熟悉它。这是我的机器上编辑的示例文件。
1 | |
最后一步,在主机中重新启动 docker 服务。
1 | |
注意 :如果您的容器运行自己的 NVIDIA 驱动程序,则上述步骤将不起作用.
参考资料
- https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours
- https://bbs.archlinux.org/viewtopic.php?id=266915
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付