您的位置:首页 > 其它

ubuntu16.04 安装Tensorflow(GTX980Ti+CUDA8.0+CUDNNv6.0)

2018-01-27 17:38 791 查看
如果安装过程遇到问题,可直接跳转到问题汇总查看

1.我的电脑安装环境:

双系统:win10+Ubuntu16.04(在Ubuntu下配置)

CPU:E5-1660 v4

GPU:GTX-980Ti

2.安装GPU版Tensorflow的官方要求

Tensorflow官方的安装要求在如下链接中可以看到:

https://www.tensorflow.org/install/install_linux



运行GPU版本的Tensorflow所需要的NVIDIA要求:

需要CUDA8.0版本 配置了LD_LIBRARY_PATH/CUDA_HOME 环境变量

需要CUDA8.0版本

需要cuDNNv6.0版本

GPU计算能力要达到3.0以上(GPU计算能力一览表

执行sudo apt-get install libcupti-dev安装libcupti-dev相关依赖

根据官方要求,我们安装Tensorflow所需要做的事情如下:

确认GPU型号和性能,安装显卡驱动(无需最新)

安装libcupti-dev相关依赖

安装CUDA

安装cuDNN

安装
4000
Anaconda(官方给出了4种安装方式,这里我们选择Anaconda,主要目的是为了利用pyenv方便管理,pyenv的安装和使用可以参见这里

安装TensorFlow-GPU

运行一个Tensorflow版的HelloWorld程序

3.开始安装

一、确认GPU型号和性能,安装显卡驱动

首先在确认你的GPU型号,可以在这里进行查询,也可以在Windows上借助第三方软件查询,然后在GPU性能一览表中确认你的GPU计算能力大于3,借着,在Ubuntu上安装对应版本的显卡驱动,由于我们使用的是CUDA8.0,所以强烈建议你安装375-26或者375-66,不建议安装最新版本的驱动,这样可能会有一些兼容性问题产生(我就遇到了,然后从384版本换回375版本了)。驱动安装教程可以查看这篇文章。(这篇文章里安装的是384,但我还是建议安装375,对应CUDA8.0)

二、安装libcupti-dev相关依赖

执行下面的指令安装libcupti-dev相关依赖

sudo apt-get install libcupti-dev


三、安装配置CUDA

CUDA的安装方式有多种,这里选择run方案(这种较省事)

点击这里的下载链接,进入NVIDIA官网下载界面,根据系统下载cuda包

注意:依据Tensorflow的官方历程要求,我们选择安装CUDA-8.0,因为现在官方还没有正式支持CUDA-9.0,但是也不是说完全不能使用9.0,只是在使用过程中会遇到一些找不到目标文件的错误(在问题汇总会提到),所以这里还是强烈推荐使用CUDA8.0(配合显卡375驱动)

我们根据自身系统的信息,逐步选择即可,然后点击页面上的Download{1.4GB}。



下载完成以后,我们利用cd命令,进入到cuda_8.0.61_375.26_linux.run文件所在的目录中,然后运行下面的指令,进行安装(注意这个文件名,前面的cuda_8.0.61代表cuda的版本,后面的375.26代表的对应的NVIDIA驱动的版本)

#先执行下面的命令安装相关依赖,
#否则会出现`Missing recommended library`错误
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

sudo sh cuda_8.0.61_375.26_linux.run #开始安装

#..一堆协议说明...
#直接按q退出协议说明.
zerozone@zerozone: accept/decline/quit: accept  #接受协议

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?
y)es/(n)o/(q)uit: n  #是否显卡驱动包,由于已经安装显卡驱动,选择n

Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y #是否安装工具包,选择y

Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]: #工具包安装地址,默认回车即可

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y #添加链接

Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y #安装样例

Enter CUDA Samples Location
[ default is /root ]:  #样例安装地址默认即可

# ***安装信息***
Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...

Missing recommended library: libXi.so
Missing recommended library: libXmu.so
#注意,这里出现了Missing recommended library错误,
#是因为博主在第一次安装时,没有添加最开始的那条安装相关依赖的指令,
#之后我添加了依赖后,再次安装,就没有Missing错误了

Installing the CUDA Samples in /root ...
Copying samples to /root/NVIDIA_CUDA-8.0_Samples now...
Finished copying samples.

===========
= Summary =
===========
Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-8.0
Samples:  Installed in /root, but missing recommended libraries

Please make sure that
-   PATH includes /usr/local/cuda-8.0/bin
-   LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.

To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:

sudo <CudaInstaller>.run -silent -driver

Logfile is /tmp/cuda_install_6388.log
# ***安装完成***


配置CUDA相关环境变量

修改~/.bashrc文件 在文件末尾添加环境变量

Tensorflow官方安装历程要求注意的是:配置PATH和LD_LIBRARY_PATH和CUDA_HOME环境变量.

vim ~/.bashrc #修改配置文件(如果你用的是zsh,则需要修改 ~/.zshtc文件)

#在文件结尾处添加
export PATH="/usr/local/cuda-8.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME="/usr/local/cuda-8.0:$CUDA_HOME


结果如图所示:



