[Tensorflow] Ubuntu下NVIDIA Driver+CUDA+cuDNN 安装踩坑总结

最近安装了3台workstation, 显卡分布是Quadro P2000, Quadro K220和Quadro 2000。其中第一台工作站是去年新入的,另外两台都是3-5年历史的旧机器了。

第一台的新机器的安装比较顺利,另外两台由于显卡比较老,只能装比较旧版的驱动,因此CUDA也不能装最新版的,由此就出现了许多的问题, 后面会一一和大家细数。

首先来讲一下一个正常的安装步骤。

安装NVIDIA驱动

首先,检测你的NVIDIA显卡型号和推荐的驱动程序的模型。

ubuntu-drivers devices

在这里插入图片描述
从返回信息可以看到,系统推荐的nvidia驱动版本是nvidia-driver-440。
在开始安装nvidia驱动之前,还有一些准备工作要做。

如果你曾安装过其他版本,卸载原有的NVIDIA驱动。

sudo apt-get remove –purge nvidia*

禁用自带的 nouveau nvidia驱动,通过命令创建一个文件。

sudo vim /etc/modprobe.d/blacklist-nouveau.conf

并添加如下内容:

blacklist nouveau
options nouveau modeset=0

执行以下命令,让改动生效。

sudo update-initramfs -u

确认下Nouveau是已经被你干掉,使用命令:

lsmod | grep nouveau

如果在返回信息里没有看到nouveau,则说明已经成功干掉nouveau。

安装nvidia driver

sudo apt-get install nvidia-driver-440

安装完成后,重启

sudo reboot

验证驱动是否安装成功,输入以下命令,如果可以看到下面画面,就说明驱动安装成功了。

nvidia-smi

在这里插入图片描述

安装CUDA

到NVIDIA官网中,找到CUDA下载。
https://developer.nvidia.com/cuda-toolkit
我下载的版本是CUDA Toolkit 10.2。由于CUDA和nvidia-driver有依赖关系,所以选择下载的版本之前,要查看一下CUDA的release note里对nvidia-driver的版本要求。
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

以下是CUDA 10.2的release note里提供的CUDA和nvidia driver的版本兼容关系。
在这里插入图片描述
我安装的驱动版本是440.59,因此可以安装目前最新的CUDA 10.2.89。于是到 官网下载相应的版本。我的操作系统是Ubuntu 18.04,选择下载runfile。
在这里插入图片描述
完成版本选择后,NVIDIA官网还很贴心的给出了linux下载安装包的命令行,和运行安装包的命令。

wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run

此处需要主要的是在运行runfile之前,需要先安装gcc-multilib。

sudo apt install gcc-multilib

进入安装后,先要浏览一段很长的协议,按着回车键往下滚到底,

Do you accept the previously read EULA?
accept/decline/quit:

输入accept

You are attempting to install on an unsupported configuration. Do you wish to continue?
(y)es/(n)o [ default is no ]:

输入y

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit:

输入n, 不安装nvidia-driver

Install the CUDA 9.1 Toolkit?
(y)es/(n)o/(q)uit:

输入y

Enter Toolkit Location
[ default is /usr/local/cuda-9.1 ]:

直接回车,安装到默认目录下。

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit:

输入y

Install the CUDA 9.1 Samples?
(y)es/(n)o/(q)uit:

输入y,我们后面可以使用这些samples来验证CUDA安装是否成功。

Enter CUDA Samples Location
[ default is /home/ubuntu ]:

直接回车,安装到默认目录下。然后就一路到安装结束。
安装介绍后,记得要输出路径。

export PATH=$PATH:/usr/local/cuda-9.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.1/lib64

接下来验证一下CUDA是否安装正确。先输入以下命令试着看一下CUDA的版本。

nvcc -V

让人抓狂的事情又发生了,居然提示没有安装CUDA tool kit,并提示如果需安装请执行apt install nvidia-cuda-toolkit。可是,之前cuda的安装信息明明显示已经将toolkit安装到/usr/local/cuda-9.1了,而且路径也已经输出了。百思不得其解,索性按照提示执行以下命令。

sudo apt install nvidia-cuda-toolkit

于是,再安装了一遍cuda toolkit。 完成安装后再输入nvcc -V,这次终于看到版本信息了。显示目前安装的版本是release9.1,完全正确。
在这里插入图片描述
接下来,我们再尝试编译一个CUDA自带的sample来验证以下安装是否成功。
根据之前cuda的安装提示sample被安装到了/home/ubuntu目录下,此处ubuntu是我的登录用户名。查看该目录确实发现有一个NVIDIA_CUDA-9.1_Samples的目录,进入该目录并找到 1_Utilities/deviceQuery 例子,进行编译。

cd /home/ubuntu/NVIDIA_CUDA-9.1_Samples/1_Utilities/deviceQuery
make

执行了make之后,就应该可以看到如下的输出了,如果不行的话请确认以下g++是否安装了。
在这里插入图片描述
编译完成后执行deviceQuery

sudo ./deviceQuery

如果你可以看到以下类似的输出,那表面CUDA安装成功了。
在这里插入图片描述

安装cuDNN

