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

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服务后问题解决

http://www.xdnf.cn/news/13901.html

相关文章:

  • Java8新特性 consumer
  • 访客预约到访填写表单如何制作?
  • C语言二级指针和void *应用
  • 质因数分解_java
  • 前端开发冷知识-requestIdleCallback优化主线程任务调度的API
  • 微服务集成seata分布式事务 at模式快速验证
  • 《模拟》题集
  • 图像处理 | 如何动态调整CLAHE算法中的ClipLimit参数
  • DeepSeek AI功能演示:如何生成Verilog脚本
  • 【基础】每天掌握一个Linux命令 - systemctl
  • PurgeCSS:CSS瘦身优化性能终极解决方案
  • Geeksend 邮箱验证:低成本验证
  • 文件的秒传、分片上传以及断点续传 || Redis缓存减轻数据库读写压力
  • 2.0 第一个Node节点
  • 6.12 操作系统面试题 进程管理
  • Vue 3 前端和 Spring Boot 后端生成 Docker 镜像的标准做法
  • Spring Boot 整合 Smart-Doc:零注解生成 API 文档,告别 Swagger
  • 电压互感器类型与消谐器需求的关联
  • LeetCode 137 有限状态自动机解法原理详解
  • 测试:AWS SDK for JavaScript v2 迁移到 v3
  • 帆软报表实现层层下钻继承上上层报表参数
  • ollama+docker+dify配置指南
  • CQL3D输入文件及参数解释
  • linux中执行脚本命令的source和“.”和“./”的区别
  • 校园网数据安全防线
  • sed命令在修改Rocky Linux镜像源配置文件中的作用:
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月12日第106弹
  • 晶圆搬运机器人与RFID半导体读卡器携手赋能半导体制造高效变革
  • 探索铸铁试验平台在制造行业的卓越价值
  • HALCON第一讲->数据结构、语法规则与思路