测试CUDA样例

安装完成后,可以利用cuda样例来测试是否安装成功

#进入样例工程文件夹
zerozone@zerozone:/usr# cd /root/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery/

zerozone@zerozone:~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery# ls
deviceQuery.cpp  Makefile  NsightEclipse.xml  readme.txt

#make编译工程
zerozone@zerozone:~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery# make

"/usr/local/cuda-8.0"/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o deviceQuery.o -c deviceQuery.cpp

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

"/usr/local/cuda-8.0"/bin/nvcc -ccbin g++   -m64      -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o deviceQuery deviceQuery.o

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

mkdir -p ../../bin/x86_64/linux/release

cp deviceQuery ../../bin/x86_64/linux/release

#查看生成的可执行文件
zerozone@zerozone:~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery# ls
deviceQuery      deviceQuery.o  NsightEclipse.xml
deviceQuery.cpp  Makefile       readme.txt

#执行
zerozone@zerozone:~/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery# ./deviceQuery

#输出如下表示可用
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 1080"
#注意这里CUDA的Driver和Runtime的版本都是8.0,
#如果我们之前安装的显卡驱动是384的话,那么这里的Driver版本就会变成9.0
#我之前就是9.0/8.0,后面觉得不妥就重新安装了375的驱动
CUDA Driver Version / Runtime Version          8.0 / 8.0
CUDA Capability Major/Minor version number:    6.1
Total amount of global memory:                 8111 MBytes (8504868864 bytes)
(20) Multiprocessors, (128) CUDA Cores/MP:     2560 CUDA Cores
GPU Max Clock rate:                            1873 MHz (1.87 GHz)
Memory Clock rate:                             5005 Mhz
Memory Bus Width:                              256-bit
L2 Cache Size:                                 2097152 bytes

Maximum Texture Dimension Size (x,y,z)         1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
Maximum Layered 1D Texture Size, (num) layers  1D=(32768), 2048 layers
Maximum Layered 2D Texture Size, (num) layers  2D=(32768, 32768), 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: 65536
Warp size
df97
:                                     32
Maximum number of threads per multiprocessor:  2048
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): (2147483647, 65535, 65535)
Maximum memory pitch:                          2147483647 bytes
Texture alignment:                             512 bytes
Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
Run time limit on kernels:                     Yes
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 GTX 1080

Result = PASS


四、安装cuDNN

下载cuDNN(必须注册NVIDIA开发者帐号,并填写问卷才能下载),可以点击这个页面直接注册并下载。(依据Tensorflow的官方安装历程要求cudnn-v6.0)



这里选择第三个进行下载:cuDNN v6.0 Library for Linux

安装cuDNN

下载完成后,进入所在目录,找到cudnn-8.0-linux-x64-v5.1.tgz文件

tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz #解压
uda/include/cudnn.h
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.5
cuda/lib64/libcudnn.so.5.1.10
cuda/lib64/libcudnn_static.a
#添加cudnn到cudn库
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
#修改添加到cuda库的cudnn权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*


五、安装Anaconda

具体安装教程,可以查看这篇博文

