问题
准备用服务器GPU训练模型时,发现nvidia-smi命令报错:Failed to initialize NVML: Driver/library version mismatch
原因
Ubuntu自动更新了显卡驱动,导致内核驱动版本和系统驱动不一致
- 查看显卡驱动内核版本:
cat /proc/driver/nvidia/version
- 查看系统驱动版本
sudo dpkg --list | grep nvidia-*
这是解决问题之后,两个版本已经一致(535.104.12),原来的显卡驱动内核版本是535.86.10。
解决方案
驱动介绍
在看了很多解决的帖子之后,被显卡驱动,驱动内核弄得一头雾水,所以又查找了相关的介绍,我的大致理解如下(很可能不正确,抛出来问题求大佬指正):
- 系统驱动:系统用来操作硬件的工具,类似于网卡驱动,没有显卡驱动系统就会导致硬件无法识别。
- 显卡驱动内核:用来支持深度学习计算的相关驱动,对于不需要做深度学习的机器来说无需安装。
- CUDA:英伟达GPU上的并行计算框架
- Cudnn:用于神经网络的加速包
两个驱动的版本需要一致显卡才能正常工作,我理解的四者之间的关系是:
系统驱动->显卡驱动内核->CUDA->Cudnn
解决方案
升级驱动版本
重启大法,直接简单!!
很多人测试可以,可惜解决不了我的问题。
重装驱动
在英伟达官网选择自己的显卡型号,点击搜索
点击发布重点下面这个链接:
可以看到所有的驱动版本,选择系统驱动版本一致的版本点进去
可以看到对应的CUDA版本,去官网选择合适自己的版本,在服务器上运行下面的命令,记得给文件加运行权限:
等待一会,提示:
│ Existing package manager installation of the driver found. It is strongly │
│ recommended that you remove this before continuing.
选择continue,再输入accpet,然后把系统驱动前面的选择框去掉,系统驱动已经有了不需要安装,然后点击安装,等待完成。
如果还是不行,将新的cuda加个软连接:
sudo ln -s /usr/local/cuda-x-x /usr/local/cuda
其中X-X是前面说的安装的版本。
我用这种方法成功解决问题,猜想是安装cuda时自动安装了对应的显卡内核驱动。最后附上一些参考资料。
参考资料:
- https://zhuanlan.zhihu.com/p/265874525
- https://blog.csdn.net/u011119817/article/details/100520669
- https://blog.csdn.net/zywvvd/article/details/115500412