0. 删除卸载用命令(慎用)
# sudo rm /etc/apt/sources.list.d/cuda*
1. 安装NVIDIA显卡驱动
如果对显卡驱动版本没有特别要求或者实在搞不清楚,建议直接跳到第二节,在安装CUDA的时候让它自动帮你安装驱动。
#添加NVIDA显卡驱动库
sudo apt update
ubuntu-drivers devices
会显示你电脑的GPU型号和可安装的驱动版本。其中带有recommended是建议安装的版本。驱动一般认为是越新的越好。
注意这里的提供的信息并不是最全的,有可能有适合你GPU的更高版本的驱动并未包含在内。可以去官网查询适合你的GPU的最新驱动版本。尤其是当你拥有多个不同型号的GPU时,更需要仔细查询。比如我的显卡是2080 Ti:
点击SEARCH搜索后得到结果(执行于2020/09/29):
得到该显卡最新支持的驱动是450.66版本。与用ubuntu-drivers devices命令得到的输出有些许不同,后者显示的版本更低一些(440)。具体适用情况如何我不敢保证,如果你要求不高,就安装后者建议的版本,如果你觉得最新的还是比较好,也可以安装450。
其实在添加了NVIDIA显卡驱动库后,除了用ubuntu-drivers devices这个命令,还可以手动查询可安装的driver版本:
sudo apt list nvidia-driver*
可以看到是库里面是有450的,在确认了你想要安装的驱动版本,如450,直接安装:
#sudo ubuntu-drivers autoinstall #让Ubuntu自动帮你选择版本并安装
sudo apt install nvidia-driver-450
因为我是之前就安装好的,所以可以看到我安装的是440.64 。
nvidia-smi这个命令日后将会经常用到,来查看GPU的信息和使用情况(注意右上角的CUDA Version并非显示我们安装的CUDA,事实上你即使没有安装CUDA,该指令右上角也会这样显示)。
查看训练进程时的GPU情况一般需要持续监视该输出:
#即每隔0.5秒执行一次nvidia-smi;
2. 安装CUDA
2.1 确认要安装的CUDA版本
根据电脑已有的GPU驱动,先去NVIDIA官方网站查看该驱动版本所能支持的最高CUDA版本(Table 1):
对我安装的440.64而言,可以安装最高为10.2的CUDA。如果你安装的是450,那么是可以安装CUDA 11.0的。
接下来不妨了解一下我们可以安装的CUDA都支持什么版本的Tensorflow,进入Tensorflow官网检查CUDA版本适配:
可知CUDA 10.1可以支持最新的tensorflow-2.20。注意这里用的不是>=10.1而是指定10.1,意味着CUDA版本并不向下兼容。所以你如果要跑tensorflow1.13.1的老代码,还是要装CUDA 10.0;同样的,如果你要用最新的tensorflow-2.2.0,那么你也不能装CUDA 10.2而只能是CUDA 10.1。
PyTorch也不妨看一下,PyTorch官网下方便有CUDA版本适配的信息:
可以看到Pytorch最新的稳定版(Stable 1.5)可以选择CUDA 9.2,10.1和10.2。
综合考虑下来,目前还是装CUDA 10.1比较合适。
但是也先先别急着说那我是不是就不能安装最新的CUDA 11.0了,其实这里你依然可以安装CUDA 11.0,因为你可以在conda创建的虚拟环境里面使用别的版本的CUDA。这样做之后,安装在系统上的CUDA还是11.0,而在conda虚拟环境里面,安装的CUDA可以是10.0来运行tensorflow-2.0.0。用conda虚拟环境配置cuda的教程可以参考我的另一篇文章的第7节。
注意这种虚拟环境里面和系统里面的CUDA版本不一致是可能会碰到一些问题的。一般来说能保持一致还是保持一致。
总之,版本适配问题是非常容易发生且让人头秃的,我们要考虑:GPU硬件型号,GPU驱动,CUDA,TensorFlow,PyTorch还有之后会讲的cuDNN。但只要熟用这些官网资讯,就能得到最新最准确的指导,按部就班,就能保证最大可能地安装成功。
2.2 安装CUDA
偷鸡方法(不建议):
Ubuntu 官方库里有CUDA,提供了安全无痛的CUDA安装方式:
#sudo apt-get autoremove --purge cuda* *cublas*
sudo apt update
sudo apt install nvidia-cuda-toolkit
nvcc --version
缺点是无法指定CUDA版本,安装路径也和NVIDIA官方的CUDA路径(/usr/local)不同,故安装cuDNN时可能会有问题。
NVIDIA官方方法:
(2019/09/28更新):最新的CUDA 11.1支持Ubuntu 20.04了:
以下是更新前的内容:
由于撰写本文时Ubuntu 20.04刚发行不久,NVIDIA CUDA官网暂时未支持20.04,但也不代表适合Ubuntu18.04的CUDA们就无法在20.04上使用,只是会有一点问题需要解决。
进入NVIDIA CUDA库:
以CUDA 10.2为例。点击CUDA Toolkit 10.2即可进入下载界面:(如果你熟悉英文,建议同时也打开对应的Versioned Online Documentation,按照官网指示安装)
需要注意的是最后一个选项,括号里的:
local代表本地安装:下载CUDA文件至本地,执行安装程序,安装时无需联网,过程比较复杂;
net代表联网安装:通过执行指令将NVIDIA CUDA库(适配Ubuntu 18.04)到我们的软件地址库中,再在命令行里自动安装,全程需要联网。
这里我们只介绍联网安装方法。选中deb(network)后,页面下方会给出指令(Installation Instructions),一个个按顺序执行,最后的安装指令可以先不执行:
"deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
sudo apt list cuda*
与官网的添加完库之后直接安装cuda不同,添加完库之后先查看现在可以安装哪些cuda软件。执行了apt list cuda*后,结果显示有很多不同版本不同代号的cuda可供安装,包括:cuda,cuda-10-0,cuda-10-1,cuda-10-2,还有各个版本的cuda-toolkit-x-x等等等等:
NVIDIA官方给出的各后缀解释:
这张表的第一行也解释了为什么我们没有遵循官网指示的最后一步sudo apt install cuda,因为这种方式默认安装最新版本且包含驱动。为了更准确地安装特定版本的CUDA且不安装驱动,应该用更详细的名称来指示安装。
另外也可以发现,虽然我进入的是CUDA Toolkit 10.2的安装界面,但选择联网安装deb(network)添加了CUDA库后,是可以安装10.1或10.0的。
总之,在上表中确定了要安装的CUDA版本的代号后,执行安装命令即可:
sudo apt install cuda-toolkit-10-2 #只安装CUDA 10.2
#sudo apt install cuda-10-2 #安装CUDA 10.2。包含驱动,版本自动选择。
7.3 检查CUDA
添加环境变量并检查CUDA版本。
export
接着检查CUDA是否正常工作。
#安装cuda 10.x的样本到~目录下,替换x为你的版本号
如果你是在Ubuntu20.04上通过添加Ubuntu18.04的CUDA库下载的CUDA,那么你应该会碰到gcc版本报错,显示不支持8以上的gcc。只需要添加新的版本的gcc再执行make及之后的代码即可:
#查看本来的gcc版本
sudo apt install build-essential
sudo apt -y install gcc-8 g++-8
执行deviceQuery后会输出一些信息,主要检查“Detected X CUDA Capable device(s)”是否检测到了你实际上拥有的GPU数量;及“Device x: ...”名称处显示的GPU型号是否正确;和最下出的Result = PASS,即表示通过测试:
这节最后,因为总会出现各种安装问题,这里给出清除nvidia驱动和cuda的代码:
"nvidia*"
3. 安装cuDNN
cuDNN是加速CUDA GPU运算的扩展包,非必须。
进入cuDNN官网下载界面(下载cuDNN需要登陆,注册一个账号登陆即可),根据CUDA版本选择cuDNN版本,展开:
这里也还是暂时不支持Ubuntu20.04,选择18.04的文件下载即可(三个都下载)。在下载的路径上执行安装程序:
cd ~/Downloads
检查cuDNN:
cp -r /usr/src/cudnn_samples_v7/ $HOME #复制样本文件到$HOME文件夹下
cd $HOME/cudnn_samples_v7/mnistCUDNN #进入样本目录
make clean && make #编译
./mnistCUDNN #执行cuDNN测试
输出“Test Passed”说明cuDNN安装成功。