Ubuntu16.04重装CUDA与显卡驱动

起因是nvcc -V命令不能用,系统提示我可以

sudo apt-get install nvidia-cuda-toolkit

但是千万不要执行这个命令,因为系统认为你没装CUDA,实际上你是装了的,只不过~/.bashrc里面没有指定CUDA的安装路径,导致CUDA自带的命令用不了。

但是我执行了……这条命令会默认下载cuda7.5,然后下载之后,重启机器,虽然nvcc命令可以用了,但是程序却跑不了了(因为cuda runtime的版本太低了)。

然后我就重新装了一下CUDA Toolkit。这个理论上按照英伟达官网上的步骤一步一步来就行。我下载的是最新版的cuda10.2:

https://developer.nvidia.com/cuda-downloads

但是到最后一步报了一堆奇奇怪怪的warning:

pkg:警告:无法找到软件包 XXXX

我查找了一下,网上给出了一个解决方案:

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old
sudo mkdir /var/lib/dpkg/info
sudo apt-get update
sudo apt-get -f install
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info

在这之后,我把CUDA的安装地址放到了~/.bashrc里面,然后nvcc -V,就可以看到CUDA版本了。

但是在CUDA安装完成之后,我发现nvidia-smi又不能用了……

首先我执行

lsmod | grep -i nvidia

结果发现nvidia相关的组件一个都没运行。

然后我找了一下,网上有说是Linux内核版本升级的问题,要进行内核回退。但是我不太敢碰linux内核,怕出问题。

后来我就想,nvidia-smi命令找不到,本质上还是显卡驱动出了问题,那重装一下显卡驱动应该就好了。

这里有一篇如何重装nvidia显卡驱动的文章,写得很好:

https://www.linuxidc.com/Linux/2019-02/157170.htm

我使用的是第二种办法,挑了一个看起来比较新的驱动装了一下:

sudo apt-get purge nvidia*
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
ubuntu-drivers devices
sudo apt install nvidia-410

然后重启,执行nvidia-smi,发现可以了。

但是在这之后,我发现pytorch1.4看不见显卡了,执行torch.cuda.is_available() 结果为 False。

我尝试了好几种办法,但是pip下来的pytorch1.4就是看不到显卡。而conda下东西太慢了,我又懒得等。奇怪的是,pip下来的pytorch1.2却可以看见显卡。

我重新换了CUDA Toolkit10.0版本,但是还是无法解决这个问题。后来,经过对比几台服务器的配置,我发现了问题所在。

CUDA 有两种API,分别是 运行时 API 和 驱动API,即所谓的 Runtime API 与 Driver API。前者对应的是CUDA Toolkit下载下来的版本,即nvcc -V显示的版本,而后者对应的是nvidia driver的版本,即nvidia-smi命令现实的版本。我的CUDA Driver版本是10.0,而另外几台服务器的CUDA Driver是10.1的。

我在这个网站上找了实验室显卡支持的NVIDIA Driver:

https://www.nvidia.com/Download/Find.aspx?lang=en-us

然后找了一个比410更新版本的驱动,按照上面的办法安装后,重启,问题就解决了。总之,把NVIDIA Driver换成430(其实这个数字和CUDA版本号应该也有对应关系,但是我没找到)后,nvidia-smi命令显示的CUDA版本变成了10.1,而pytorch1.4也可以看见GPU了。至于为什么pytorch1.4只支持CUDA10.1,我看网上也有人在讨论,但是我也懒得纠结了。

有关CUDA运行时和CUDA驱动的关系,有一篇文章写得很好:

www.cnblogs.com/marsggbo/p/11838823.html

猜你喜欢

转载自blog.csdn.net/bonjourdeutsch/article/details/104932196