当前位置: 首页 > news >正文

NVIDIA Container Toolkit 报错 Failed to initialize NVML: Unknown Error 的解决

解决容器突然丢失GPU连接问题的方法总结

问题描述

在特定条件下,容器可能会突然与它们最初连接的GPU分离,导致出现Failed to initialize NVML: Unknown Error错误。此问题主要发生在使用systemd管理cgroup的环境中。

 

问题根源

最新版本的runc要求符号链接存在于/dev/char下的任何设备节点中,但NVIDIA设备当前不提供这些符号链接。

 

受影响环境

  • Docker环境使用containerd/runc并启用systemd cgroup驱动
  • K8s环境使用containerd/runc并设置SystemdCgroup = true
  • K8s环境使用cri-o/runc并启用cgroup_manager = "systemd"

 

问题验证方法

Docker环境测试验证


$ sudo docker exec -it 90452cca0281 bash
root@90452cca0281:/# nvidia-smi 
Thu Jun 12 05:58:56 2025       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.230.02             Driver Version: 535.230.02   CUDA Version: 12.4     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA A100-SXM4-40GB          Off | 00000000:2B:00.0 Off |                    0 |
| N/A   34C    P0              34W / 400W |    423MiB / 40960MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
|   1  Tesla V100-PCIE-32GB           Off | 00000000:84:00.0 Off |                    0 |
| N/A   34C    P0              36W / 250W |    310MiB / 32768MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------++---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
root@90452cca0281:/# exit
exit#执行systemctl daemon-reload 后出现Failed to initialize NVML: Unknown Error$ systemctl daemon-reload 
$ docker exec -it 90452cca0281 bash
root@90452cca0281:/# nvidia-smi 
Failed to initialize NVML: Unknown Error

 

解决方案

推荐解决方案

在containerd或cri-o中禁用systemd cgroup管理

​​
编辑/etc/docker/daemon.json 修改Docker配置(本人最终采用的方案)​​

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

 
 

其他解决方案

 

​​使用nvidia-ctk工具创建符号链接​​
sudo nvidia-ctk system create-dev-char-symlinks --create-all

创建udev规则(个人测试未成功)​​

cat /lib/udev/rules.d/71-nvidia-dev-char.rules
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-ctk system create-dev-char-symlinks --create-all"
  • 参考官方文档:https://github.com/NVIDIA/nvidia-container-toolkit/issues/48
     
     
降级NVIDIA Container Toolkit到特定版本
  • 参考文档:https://blog.csdn.net/weixin_43408232/article/details/143955501

 
 

个人经验分享

我尝试了官方文档中推荐的udev规则方法,但未能成功解决问题。最终通过修改Docker的cgroup驱动为cgroupfs的方式解决了问题。

配置方法:

编辑/etc/docker/daemon.json
添加或修改为:

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

重启Docker服务后问题解决

相关文章:

  • 实现AI数据高效评估的一种方法
  • SQL进阶之旅 Day 27:存储过程与函数高级应用
  • 鸿蒙 UI 开发基础语法与组件复用全解析:从装饰器到工程化实践指南
  • NAS文件共享、PACS影像存储,速率提升400%?
  • Kotlin 协程与 ViewModel 的完美结合
  • 【二分答案1-----切木棒】
  • 视频自动生成字幕原理和自动生成字幕的应用实例
  • 事件(Event)
  • 同时装两个MySQL, 我在MySQL5的基础上, 安装MySQL8
  • 循环数组中相邻元素的最大差值
  • java BIO/NIO/AIO
  • 【unitrix】 1.3 Cargo.toml 文件解析
  • SM3算法Python实现(无第三方库)
  • 【GitOps】Kubernetes安装ArgoCD,使用阿里云MSE云原生网关暴露服务
  • 山东大学《Web数据管理》期末复习宝典【万字解析!】
  • HarmonyOS运动开发:打造便捷的静态快捷菜单
  • ArkUI-X在Android上使用Fragment开发指南
  • ThreadLocal原理及内存泄漏分析
  • 【从零学习JVM|第八篇】深入探寻堆内存
  • Android 开发中,Intent 和 Bundle 组件间传递数据的几种方式
  • 汾阳网架公司/seo这个行业怎么样
  • tp5手机网站开发/郑州网络推广代理顾问
  • 青州做网站的电话/深圳关键词优化软件
  • 企业电子商务网站建设问题/软件开发工具
  • 手机网站怎么在电脑上打开/优化关键词排名提升
  • 如何做高清pdf下载网站/长沙网站推广智投未来