Ubuntu 17.10 + Cuda9.0 + CUDNN + Tensorflow最正确姿势排坑
博主之前一直使用16.04与win10双系统,但是由于当初安装系统时候引导安装的有点问题,导致ubuntu使用起来一直有些毛病,搞了好久也没搞好,索性就想到干脆重新把系统装一下。作为一个爱尝鲜的用户,使用了这么长时间平平淡淡的长期稳定支持版,还是想要换换口味试试最新的17.10版本,不过鉴于长期支持版的18版本再过不久就会放出来了,估计17.10的寿命和用户数量也不会太多了,也正是这个原因导致网络上相关的教程太少,而且坑非常多(可能是时间原因,当时的教程对现在的驱动和cuda版本不适用了),尤其是CUDA的安装,一不小心就会导致开不了机,在折腾了两天历经万难,终于自己摸索出了一套方法解决了问题,所以写一点东西,给可能需要的人,博主自己也是小菜鸟,就是分享分享自己遇到的坑,基本纯手打了一下午,难免有小差错,有什么不对的地方欢迎大佬们指正。
PS:博主显卡1060,应该10系显卡都没有问题,其他没有测试过,不过应该没有问题,如果有的话欢迎交流分享经验
一、Ubuntu17.10安装
这个就不展开讲了,网上教程太多,注意分区的时候系统引导就好了,不要和windows装到一起了,这样的话相当于是把Ubuntu装成了win系统下的一个软件,速度会减慢很多,并且会出现很多问题
进入系统,眼前一亮,有中从XP到win10的感觉,实在太漂亮了,17.10从Unity换成Gnome后,界面的流畅度和点击感都有质的提升,哈哈虽然和本文核心内容关系不大,但是还是放两张截图,看到这么漂亮的界面就感觉回不去16.04了
当然作为操作系统,实用性和兼容性才是首位的,既然选择了这样的最新版本,那就要做好面临许多BUG却无法解决的准备了
二、Nvidia驱动以及Cuda9.0的安装
因为Cuda8.0并不支持17版本的原因,所以这里只能安装Cuda9.0(网上安装8.0的教程其实里面也全是安装的9.0),目前官网最新的cuda版本已经是9.1了,但是我安装的时候发现9.1老是出错,最后还是选择了9.0版本
首先应该安装显卡驱动,这里有很多坑,有些博文里面说直接安装nvidia官网的cuda,会自动帮你安装显卡驱动,但是我试过之后发现每次安装之后显卡驱动都是387版本的,然后重启后就开不了机(界面闪烁,显示dev/sda:clean,xxxxx/xxxxx files),必须ALT+F2进入命令行模式执行sudo apt-get purge mvidia* 删除显卡驱动显卡以后才可以正确开机,具体原因我不知道是为什么,可能网上的教程装cuda的时候,还没有这么高版本的显卡驱动,所以那时候没问题,现在却出现了问题,所以分享我自己的方法,主要是装384版本的驱动,亲测没有问题,首先打开“软件与更新”(默认不在左侧的Launcher上,需要在应用里搜索),先取消勾选默认的从光驱安装
有如下两种方法安装驱动:
第一种(速度慢):
添加第三方驱动源:
- sudo add-apt-repository ppa:graphics-drivers/ppa
- sudo apt update
然后安装384版本的驱动(这一步国内网特别慢,会装很久):
- sudo apt install nvidia-384 nvidia-384-dev
安装完以后应该就好了,终端输入nvidia-smi查看显卡状态,有可能会显示couldn't communicate with the NVIDIA driver,一般重启之后可解决问题
第二种(推荐):
在附加驱动中直接更改成384版本的驱动,速度很快,同样变更后重启
驱动安装成功以后开始安装cuda9.0,这里不使用官方提供的deb文件来安装,因为我试过官网的deb安装后,发现会一同安装显卡驱动(最新的即387版本),这就导致了开不了机(原因未知)
这里注意一个问题,由于17.10的默认gcc版本是7.2(可通过gcc --version来查看),而cuda只支持7以下的gcc/g++版本,所以要先对gcc/g++进行降级,至于降到哪个版本,我选择了5.4,因为16.04好像用的是用的这个版本,相对来说兼容性比较好
首先安装gcc-5
- sudo apt-get install gcc-5 gcc-5-multilib g++-5 g++-5-multilib
安装之后输入gcc --version发现还是7.2版本,输入:
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40
- sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
- sudo update-alternatives --config gcc
会看到如下三个候选项用于替换gcc:
想用哪个gcc直接输入编号切换就好了
接下来同样要设置一下g++版本(和gcc保持一致)
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40
- sudo update-alternatives --config g++
这样的话就成功了,查看一下gcc版本发现已经是5.4版本了,可以开始安装cuda了,先安装一些相关的包:
- sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev
先下载文件(速度不慢),然后安装:
- wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
- chmod +x cuda_9.0.176_384.81_linux-run
- sudo ./cuda_9.0.176_384.81_linux-run --override
安装时候出现以下几个选择,一定要注意第二个选项要选择n,否则会重新安装驱动:
- You are attempting to install on an unsupported configuration. Do you wish to continue?
- y
- Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
- n
- Install the CUDA 9.0 Toolkit?
- y
- Enter Toolkit Location
- [default location]
- Do you want to install a symbolic link at /usr/local/cuda?
- y
- Install the CUDA 9.0 Samples?
- y
- Enter CUDA Samples Location
- [default location]
一段时间的等待后就成功安装了
可以用Samples试一下是否安装成功
- cd ~/NVIDIA_CUDA-9.0_Samples/5_Simulations/smokeParticles
- make
- ../../bin/x86_64/linux/release/smokeParticles
出现烟雾的图像就算是安装成功了,可以输入nvcc --version查看一下cuda的版本
三、cuDNN安装
这里选择安装cuDNN6.0版本(注意tensorflow1.3版本以上才支持6.0)
- wget http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz
- tar -xzvf cudnn-8.0-linux-x64-v7.tgz
- sudo cp cuda/include/cudnn.h /usr/local/cuda/include
- sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
- sudo chmod a+r /usr/local/cuda/include/cudnn.h
- sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
然后把lib64文件夹添加到环境变量:
- cd ~
- sudo vim .bashrc
在文档最后一行加入:
- export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
保存后
- source .bashrc
这样cuDNN6.0就全部安装完成了,对系统的配置基本就完成了
四、Anaconda安装及tensorflow的配置
这个部分就没有多大的区别和难度了,和16.04版本的安装方法无异,从官网下载anaconda创建一个tensorflow环境就OK了,现在的Anaconda安装gpu版本的tensorflow的时候只需要一条指令就可以了:
- conda install tensorflow-gpu
会自动帮你把相关的依赖包都装好,不需要使用过去网上复杂的PIP安装方法了,当然这条指令默认装的是1.3版本的tensorflow,比较稳定,使用起来也发现没有什么问题,但是现在tensorflow已经更新到1.7了,作为爱尝鲜爱折腾的人当然要体验下最新的版本的啦
首先查看conda包含的tensorflow版本,
- anaconda search -t conda tensorflow
可以看到有很多版本的tensorflow,找到其中1.7版本的,记住user和package名字使用
- anaconda show <USER/PACKAGE>