如果安装过程遇到问题,可直接跳转到问题汇总查看
1.我的电脑安装环境:
双系统:win10+Ubuntu16.04(在Ubuntu下配置)
CPU:E5-1660 v4
GPU:GTX-980Ti
gpu版tensorflow的官方要求">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
- 安装Anaconda(官方给出了4种安装方式,这里我们选择Anaconda,主要目的是为了利用pyenv方便管理,pyenv的安装和使用可以参见这里)
- 安装TensorFlow-GPU
- 运行一个Tensorflow版的HelloWorld程序
3.开始安装
gpu型号和性能安装显卡驱动">一、确认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
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,则需要修改 ~/.zshrc文件)
#在文件结尾处添加
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: 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
下载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">六、安装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-libcublasso80-cannot-open-shared-object-file-no-such-file-or-directory">问题一:当使用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下载页面维护">问题二:cuDNN下载页面维护
如果你没有从我上面提供的链接进入到下载页面,那么你有可能遇到下载页面处于维护状态的情况:
解决方法是访问下面的地址进行下载(需要注册)
https://developer.nvidia.com/rdp/cudnn-download#a-collapseTwo
https://developer.nvidia.com/rdp/cudnn-download
cuda的driver和runtime版本不一致">问题三: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
tensorflow-as-tf时返回runtimewarning-compiletime-version-35-of-module-tensorflowpythonframeworkfasttensorutil-does-not-match-runtime-version-36-return-fargs-kwds">问题五:在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
cuda80但是在import-tensorflow-as-tf时却返回importerror-libcublasso90-cannot-open-shared-object-file-no-such-file-or-directory">问题六:使用的明明是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