Tensorflow的GPU配置:ubuntu16.04+cuda8.0+cudnn5+tensorflow

啰嗦几句,本机是双系统。想要顺利配置tensorflow,容易被忽视一点:cuda 、cudnn的版本选择,一定要配套,更换其中一项,另外一项也要更换!网上很多教程,但基本没有适合自己的,本文给出超强万能配置教程(小C也是踏过无数坑走过来的,香菇~~~)。

一定要用匹配的版本,如果使用下文(一)的方式装tensorflow,还得是新版本:
Download cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0→cuDNN v5.1 Library for Linux
Download cuDNN v6.0 (April 27, 2017), for CUDA 8.0→cuDNN v6.0 Library for Linux
Download cuDNN v7.0.5 (Dec 5, 2017), for CUDA 9.0]→cuDNN v7.0.5 Library for Linux

一、显卡驱动、cuda 、cudnn的版本选择

1、cuda的版本选择和下载
小C的显卡是NVIDIA Geforce GTX 1050,cuda选择8.0,7.5版本已经不支持ubuntu16.04了。
百度下载https://developer.nvidia.com/cuda-80-ga2-download-archive

1

注意,一定要选runfile, deb版本会自行安装最新版本的驱动,但驱动和cuda不一定匹配,runfile可以选择是否安装驱动。

2、显卡驱动的下载

去这个网站http://www.nvidia.cn/object/unix-cn.html下载跟自己显卡匹配的驱动

2

输入显卡信息,如下图

3

输入显卡信息,点击“开始搜索”,往下拉,看到搜索结果如下图

4

选择你想要的版本下载,小C下载了375.26的驱动。选哪个版本都可以,最好是新版本。

3、cudnn的下载
小C选了cudnn的v5这个版本,首先选跟cuda对应的菜单,再选跟系统对应的选项,下载地址https://developer.nvidia.com/cudnn

5

三个都下载好,就可以安装了!

6

二、驱动的安装

进入ubuntu系统,把上面下载的三个软件放到ubuntu根目录下,开始安装驱动。
1、nouveau禁止命令写入文件(如果没有nouveau,直接跳到重启那步)

$ sudo vi /etc/modprobe.d/blacklist.conf 
写入下面5行代码,保存并退出
blacklist nouveau 
blacklist lbm-nouveau 
options nouveau modeset=0 
alias nouveau off 
alias lbm-nouveau off

2、调用指令禁止nouveau

$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

3、建立新的内核

$ sudo update-initramfs -u

4、重启

$ sudo reboot

5、进入tty模式
ctrl + alt+ F1
如果进不去tty模式,请参考https://blog.csdn.net/carina_cao/article/details/80525595

6、关闭x server

$ sudo service lightdm stop 
$ sudo init 3

7、对NVIDIA驱动安装包赋予权限并进行安装

$ chmod +x NVIDIA-Linux-x86_64-375.26.run 
$ sudo sh ./NVIDIA-Linux-x86_64-375.26.run --no-opengl-files //一定要加sh,死在这里很久!

开始安装驱动了!

7

接受还是不接受,当然接受了!注意,白色框框是选中的,不要问我为什么知道

8

选左边“continue installation”

9

是否运行nvidia-xconfig……..? 选左边yes。其它的点击“ok”就行了。
驱动安装完成!

8、如果想要查看显卡驱动是否安装成功,在终端输入命令:

$ sudo apt-get install mesa-utils   //安装mesa-utils
$ glxinfo | grep rendering   //如果结果是“yes”,证明显卡 驱动已经成功安装。
$ cat /proc/driver/nvidia/version   //查看显卡版本等信息

三、安装cuda和测试

1、安装cuda
在终端窗口中输入

$ sudo sh cuda_8.0.61_375.26_linux.run

按着enter键跑到100%。
安装驱动选no,前面已经安装过驱动了(不确定这里安装的驱动跟cuda和显卡是否匹配,谨慎起见,小C才自己装了驱动,放心),其它都选yes,或默认

10

出现下图即表示安装完成

11

添加环境变量:

$ sudo gedit ~/.bashrc

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda-8.0/bin:$PATH
将这三行代码写入~/.bashrc文件保存后退出

$ source ~/.bashrc  //立即生效

