之前为了省事,直接用CUDA自带的NVIDIA driver,其间一直没有问题,nvidia-smi可以成功显示显卡情况
但是nvidia-settings不能用
有一天心血来潮,看到有人安利prime-indicator,可以非常简单切换显卡(苦于我的GPU只能跑程序,什么3D渲染,图形界面全用的服务器自带的集显),所以就下载了一个,settings研究打不开,所以就点击了Quick switch Graphics, 告诉我要log out什么东西,我就确定了,之后跳回登陆界面,输入密码后卡死。(事实证明瞎折腾就是给自己挖坑),之后重启。
对,就是这个重启!!他似乎帮我更新了什么乱七八糟的东西,当我再次使用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.
之后我就开始了漫长的修复之路(辛酸史)
- 查看系统拥有的内核
grep menuentry /boot/grub/grub.cfg
只有5.3.0-45-generic和5.3.0-46-generic,切换至5.3.0-45,发现仍然没有解决问题。 - dkms大法
ls /usr/src #查看驱动版本
我的是nvidia-440.64.00
所以果断
sudo dkms install -m nvidia -v 440.64.00
告知,nvidia440.64.00 has already install on 5.3.0-46-generic(大概是这么说的),方法崩溃
- 检查bios中的secure boot
发现是disable 没有问题 - 安装旧的内核
比如5.3.0-28, 安装完毕,修改grub进入!
sudo gedit /etc/default/grub #进入文件
#修改
GRUB_DEFAULT = 0 #原始
GRUB_DEFAULT = "1> 4" #改成这样
这里修改的GRUB_DEFAULT需要根据自己的情况来,通过grep menuentry /boot/grub/grub.cfg来查看自己的内核顺序,然后从上往下,第一个是0。 1代表进入Ubuntu高级选项,4代表选择的内核顺序。中间有个空格。
修改完之后
sudo update-grub #更新
reboot #重启
然后我的服务器就失联了,之后找人去看,发现旧内核里面没有网,ifconfig和ifconfig -a都只有lo一个端口。然后托人下载了网卡驱动,去安装,重启,发现还是没网,(大概是驱动不匹配)。放弃了,回到原来的kernel
- 重装nvidia驱动
sudo apt-get --purge remove nvidia-*
sudo apt-get autoremove #删除驱动
这一步不能将CUDNN等删去。
之后通过cuda重装,nvidia-smi依旧不行;
通过ppa重装,nvidia-smi依旧不行;
通过软件与更新安装,还是不行;
通过.run文件安装,安装途中报错,也是关于driver和kernel的问题。
之后也尝试了什么modprobe nvidia等方法,都报错。
解决方法
想着可能是内核不完全的问题,就安装了一下kernel的相关包
sudo apt-get install kernel*
其间发现blacklist里有一个blacklist-nvidia.conf文件,在/etc/modprobe.d下面,里面的内容是
blacklist nvidia
blacklist nvidia-uvm
...
... #记不得了
果断删掉了。
安装kernel包的时候,会新装很多内核,所以需要再次进入grub,把default改回当前使用的版本,否则很可能重启之后再次失联!
再次重启,问题解决,一切都回来了!!
然后我果断的
(个人经历,有点无厘头,希望对广大网友有所帮助,毕竟都是板砖工,能不重装就不重装)