使用nvidia-smi报错,
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running
,本文记录解决方案。
问题原因
先说我发现的几种情况作为原因结论:
- 显卡与驱动程序不兼容导致报错
- 内核版本过高导致较为落后的显卡驱动与先进的内核版本不兼容导致报错
- gcc 版本过低,导致安装驱动过程中编译的文件出现问题或无法运行
解决方案
上述几种问题隐蔽性逐渐升高,可以依次解决进行逐个排查,啥时候 nvidia-smi 好了啥时候算
针对问题一
考虑重新安装适合当前环境的显卡驱动程序
- 参考 Linux 驱动安装
如果 nvidia-smi 仍然报错,进行下一步
针对问题二
- 查看当前驱动版本
ls /usr/src/ | grep nvidia
查看文件夹下 nvidia-***.***.***
的文件夹,字符串中nvidia-
后面的部分都是驱动版本
代码语言:javascript复制例如:
$ ls /usr/src/ | grep nvidia
nvidia-470.86
- 执行命令
sudo apt-get install dkms
sudo dkms install -m nvidia -v 470.86
- 或者上述命令执行时报错:
gcc: error:unrecognized command line option '-fstack-protector-strong'
我出这个错误的时候环境为:Ubuntu18.04.4,gcc版本为4.8.5 (事实证明问题症结出在 gcc版本太低上,不过这是后话,先尝试解决这个问题)
代码语言:txt复制- 进入自己当前使用的内核文件夹,以 `/usr/src/linux-headers-5.3.0-510-generic` 为例
- 修改 文件夹中的 `Makefile` 文件
- 将带有`-fstack-protector-strong` 的一行注释掉
代码语言:txt复制- 之后可以再次尝试之前的命令如果 nvidia-smi 仍然报错,可以尝试使用低版本内核开机尝试查看自己的内核版本:
代码语言:javascript复制uname -r
# 或
cat /proc/version
- 重启系统,在进行ubuntu启动引导的界面时,就是刚开始叫你选择操作系统的界面,选择“ubuntu高级选项”,选择一个以前的内核版本,作者的新版本是5.3.0-40-generic,然后选择一个离新版本最接近的低版本内核5.3.0-26-generic,然后成功进入系统
如果 nvidia-smi 仍然报错,进行下一步
针对问题三
如果 nvidia-smi 仍然报错,进行下一步
针对问题三
查看CUDA官网版本需求
如果是 CUDA 用户,需要弄清楚 gcc 需求版本
- Nvidia 对使用环境的系统内核和 gcc 版本有基本的对应需求
- 对于不同的CUDA版本有不同的需求,在CUDA 文档中选择自己需要的CUDA版本,此处以 11.3.1 为例
- 选择 11.3.1 后选择
Installation Guide Linux
:
- 查看 Table 1. Native Linux Distribution Support in CUDA 11.3
升级 gcc
如果确定了自己的 gcc 版本低得离谱,可以尝试升级 gcc 修复错误
- 查看 gcc 版本:
gcc -v
- 升级 gcc 可以直接卸载后重新安装
sudo apt remove gcc
sudo apt install gcc
- 之后重新安装显卡驱动
sudo apt-get install nvidia-driver-470 nvidia-settings nvidia-prime
- 我的错误到这里已经解决了
参考资料
- https://blog.csdn.net/u012114438/article/details/104425573
- https://cloud.tencent.com/developer/article/2066705
- https://blog.csdn.net/sumisu666/article/details/106119064/
- https://blog.csdn.net/qq_23076153/article/details/112754824