cuDNN的官网地址如下,首先依旧是上官网查看以下适用版本和下载信息。
https://developer.nvidia.com/cudnn
下载cuDNN首先得登录Nvidia Developer账户,如何么有就注册一个。另外,nvidia还支持用微信和QQ账号登陆。
下载前务必查询以下你的CUDA版本兼容的cuDNN,每个cuDNN都会有多下载包分别个支持不同CUDA版本的,务必要看仔细了。
在这里插入图片描述
另外,兼容信息也可以在cuDNN的release note里的cuDNN Support Matrix章节有给出,以下是链接。
https://docs.nvidia.com/deeplearning/sdk/cudnn-support-matrix/index.html#cudnn-cuda-hardware-versions

下图是关于cuDNN的最新版本 v7.6.4-v7.6.5的兼容性信息,我第一台最新的工作站是Quadro P2000的显卡安装的是440的nvidia驱动和10.2的CUDA,因此安装最新的cuDNN版本没有问题。但是我另外一台老的Quadro K2200的显卡配390的驱动和9.1.85的CUDA就和目前最新的cuDNN不兼容。
在这里插入图片描述
继续查询,发现这个版本的CUDA和所有的7.1.4以上版本的cuDNN都不兼容。在一通搜索之后终于找到了这个v7.1.3,而且这个版本对Ubuntu支持只有deb文件,而且对Ubuntu的支持仅到16.04, 而我的Ubuntu是18.06。本着选择最接近的版本,下载了cuDNN v7.1.3 Developer Library for Ubuntu16.04 (Deb)。
在这里插入图片描述
执行命令dkpg -i来安装deb包,这一次总算是一切顺利。

sudo pkdg -i 

踩坑记录

安装最新版本的CUDA,基本没有什么问题。然而,再装另外两台工作站是,却踩坑了。

  • 重启后nvidia驱动消失

当我完成所有安装和设置并重启,结果却发现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.

在这里插入图片描述
网上查了一下,发现大部分人都说是因为重启后Ubuntu的内核版本改变了。要将内核版本改回去,问题即可解决。
具体办法如下
此处下回在写

  • CUDA 9.1是个大坑

我一早就知道nvidia driver,CUDA和cuDNN有依赖关系。但是我还是低估了这个问题的严重性。 重要事情说三遍:
千万不要装CUDA9.1!
千万不要装CUDA9.1!
千万不要装CUDA9.1!
cuDNN可以支持的CUDA9.1的版本特别的有限,其次tensorflow可以支持CUDA9.1的最高版本是1.13,而tensorflow1.13仅可以运行中python 3.6及以下版本。这个问题,几乎导致我重装了开发环境。
我最终选择安装CUDA9.0,但在重装过程中,我发现如果不卸载之前安装的CUDA9.1版本,cuDNN和tensorflow会误认之前的CUDA版本,所以必须移除。卸载CUDA的命令:

cd /usr/local/cuda-9.1/bin
sudo ./uninstall_cuda_9.1.pl
  • CUDA依赖包无法安装问题

我的那块Quadro K220显卡匹配的驱动是nvidia-driver-390.46,可以支持的CUDA版本是9.1,但我最终选择的是9.0。官网下载CUDA安装包,依旧选择runfile, 然后进入安装。

然而却安装失败了,报不支持的编译错误, 但提示可以使用 --override 选项跳过这个步骤。

Error: unsupported compiler: 7.3.0. Use --override to override this check.

于是再次尝试…

sudo sh cuda_9.1.85_440.33.01_linux.run --override

于是得到如下错误信息,而且

Installing the CUDA Toolkit in /usr/local/cuda-9.1 …
Missing recommended library: libGLU.so
Missing recommended library: libX11.so
Missing recommended library: libXi.so
Missing recommended library: libXmu.so
Missing recommended library: libGL.so

在网上查了一下,原因是缺少相关的依赖库,安装相应库就解决了:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

可以按照依赖库也失败了,提示依旧是缺少依赖库。在网上查了这个问题许久,也没有找到解决问题的方法,
在这里插入图片描述
后来,在网上看到用aptitude install可以解决这个问题。aptitude是和apt-get一样的linux下的包管理工具,但在依赖包处理上比apt-get更好。
先用apt-get来安装一个aptitude。

sudo apt-get install aptitude

再用aptitude来安装依赖包。

sudo aptitude install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

这里需要主要的是安装过程中会有提示选择,第一个提示是Keep the following package as their current version, 需要选择n,第二个提示The follow action will resolve the dependencies. , 选择y。
在这里插入图片描述
完成安装后,再次安装CUDA,记得加上–override选项,这次就不在报错了。
在这里插入图片描述
当我完成所有安装和设置并重启,结果却发现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.

在这里插入图片描述

  • 在anaconda里安装CUDA Toolkit和cuDNN
    以上安装步骤,我在第一台workstation上成功了。但是第二台K2200显卡的,却始终不成功。
    我在安装CUDA时选择了9.1版本,安装Anaconda是选择了最新支持python3.7的版本。完成安装后,运行tensorflow却报错
    后续安装步骤请参考文章
    Anaconda+Tensorflow-gpu+Juypter Notebook安装配置踩坑记录
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白的逆袭日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值