深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

我的配置

  • NVIDIA显卡:1060 Ti 6GB(其他NVIDIA显卡均可)
  • 系统:Ubuntu 14.04(其他Linux操作系统均可)

前言

基于Linux的深度学习环境的配置网上的方法太多,新手可能接受不过来,我重新安装了一个Linux系统(Ubuntu 14.04,使用其他发行版均可),并一步一步截图,做记此录。

这里以配置GPU版本的Tensorflow为例子,从头描述这个过程。

Tensorflow是现在流行的深度学习框架,它把很多网络步骤的实现都封装得很好,同时它是基于Python的,Python丰富的包也为整套深度学习流程的实现提供了很好的便捷性。根据我们设备的情况,当我们设备有NVIDIA显卡的时候,我们推荐选择GPU版本的Tensorflow框架,不然只能使用CPU版本的Tensor flow框架,那样会很慢。这里我演示的是配置GPU版本的Tensorflow。

Tensorflow是基于Python的,这里我们不使用Linux原生的Python,我们使用Anaconda(高度封装好的Python,比原生的丰富)。

因为一个新系统要驱动得了硬件,需要有它的驱动程序,所以刚开始安装好的Linux系统要能使用NVIDIA显卡需要安装NVIDIA显卡驱动。

为了更好地利用NVIDIA显卡进行开发,NVIDIA公司推出了CUDA平台,并提供了CUDNN的神经网络加速库,配置CUDA和CUDNN是深度学习环境搭建的必经之路。

不同版本的Tensor flow对应着不同版本的CUDA和不同版本的CUDNN,因此安装的时候版本需要对应好。另外,安装NVIDIA驱动的时候最好安装最高版本的NVIDIA驱动,这样它兼容在此之前的CUDA,反之,高版本的CUDA不一定能在旧版本的NVIDIA驱动环境下工作。

所以,我这里的安装顺序是,先安装NVIDIA驱动,再安装CUDA和CUDNN,然后装Anaconda并安装Tensorflow。

搭建步骤

下载文件,并剪切到个人文件夹下(Home)

这是我刚安装好的Ubuntu 14.04,是Linux的一个发行版,使用其他版本的也可以,推荐使用Ubuntu 16.04。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

我觉得要等一下需要这几个安装包。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

  • Anaconda3-5.0.0-Linux-x86_64.sh

这个去清华的镜像站下载就有,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

  • cuda_9.0.176_384.81_linux.run

去官网下载就有,https://developer.nvidia.com/cuda-90-download-archive

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

我系统虽然是Ubuntu 14.04,但是这里选择Ubuntu 16.04的也可以的,通用,如果是16.04的同学就不用有这疑惑,其他系统的看着选。

  • cuda_10.0.130_410.48_linux.run

下载最新版本的就行,https://developer.nvidia.com/cuda-downloads

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

PS:要是下载下来的cuda_9.0.176_384.81_linux.run名称少了个run啥的,你们看着改一下。

  • cudnn-9.0-linux-x64-v7.tgz

去官网下载,https://developer.nvidia.com/cudnn,但是这个CUDNN要注册登录一下,然后就可以下载了。

到这里,我们的安装包就下载好了,请和我一样,将它们剪切到我们的Home目录下,也就是我们的主文件夹下,因为我们的终端每次打开都默认在home目录下,东西比较好找。

为什么这里我下载了cuda_9.0.176_384.81_linux.run和cuda_10.0.130_410.48_linux.run两个CUDA安装包?

这里有两个需要解释的地方:

  1. 我们常见的安装NVIDIA驱动程序的方法,一个是图形界面下,进入到设置-》软件-》附加驱动-》勾上NVIDIA驱动-》应用。另一个是去NVIDIA驱动官网,根据我们的系统和显卡型号下载相应的NVIDIA驱动安装包,然后安装,因为我个人尝试这两种方法多次导致循环登录,进不去系统的情况,所以我采用的方法是,直接用CUDA安装程序中附带的NVIDIA驱动程序安装,实践证明这样子稳定。

  2. 由1可知,我通过CUDA安装程序附带的NVIDIA驱动程序安装NVIDIA驱动,请看,我这里下载了cuda_9.0.176_384.81_linux.run和cuda_10.0.130_410.48_linux.run,也就是说,这里面附带了两个NVIDIA的驱动程序,版本是384.81和410.48。请看下图。

    深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

    也就是说,这里安装410.48的驱动,就可以兼容其他所有版本的CUDA,但我们这里选择了CUDA9.0+CUDNN7.0+Tensorflow1.8的配置,所以我们要安装CUDA9.0,因此,我接下来的做法是,安装cuda_10.0.130_410.48_linux.run里面的410.48的NVIDIA驱动,不安装里面的CUDA,然后安装cuda_9.0.176_384.81_linux.run里面的CUDA,而选择不安装里面的NVIDIA驱动,具体做法下面会讲。