(有的说要加入~/.bash_profile中,但它开机不生效,亲身测试,加入~/.profile中也可以,具体参考小C另一篇博客http://blog.csdn.net/carina_cao/article/details/78866697

2、测试cuda版本

$ nvcc --version   //查看Cuda版本

使用这个命令有时会提示nvcc没安装。然后提示安装sudo apt-get install nvidia-cuda-toolkit。小C告诉你,不用装。只需将上面环境变量的第三行添加上即可,再次查看,就有了。
到这里就算安装完成了,如果想测试是否安装成功,请往下编译。

3、编译 Sample

$ cd ~/NVIDIA_CUDA-8.0_Samples
$ make   //编译,需要一会儿

运行完后,编译结果会放在NVIDIA_CUDA-8.0_Samples目录下的bin目录
若没有NVIDIA_CUDA-8.0_Samples这个文件夹,可以到/usr/local/cuda-8.0/bin路径下执行以下代码,即可在home下生成。

$ cd /usr/local/cuda-8.0/bin   //这个路径下可以看到下面的.sh文件
$ sudo ./cuda-install-samples-8.0.sh ~ 

4、 Running the Binaries

$ cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release  //这个目录里可以看到一堆可执行文件(菱形的图标)
$ ./deviceQuery

结果类似:

./deviceQuery Starting...
 CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 720M"
  CUDA Driver Version / Runtime Version          8.0 / 8.0
  CUDA Capability Major/Minor version number:    2.1
  Total amount of global memory:                 1985 MBytes (2081226752 bytes)
  ( 2) Multiprocessors, ( 48) CUDA Cores/MP:     96 CUDA Cores
  GPU Max Clock rate:                            1250 MHz (1.25 GHz)
  Memory Clock rate:                             800 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 131072 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65535), 3D=(2048, 2048, 2048)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 32768
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  1536
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (65535, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Domain ID / Bus ID / location ID:   0 / 1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GT 720M
Result = PASS

或之类的东东,且最后是 Result = PASS,若失败 Result = FAIL。

接着执行

$ ./bandwidthTest

结果类似:

[CUDA Bandwidth Test] - Starting...
Running on...

 Device 0: GeForce GT 720M
 Quick Mode

 Host to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         3220.9

 Device to Host Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         3271.9

 Device to Device Bandwidth, 1 Device(s)
 PINNED Memory Transfers
   Transfer Size (Bytes)    Bandwidth(MB/s)
   33554432         9772.8

Result = PASS

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

少年,恭喜你!你已成功安装cuda-8.0!

四、装cudnn v5

$ cd /home/***(用户名)/下载   //找到cudnn存放的目录,小C放在了下载目录下
$ tar -xzvf cudnn-8.0-linux-x64-v5.1.solitairetheme8    //解压到当前目录
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include   //把cudnn.h复制到cuda/include目录下
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64    //把libcudnn*复制到cuda/lib64目录下
$ sudo chmod +r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*  //添加权限

Tip1:装完cuda会发现/usr/local下有两个文件夹cuda和cuda-8.0,cuda是软链接到cuda-8.0的,所以这两个文件夹可以看成一个。往任意一个文件夹中添加东西,另一个文件夹都会有相同的东西。

Tip2:解压出来的/home/*(用户名)/下载/lib64下面有3个.so文件。分别是libcudnn.so和 libcudnn.so.5以及 libcudnn.so.5.1.10文件。并且这3个.so文件大小都一样。其实都是软连接!libcudnn.so链接到libcudnn.so.5,而libcudnn.so.5.又链接到libcudnn.so.5.1.10。真正的文件只有libcudnn.so.5.1.10。其中libcudnn.so.5的尾数5代表cudnn的版本号,这个后面会用到。

软链接:

$ cd /usr/local/cuda/lib64
$ sudo ln -sf libcudnn.so.5.1.10 libcudnn.so.5
$ sudo ln -sf libcudnn.so.5 libcudnn.so
$ ll

最后出现下图,说明链接成功

lrwxrwxrwx 1 root root        15 106 22:40 libcudnn.so -> libcudnn.so.5*
lrwxrwxrwx 1 root root        17 106 22:40 libcudnn.so.5 -> libcudnn.so.5.1.10*
-rwxr-xr-x 1 root root  60696704 106 22:37 libcudnn.so.5.1.10*
-rwxrwxrwx 1 root root  59715990 106 22:37 libcudnn_static.a*

接着

$ sudo vi /etc/ld.so.conf.d/cuda.conf    //创建文件
写入/usr/local/cuda/lib64
$ sudo ldconfig    //使软链接生效

至此,cudnn配置成功!
Tip3:若需要更换其他版本的cudnn,重新配置软链接请参考https://blog.csdn.net/carina_cao/article/details/80525595

五、安装tensorflow的编译工具bazel

Bazel官网https://docs.bazel.build/versions/master/install-ubuntu.html可查看对应版本的安装教程

$ sudo apt-get install openjdk-8-jdk
$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install bazel

添加环境变量:

$ sudo gedit ~/.bashrc
写入export PATH="$PATH:$HOME/bin"
$ source ~/.bashrc
$ bazel      //查看是否安装成功

六、安装Tensflow和测试(一)

安装tensflow这里提供两种方式,建议使用(一),直接把tensflow装到系统自带的python3.5下。

$ sudo apt-get install python3-pip  //装pip3
$ pip3 --version
$ pip3 install --upgrade tensorflow-gpu   //装gpu的tensorflow,需要很久,这里下载的是最新版的,所以cuda cudnn也得是新版本的
$ pip3 list   //查看python包
$ pip3 install pandas   //缺少pandas,装上,如缺少其他包,请继续装

安装完成,请看(二)的测试。

七、安装Tensflow和测试(二)

1、 安装Tensorflow依赖的其它工具包

$ sudo apt-get install python-numpy swig python-dev python-wheel

2、下载最新的Tensorflow源码

$ sudo apt-get install git
$ git clone https://github.com/tensorflow/tensorflow
$ cd ~/tensorflow 
$ ./configure    //执行configure文件

显示如下

12

Cuda 8.0 位置默认
Cudnn 5 位置默认 //这里版本不是5.1
其它都是n或默认

继续在tensorflow 目录下

$ sudo bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package//GPU安装需要很久,一定要在./configure命令后执行
$ mkdir /tmp/tensorflow_pkg
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg  //生成whl文件至/tmp/tensorflow_pkg下,可查看whl文件名
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27mu-linux_x86_64.whl

Tip1:若是CPU安装就把第一条命令中- -config=cuda参数去掉即可。当然了,不需要GPU的话就不用装驱动、cuda、cudnn这些了。最后一行出现build completed successfully说明成功。

Tip2:运行第二条命令时出错importerror:no module named setuptools,原因是pip没装

$ sudo apt install python-pip   //安装pip
$ pip install --upgrade pip   //更新到9.0版本,tensorflow需要9.0

Tip3:好激动,终于到最后一条命令了!突然报出这个。。。

The directory '/***/***/.Cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.
The directory '/***/***/.Cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.

不是什么大问题,也不用理会,只是告诉你使用sudo时把当前用户改为root用户了,而root用户对这个目录或上级目录没有使用权限,使用sudo env | less和sudo -H env | less可查看HOME 和USER环境变量的使用权限。

3、测试tensorflow
使用代码测试,在配置好GPU环境的Tensorflow中,如果操作没有明确地指定运行设备,Tenserflow会优先选择GPU。

$ python
>>>import tensorflow as tf
>>>a=tf.constant([1.0,2.0,3.0],shape=[3],name='a')
>>>b=tf.constant([1.0,2.0,3.0],shape=[3],name='b')
>>>c=a+b
>>>sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
>>>print sess.run(c)

13

下面给一个通过tf.device手工指定运行设备的例子:

$ python
>>>import tensorflow as tf
>>>with tf.device('/cpu:0'):
>>>... (tab)a=tf.constant([1.0,2.0,3.0],shape=[3],name='a')
>>>... (tab)b=tf.constant([1.0,3.0,3.0],shape=[3],name='b')
>>>...    
>>>with tf.device('/gpu:0'):
>>>... (tab)c=a+b
>>>...
>>>sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))
>>>print sess.run(c)

