摘要
本文深入探讨了 Docker 容器在长时间运行后,出现 nvidia-smi 找不到 GPU 设备或应用(如 gpustack)提示 GPU 资源掉线的疑难问题。文章分析了问题产生的根本原因,并提供了一套完整、稳健的解决方案:通过正确安装 NVIDIA Container Toolkit (nvidia-ctk),并创建持久化的 GPU 设备符号链接,从而确保容器内 GPU 资源的长期稳定可用。
一、 问题背景与根源分析
在生产环境中,我们经常会遇到一些奇怪的现象:一个配置了 GPU 资源的 Docker 容器,在启动初期运行正常,但经过数小时或数天后,容器内的应用程序突然无法访问 GPU,执行 nvidia-smi 命令会报 “Failed to initialize NVML: Unknown Error” 的错误。 然而,一旦重启容器,一切又恢复正常。
这个问题在长时间运行的 GPU 计算服务(如 AI 推理、数据分析平台 gpustack 等)中尤为突出,严重影响了服务的稳定性。
经过深入研究发现,这个问题的根源在于新版本的容器运行时(如 runc)与 NVIDIA 驱动交互机制的变更。具体来说:
- 依赖于
systemdcgroup 管理:当使用systemd作为 cgroup 驱动时,容器对设备的访问会受到更严格的管理。 - 缺少设备符号链接:新版
runc要求所有注入到容器的设备节点,在主机的/dev/char目录下都存在对应的符号链接。 - 驱动默认行为:NVIDIA 的部分驱动版本默认不会自动创建这些所需的符号链接。
因此,当系统服务状态发生变化(例如执行了 systemctl daemon-reload 命令

最低0.47元/天 解锁文章
1039

被折叠的 条评论
为什么被折叠?