这里有一个更简单方便,也更容易管理的方法,就是在上面的连接中下载好Anaconda3-5.0.1-Linux-x86_64.sh文件后,将文件拷贝到
.pyenv/cache
路径下(如果是第一次利用pyenv安装,需要新建cache文件夹)。然后直接在命令行中运行下面的指令:(前提是已经安装了pyenv,安装教程在这里

pyenv install Anaconda3-5.0.1


这个方法最好的地方就在于,可以同时安装多个版本的python和Anaconda,并且互相之间并不影响,利用此方法安装Anaconda后,只需建立相应的虚拟环境,就可以安装Tensorflow了(我采用的就是这个方法)

六、安装TensorFlow-GPU

官方建议有四种安装方式:

virtualenv

“native” pip

Docker

Anaconda

这里我们选择第四种,因为Anaconda集成了大量工具包,对以后的程序开发很方便。



安装步骤:

首先,创建名为tensorflow的conda环境

如果你直接使用Anaconda

conda create -n tensorflow #创建tensorflow环境空间
source activate tensorflow #激活conda tensorflow
(tensorflow)$  # 此时用户名前多了一个(tensorflow),表示已激活命名环境
...
source deactivate #该指令用于关闭环境


如果你利用pyenv安装了Anaconda

pyenv virtualenv anaconda3-5.0.1 tensorflow
pyenv activate tensorflow
(tensorflow)$  # 此时用户名前多了一个(tensorflow),表示已激活命名环境
...
pyenv deactivate #该指令用于关闭环境


而后,依据本机配置选择合适的TensorFlow版本

TensorFlow官方给的安装包的url在这里

但是这里有一点需要特别注意,不然就安装成错误的版本,导致无法导入tensorflow。

拿python3.5的gpu-Tensorrflow的url做例子:

https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.5.0-cp35-cp35m-linux_x86_64.whl

可以看到,这里的gpu-Tensorflow的版本是1.5.0,而1.5.0对应的CUDA和cuDNN的版本如下所示。



tensorflow_gpu-1.5.0对应的cuDNN和CUDA版本分别为cuDNN7和CUDA9

所以我们不能直接复制上面的url进行安装,需要作出一些改动,很简单,只需要把官方提供的url中的1.5.0改成1.4.0即可,操作如图所示



(tensorflow) $ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.4.0-cp35-cp35m-linux_x86_64.whl


等待下载完成后

进入/root/anaconda2/bin,运行该目录下的python(如果你使用的是pyenv创建的环境,则直接运行python即可,无需进入指定路径)

导入tensorflow包,导入正常表示环境配置成功

编写其他代码,写出自己的Hello World!



$ python
Python 3.5.4 |Anaconda, Inc.| (default, Nov 20 2017, 18:44:38)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('hello,tensorflow!')
>>> sess=tf.Session()
...
>>> print(sess.run(hello))
b'hello,tensorflow!'


两点说明:

不推荐使用python3.6,这是因为tensorflow官方提供的3.6版本的tensorflow-gpu好像自身有一点bug,导致安装完成后
import tensorflow
时会出现如下错误:

RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6 return f(*args, **kwds)


目前Anaconda3默认的python版本是3.6.4,可以使用

conda create --name test_py3 python=3.5
创建一个基于python3.5的环境

如果你想安装tensorflow_gpu-1.5.0+CUDA9.0+cuDNNv7.0,可以参见其他教程,但是过新的版本出现问题的概率较大,网上对新版本的问题讨论也较少,不利于新手学习

4.问题汇总

安装tensorflow-gpu的过程遇到很多很多坑,写这篇博文主要目的也是为了记录一下自己遇到的问题和解决方案,以方便后期回顾,以下就是遇到的问题和对应解决方案

问题一:当使用cuda9时,运行
import tensorflow as tf
,出现错误:ImportError: libcublas.so.8.0: cannot open shared object file: No such file or directory

解决方法:

在网上查了很久,发现很多人都遇到了这个问题,但是都不知道怎么解决,最后,在NVIDIA的官网看到了答复,大意是指目前,Tensorflow-GPU的二进制可安装版本需要CUDA 8才可以,如果你真的想使用CUDA 9 / CUDNN 7,你需要从源代码构建TF(tensorflow)。 否则,必须安装CUDA 8并指向TF。当然,你可以同时安装CUDA 8可以与CUDA 9,并且不需要修改驱动程序; CUDA 9 GPU驱动程序将与CUDA 8配合使用。



参考来源:

https://github.com/tensorflow/tensorflow/issues/14622

https://stackoverflow.com/questions/44865253/libcublas-so-8-0-error-with-tensorflow

https://devtalk.nvidia.com/default/topic/1026198/cuda-9-0-importerror-libcublas-so-8-0/

问题二:cuDNN下载页面维护

如果你没有从我上面提供的链接进入到下载页面,那么你有可能遇到下载页面处于维护状态的情况:



解决方法是访问下面的地址进行下载(需要注册)

https://developer.nvidia.com/rdp/cudnn-download#a-collapseTwo

https://developer.nvidia.com/rdp/cudnn-download

问题三:cuda的driver和runtime版本不一致

一般表现为driver版本高于runtime,这主要是因为安装了高过版本的NVIDIA驱动导致的,解决方案是查看cuda安装包的文件名,获取对应NVIDIA驱动的版本,并进行安装(并没有直接证据表明二者版本不一致会引发问题,这里只是提供一种可能性,如果你此时实在想不到哪里有问题的话,可以考虑重新安装驱动,使版本一致)

cuda的driver和runtime版本最好都要为8.0(版本查看方法参见上文中的cuda样例)

问题四:Missing recommended library

如果你在安装CUDA的过程中遇到了下面的问题

Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...
...
Missing recommended library: libXi.so
Missing recommended library: libXmu.so


解决方案:安装相关依赖库

原因是缺少相关的依赖库,安装相应库就解决了:

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev


问题五:在import tensorflow as tf时返回RuntimeWarning: compiletime version 3.5 of module ‘tensorflow.python.framework.fast_tensor_util’ does not match runtime version 3.6 return f(*args, **kwds)

查阅了很多网站,貌似这是tensorflow自身的一个bug

解决方案(我采取的):降低python版本到3.5,重新安装对应python3.5的tensorflow

问题六:使用的明明是CUDA8.0,但是在import tensorflow as tf时却返回ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory)

这主要是因为错误的安装了tensorflow的版本导致的,从下面的版本对应图中可以看到,如果使用CUDA8.0+cuDNNv6.0的话,应该安装1.4.0版本的tensorflow(官方默认提供1.5.0)



解决方案:

查看tensorflow版本对应的cuda和cudnn的版本(我下载的1-5-0,对应的是9和7,所以才出现了ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory)

找到想要安装的版本后,只需要将官方提供的默认url中的版本号改成你想安装的版本号即可。

例如,我想要1.4.0版本的,只需要做如下更改:

官方提供的:

https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.5.0-cp35-cp35m-linux_x86_64.whl

我更改后的:

https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.4.0-cp35-cp35m-linux_x86_64.whl
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: