Tensorflow的GPU配置:ubuntu16.04+375.26驱动+cuda8.0+cudnn5

来源:互联网 发布:现在常用的数据库 编辑:程序博客网 时间:2024/05/21 11:01

啰嗦几句,本机是双系统,不建议使用虚拟机。想要顺利配置tensorflow,关键在于显卡驱动、cuda 、cudnn的版本选择,一定要全部配套,更换其中一项,其它两项也都要更换!网上很多教程,但基本没有适合自己的,本文给出超强万能配置教程(小C也是踏过无数坑走过来的,香菇~~~)。

一、显卡驱动、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可以选择是否安装驱动。观察cuda_8.0.61_375.26_linux.run,其中375.26对应的就是驱动版本。

2、显卡驱动的下载

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

2

输入显卡信息,如下图

3

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

4

选择你想要的版本下载,小C下载了375.26的驱动。

3、cudnn的下载
Cudnn的v5版本比较稳定,一般都选这个版本,首先选跟cuda对应的菜单,再选跟系统对应的选项,下载地址https://developer.nvidia.com/cudnn

5

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

6

二、驱动的安装

进入ubuntu系统,把上面下载的三个软件放到ubuntu的home目录下,cudnn的可以随便放,比如小C就放到了/home/下载/下。开始安装驱动。
1、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
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 ~/.bashrcexport LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"export CUDA_HOME=/usr/local/cudaexport 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 720MResult = 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.8Result = PASSNOTE: 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 rm -rf libcudnn.so libcudnn.so.5$ sudo ln -s libcudnn.so.5 libcudnn.so$ sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5$ 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,重新配置软链接请参考http://blog.csdn.net/hungryof/article/details/52746279#reply

五、安装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和测试

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 目录下

$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package//GPU安装需要很久$ 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

阅读全文
0 0