Ubuntu 16.04 lts安装CUDA9.0 & cuDNN7.0.5&tensorflow-gpu

96
wong小尧
0.1 2017.12.08 18:18* 字数 2566

tensorflow前前后后装过几十次,每次装cuda&cuDNN都很麻烦,决定整理一下踩过的坑和安装流程,记录可能会遇到的问题在这里备忘,过程会尽量写得完整详细。


如果无法解决问题,建议查阅结尾参考资料中的官方文档链接,毕竟大部分情况下官方文档才是最完整的。

记录两种安装方法,第一种是使用runfile,第二种用deb文件安装。

环境:
主板——Z370XP SLI
显卡——2 * 微星红龙1070ti
ssd——建兴(LITEON) 睿速系列 T10 240G
系统环境——Ubuntu16.04 64位、Windows10 64位专业版本,双系统
电源——美商海盗船(USCorsair)额定1000W

当时折腾ubuntu的引导程序也花了不少时间,不过如何分盘装双系统这里还是不具体介绍了,网上一堆教程。

前置准备工作:

首先在官网查阅,自己的电脑是否支持。

查阅:Pre-installation Actions先确定下面四个没有问题。

Verify You Have a CUDA-Capable GPU]
Verify You Have a Supported Version of Linux
Verify the System Has gcc Installed
Verify the System has the Correct Kernel Headers and Development Packages Installed

开始做预备工作:

安装cuda的依赖包。

这里是cuda-sample的依赖包,不装sample可以只装上面的


1. deb安装:

1.1 CUDA安装

这种方法比较简单,推荐这种方法。