更换Linux软件源,提高下载速度

因为Ubuntu官方的软件源下载速度很慢,所以我把软件源换成国内阿里云的源,以此提高我的下载速度,因此我需要编辑软件源的配置文件,但是我需要有编辑器可以编辑它,因此我先安装vim,然后通过终端编辑配置文件,以达到修改软件源的目的。

sudo apt-get update # 更新一下软件包管理器
sudo apt-get install vim # 安装vim编辑器,这样可以在终端窗口编辑文本文件
sudo vim /etc/apt/sources.list # 因为/etc目录是系统级目录,所以编辑它需要sudo权限

接下来进入到vim的编辑界面当中,这时候看到的都是Ubuntu官方的源地址,因此我把它们都清空,连续按两次d可以达到删除一行的目的,因此多次按d,把整个文本清空。清空之后需要将新源添加进去,因此,根据我们系统的不同,我们应当去百度搜索相应的源,然后复制它们。因为我是Ubuntu 14.04,用这个的同学少,下面我给出Ubuntu 16.04的源,你们选择其中一个全部复制就好。

清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security multiverse
阿里云
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
网易
deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse

选择其中一个源,复制它,然后回到我们的vim窗口,按i,进入insert状态,确认可编辑后,对我们的空文本粘贴(Ctrl+Shift+V),也就是把我们上述的源粘贴进去。如果你是从我的CSDN复制的源,下面会顺便粘贴很多中文的作者信息,记得把它们删除掉。然后按ESC键退出我们的insert状态,按下Shift+:,也就是显示我们的:,这时候输入wq,也就是write+quit,写入并退出(具体可去详细学习vim的使用),即可完成对配置文件/etc/apt/sources.list的修改。这时候修改好源之后,我们应当update,也就是更新一下我们的软件包管理器,也就是执行下面命令。

sudo apt-get update # 这时候就更新了源
sudo apt-get install git zip gcc g++ screen # 这里安装一些等一下需要的程序,和之前相比会快一些

安装NVIDIA驱动

电脑屏幕的显示,例如我们的桌面就是图形界面,而图形界面是由显卡输出的,一般默认是由核显输出,但此时我们要切换为独显,也就是使用我们的NVIDIA显卡(独立显卡),所以我们需要关掉显示输出,这时候我们需要在文本界面(也就是我们 的命令行界面)关掉它,然后在命令行界面把NVIDIA驱动安装上。按步骤来,在图形界面情况(桌面)下,按Ctrl+Alt+T弹出终端,输入命令。

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

然后到最下面,按i进入insert模式,在最后一行添加blacklist nouveau,然后按ESC退出insert状态,输入:wq保存并退出,然后更新内核。

sudo update-initramfs -u

然后重启,重启后进入桌面,同时按住Ctrl + Alt + F1,这时候会进入命令行界面,输入用户名和密码(密码是不会显示的,数字键请使用字母上面的数字键)。

这时候我们其实处于默认目录Home下面,之前跟大家说把安装包放在Home目录下,这时候,执行命令。

sudo /etc/init.d/lightdm stop # 关闭显示输出以便于安装NVIDIA显卡驱动
sudo chmod a+x *.run # 赋予所有run文件可执行文件
sudo ./cuda_10.0.130_410.48_linux.run # 因为文件比较大,需要加载较长时间

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

按Ctrl+F可以快速跳过这些前言,然后我们只安装NVIDIA驱动,所以其他的我们全部选择no。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

驱动安装完成之后,我们用nvidia-smi查看我们的显卡运行状态,如果成功显示,则驱动安装成功。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这时候我们要回到桌面了。

sudo /etc/init.d/lightdm restart

回到桌面,用终端运行nvidia-smi,同样可以查看显卡运行状态。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

安装cuda9.0

接下来我们要安装cuda9.0,所以就开始用到之前下载的cuda_9.0.176_384.81_linux.run了,因为我们可能会用到多个版本的cuda,所以我们不将cuda安装到系统目录下,也就是不用sudo权限,我在home目录下创建了个local文件夹,然后将我需要的源码编译生成的文件安装到这里面去,并在~/.bashrc里面配置个人环境变量,以便于我们local里面的文件能够在我们的账户上被调用到,这里不理解没关系,下面细讲。