输出结果为[ 2. 5. 6. ],则代表tensorflow安装成功!

参考文章
Tensorflow的安装:
http://blog.csdn.net/zhaoyu106/article/details/52793183
http://blog.csdn.net/jiang_z_q/article/details/73264561
http://www.linuxidc.com/Linux/2017-05/143856.htm
http://m.blog.csdn.net/ran337287/article/details/72673234
https://www.cnblogs.com/neo-T/p/6424438.html?utm_source=itdadao&utm_medium=referral
https://www.cnblogs.com/arkenstone/p/6900956.html
https://www.cnblogs.com/czaoth/p/6132485.html
http://blog.csdn.net/u012177034/article/details/61614497
驱动的安装:
http://blog.csdn.net/lhx_998/article/details/76135936
http://blog.csdn.net/eclipse_c/article/details/23302061
cuda的安装:
http://blog.csdn.net/qq_28413479/article/details/76377184
https://www.jianshu.com/p/35c7fde85968?from=singlemessage
http://blog.csdn.net/baiyu9821179/article/details/57412131
http://blog.csdn.net/fengbingchun/article/details/53840684
http://haiy.github.io/2016/07/17/ubuntu16.04上GTX1080的CUDA安装.html
http://blog.csdn.net/jhszh418762259/article/details/52958287?locationNum=8&fps=1
http://blog.csdn.net/sikao_luwei/article/details/69375126

猜你喜欢

转载自blog.csdn.net/carina_cao/article/details/78875981