下载cuda9.0(https://developer.nvidia.com/nvidia-developer-zone)

下好以后在终端输入(版本格式参考官方文档)
sudo apt-get autoremove --purge nvidia-*或者
sudo apt-get purge nvidia* 或者 sh ./nvidia.run --uninstall
来卸载原有驱动。(可以用nvcc -V 查看是否成功卸载。)

卸载完后开始安装:

1. sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb

2. sudo apt-key add /var/cuda-repo-9-0-local/7fa2af80.pub   #添加key

3. sudo apt update

4. sudo apt -y install cuda
  1. 添加环境变量

配置环境变量,运行如下命令打开profile文件


在profile结尾加入:

export CUDA_HOME=/usr/local/cuda-9.0

export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后source /etc/profile立即生效。

在终端输入 : nvcc -V

看到相应的nvcc编译器信息,那么CUDA配置成功。
那么重新启动:sudo reboot
5*. 注意:重启以后可能会有 循环登陆 的问题,我之前就卡在这边挺久,碰到这种情况最简单的方法当然是使用第二种方法runfile文件安装,然后安装的时候选择不安装OpenGL。
但是实际上还有一种方法可以解决,这种情况发生很可能是主板的安全启动secure boot引起的,先把它关掉(http://www.icharm.me/%E6%8A%80%E5%98%89gigabyte-b350m-gaming-3-%E5%85%B3%E9%97%AD-secure-boot.html),如果没有解决那么应该是显卡的问题。WIN10的电脑如果存在独显,那么cpu的核显驱动是不会下载的,我们需要两块显卡就得手动设置,设置以后WIN10就能识别核显并且能安装驱动了,此时ubuntu也一样,我们需要下载ubuntu对应的cpu的核显,很多七代八代的cpu核显ubuntu16.04并不支持,那么我需要对linux内核降级比较麻烦,比较好的方法是用官网提供的自动安装脚本来安装驱动程序包,ubuntu 16.04 lts的解决方法在此网址:(https://software.intel.com/en-us/forums/opencl/topic/738108

  1. 性能测试:

其实主要是看看cuda是否正确安装,

# 切换到cuda-samples所在目录

cd /usr/local/cuda/samples

# 没有make,先安装命令 sudo apt-get install cmake,-j是最大限度的使用cpu编译,加快编译的速度

sudo make –j8

# 编译完毕,切换release目录(/usr/local/cuda/samples/bin/x86_64/linux/release完整目录)

cd ./bin/x86_64/linux/release

# 检验是否成功,运行实例

./deviceQuery

# 最后能看到Result = PASS就算成功了。

1.2 cuDNN 安装

cuDNN是GPU加速计算深层神经网络的库。首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,需要注册一个账号才能下载,以前需要几天的审核时间,现在基本是秒批。

选择对应版本下载。

安装cudnn比较简单,简单地说,就是复制几个文件:库文件和头文件。将cudnn的头文件复制到cuda安装路径的include路径下,将cudnn的库文件复制到cuda安装路径的lib64路径下。具体操作如下:

  #解压文件
cp cudnn-9.0-linux-x64-v7.solitairetheme8 cudnn-9.0-linux-x64-v7.tgz
tar -xvf cudnn-9.0-linux-x64-v7.tgz


  #切换到刚刚解压出来的文件夹路径

 cd cuda  

 #复制include里的头文件(记得转到include文件里执行下面命令)

sudo cp include/cudnn.h /usr/local/cuda/include/   

#复制lib64下的lib文件到cuda安装路径下的lib64(记得转到lib64文件里执行下面命令)

sudo cp lib64/*  /usr/local/cuda/lib64/

 #设置权限

 sudo chmod a+r /usr/local/cuda/include/cudnn.h

 sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

 #======更新软连接======

cd /usr/local/cuda/lib64/

sudo rm -rf libcudnn.so libcudnn.so.7   #删除原有动态文件,版本号注意变化,可在cudnn的lib64文件夹中查看

sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7  #生成软衔接(注意这里要和自己下载的cudnn版本对应,可以在/usr/local/cuda/lib64下查看自己libcudnn的版本)

 sudo ln -s libcudnn.so.7 libcudnn.so #生成软链接

 sudo ldconfig -v #立刻生效

终端输入:nvcc -V
查看是否正常

2. runfile安装

2.1 runfile安装的前置准备工作

首先去官网(http://www.nvidia.cn/Download/index.aspx?lang=cn)查找适配自己电脑GPU的驱动,我的电脑驱动版本如下:


2.2 CUDA的安装

(1)卸载原有驱动 sudo apt-get autoremove --purge nvidia-*或者
sudo apt-get purge nvidia* 或者 sh ./nvidia.run --uninstall
(2)禁用nouveau驱动
编辑文件blacklist.conf
sudo gedit /etc/modprobe.d/blacklist.conf
在文件最后部分插入以下两行内容

blacklist nouveau
options nouveau modeset=0

更新系统sudo update-initramfs -u
重启系统sudo reboot
终端中运行: lsmod | grep nouveau 确定已经禁用了 nouveau,输入以后没反应即成功
(3)安装驱动:
sudo add-apt-repository ppa:graphics-drivers/ppa //添加驱动源
sudo apt update
sudo apt-get install nvidia-390
sudo apt-get install mesa-common-dev //本句及下一句命令有的电脑需要,有的电脑不需要,根据实际情况输入命令
sudo apt-get install freeglut3-dev
执行完上述命令后若无问题,重启,若有问题,转到第二种方法。
sudo reboot
重启后输入:
sudo nvidia-smi
如果显示GPU列表,则证明驱动安装成功了,另外也可以通过如下命令:
nvidia-settings
查看GPU信息,显示界面如下:
出现这个是正常的


(4)下载cuda9.0 (https://developer.nvidia.com/nvidia-developer-zone)

(5)Ctrl + Alt + F1(或init 3等于直接执行(5)和(6))
(6)输入了sudo service lightdm stop
(7)sudo sh cuda_9.0.176_384.81_linux.run
(8)单击回车或者 q,输入accept,一路选yes往下运行,直到提示“是否为NVIDIA安装驱动nvidia-384?”,选择否,因为已经安装好驱动程序了,其他的全都是默认,(如果是安装tensorflow的话,cuda sample 可以不装,一是装了也经常会有问题,二是我们只通过tensorflow来调用CUDA,不直接写CUDA代码,也不是必须要安装)不过要记住安装位置,默认是安装在/usr/local/cuda文件夹下。

(8*)如果之前没有手动安装驱动,而下载的cuda版本里自带的驱动刚好支持现在的显卡
那么可以输入:(如果是为了避免循环登陆,记得选择不安装opengl
sudo sh cuda_9.0.176_384.81_linux.run -no-x-check -no-nouveau-check -no-opengl-files
Accept以后全部点了yes 和 enter

(9)输入sudo service lightdm start
(10)添加环境变量
配置环境变量,运行如下命令打开profile文件


在profile结尾加入:

export CUDA_HOME=/usr/local/cuda-9.0

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后source/etc/profile立即生效。

注意:
如果环境变量写错导致 gedit命令失效,那么先临时设置环境变量
 export PATH="$PATH:/usr/bin"
 现在这些命令就可以临时使用了,打开再修改就行。

碰到Would you like to register the kernel module sources with DKMS?This will allow DKMS to auomatically build a new module,if you install a different kernel later
回答No。

(11)安装完成以后
输入: nvcc -V
会得到nvcc-V相应信息,那么CUDA配置成功了。

2.3 安装cuDNN

同第一种方法

3.anaconda 的常用命令以及tensorflow的安装

3.1 anaconda 的常用命令

conda list (所有安装的库列表)
conda install package_name (库)安装
conda clean清理
conda update package_name(更新)
conda remove package_name(库) 删除
conda search package_name(库)搜索
conda list -n env_name #指定查看某环境下安装的库
conda info -e 查看当前系统下的环境

创建新的环境:
指定python版本为2.7,注意至少需要指定python版本或者要安装的包
conda create -n env_name python=2.7
同时安装必要的包:conda create -n env_name numpy matplotlib python=2.7

环境切换:
切换到新环境
linux下需要使用:source activate env_name
win下: activate env_name
退出环境:
win下(也可以使用’activate root’ 切回root环境)
deactivate env_name
linux下:
source deactivate

移除环境
conda remove -n env_name --all

安装库
anaconda search -t conda (库例如:tensorflow) 搜索可用版本,搜到的名字
anaconda show (搜到的名字) 会显示这个库需要用什么指令下载
输入安装指令即可

更常用的方法是:直接pip install (库名)

当想要安装的库安装不了或者下载没速度的时候,连到这个网址,(http://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost)直接ctrl+f搜想要的库。
cp27代表python2.7以此类推,找到对应版本的库(和自己python版本以及win32/amd64版本一样的库下载)
下载下来是一个whl文件,找到该文件的路径,然后pip install (该文件的文件名.whl)

3.2 安装tensorflow

为了提升速度,建议使用清华大学开源镜像。复制生成的连接直接在终端输入即可完成安装。
另外,tensorflow中的依赖库例如numpy跟anaconda root下的库可能版本不一致,这样会出现tensorflow报错的情况。需要删掉anaconda中的numpy库,替换为tensorflow中自带的,可是使用旧版本的numpy在其他代码又会出现问题。
所以推荐使用 anaconda或者virtualenv来隔离环境。
隔离环境可以参考另外两篇博客,关于廖雪峰的python教程(https://www.jianshu.com/p/3d6c0241503a)和anaconda 常用命令。(https://www.jianshu.com/p/cf14d7b51fe7
为了保持连贯,anaconda常用命令已经贴在3.1部分。

4. References:

[1]https://developer.nvidia.com/cudnn
[2]http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu-installation
[3]https://tensorflow.google.cn/install/install_linux#InstallingAnaconda
[4]https://www.cnblogs.com/iloveblog/p/7683349.html
[5]http://www.icharm.me/%E6%8A%80%E5%98%89gigabyte-b350m-gaming-3-%E5%85%B3%E9%97%AD-secure-boot.html
[6]https://stackoverflow.com/questions/12883128/installing-cuda-5-0-rc-samples
[7]https://software.intel.com/en-us/forums/opencl/topic/738108
[8]https://software.intel.com/en-us/forums/opencl/topic/738108
[9]Keras2.0官方中文教程

深度学习
Web note ad 1