mkdir -p local/cuda9.0 # 创建我们cuda9.0解压的文件夹
./cuda_9.0.176_384.81_linux.run # 因为我们不用安装驱动了,所以可以不用sudo权限,直接运行它就好

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

驱动选择no,toolkit选择yes,路径输入我们刚才的路径,应该要输入绝对路径,/home/michael/local/cuda9.0。记得把michael改成你们自己的用户名,然后其他都选择no。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这时候我们的cuda9.0就安装好了,我们进入到它的bin文件夹中,运行命令查看cuda版本。

cd local/cuda9.0/bin/
./nvcc -V

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

但是大家会发现,我们这里查看的命令是“./nvcc -V”,我们之所以输入“./”,是因为nvcc这个已经编译好的程序只存在于“local/cuda9.0/bin/”这个当前目录下,并不是全局目录下,如果我们要让我们的程序能够在全局调用得到我们的cuda,我们需要将cuda加入到环境变量里面,因此,而在我们的主文件夹(Home)下,有一个环境变量 的配置文件.bashrc,这是一个隐藏文件,使用“显示隐藏文件”可以看见。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

我们编辑.bashrc这个文件,然后将我们cuda的目录信息加入到里面,刷新环境变量,这时候我们的cuda就变成全局了。

vim ~/.bashrc # ~/是指我们的默认目录,就是我们的home目录

然后按i进入insert模式,到最下面一行,添加我们的配置信息。

# cuda9.0
export PATH=/home/michael/local/cuda9.0/bin:$PATH
export LD_LIBRARY_PATH=/home/michael/local/cuda9.0/lib64:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/michael/local/cuda9.0/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/michael/local/cuda9.0/include:$CPLUS_INCLUDE_PATH

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

然后按:wq保存并退出,刷新一下环境变量。

source ~/.bashrc
nvcc -V # 这时候输入这个就可以查看cuda版本信息了,而不需要加入./

配置Cudnn7.0

配置Cudnn的步骤很简单,也就是把cudnn的头文件和库文件都拷贝到cuda安装文件夹里面就好了。

tar zxvf cudnn-9.0-linux-x64-v7.tgz # 解压,生产的文件夹叫cuda,最后cp(拷贝)完后这个文件夹就可以删掉了
cp cuda/include/cudnn.h local/cuda9.0/include/
cp -a cuda/lib64/* local/cuda9.0/lib64/

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

到这里,NVIDIA驱动+Cuda9.0+Cudnn7.0就配置好了。

配置Tensorflow1.8

上面前言有提到,我们将使用Anaconda这个集成的Python环境来安装我们的Tensorflow,下面是安装Anacodna的步骤,这个很简单,打开终端,输入命令。

sh Anaconda3-5.0.0-Linux-x86_64.sh

然后输入yes再按回车采用默认路径就行了。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

安装完成时,它问你要不要加入到环境变量里面,我们选择yes,然后它会把它的解压的目录添加到~/.bashrc里面。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这时候我们可以查看我们的~/.bashrc,可以看到环境变量里面以及由Anaconda了。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

重新打开终端,会刷新环境变量,我们输入Python,可以看到Anaconda的字样。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

按Ctrl+Z退出Python,这里我打算修改一下它的pip安装源,用清华大学的源会更快一点。

在终端输入命令。

cd ~/ && mkdir -p .pip && cd .pip && vim pip.conf

然后按i进入insert状态,粘贴我们的配置信息。

[global] 
index-url=https://pypi.tuna.tsinghua.edu.cn/simple 
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn 
disable-pip-version-check = true 
timeout = 6000

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

然后按:wq保存并退出,这时候我们的pip配置信息已经完成了。

这时候我们通过pip来安装我们的tensorflow1.8,直接在终端输入命令。

pip install tensorflow-gpu==1.8

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这时候它提示我们的tensorflow以及它的依赖包已经安装好了,那我们检验一下。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这个不是报错,它只是提升在未来版本有些函数会改变,其实只要更新一下hdf5就行了。

pip install -U hdf5

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

然后再import tensorflow试一下。

深度学习环境搭建(NVIDIA驱动+CUDA9.0+CUDNN7.0+Tensorflow1.8)

这时候就完全没有问题了,到这里,基于GPU的Tensorflow已经安装完成了。