http://blog.csdn.net/jerr__y/article/details/53695567
前言:本文主要介绍如何在 ubuntu 系统中配置 GPU 版本的 tensorflow 环境。主要包括:
- cuda 安装
- cudnn 安装
- tensorflow 安装
- keras 安装
其中,cuda 安装这部分是最重要的,cuda 安装好了以后,不管是 tensorflow 还是其他的深度学习框架都可以轻松地进行配置。
我的环境: Ubuntu14.04 + TITAN X (Pascal) + cuda8.0 + cudnn5.0 cudnn5.1+ keras(thenao | tensorflow)
1. cuda8.0 的安装
下载网址:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu
有了GPU之后,我们还需要想办法把它用到我们的算法运算中来才能提高学习的速度。cuda就是这样的一个运算平台,装上cuda之后,我们才能用GPU来进行复杂的并行计算。
因为看了keras中文文档,里边提到Pascal架构的显卡只能选择CUDA 8.0,所以我就装了8.0,而且用着也的确没有问题。至于安装的话,但我是参考官网的指导手册安装的,没有问题,这里就不再写了。
其实网上很多的中文安装教程都是按照指导手册上说的,比如:CUDA 入门之 Ubuntu 系统下环境搭建(注意,这个可是cuda7.5).
* 说说安装完后(以下为舍友提供) *
查看安装是否成功
a. 打开cuda的安装目录 ,编译samples
cd /usr/local/cuda-8.0/samples sudo make -j4
# 这里j4的意思是使用CPU四个核心同时编译,如果你的电脑是8核,可以使用j8,编译速度将会变快b. 编译成功后打开硬件测试文件
./usr/local/cuda-8.0/samples/bin/x86_64/linux/release/deviceQuery
会看到返回一大串信息,里面可以看到显卡型号以及显卡计算能力等,说明没问题了。
安装完后添加环境变量:
a.在/etc/profile中添加环境变量, 在文件最后添加(文件要用sudo 打开):PATH=/usr/local/cuda-8.0/bin:$PATH export PATH
添加完后保存退出,执行如下命令使环境变量生效: source /etc/profileb.添加lib路径,在 /etc/ld.so.conf.d/ 加入文件 cuda.conf, 内容如下: /usr/local/cuda-8.0/lib64
执行如下命令立刻生效:
sudo ldconfig
2. cudnn v5cudnn 5.1 的安装
* 注意:之前安装了vudnn v5,结果使用tensorflow出错。然后替换成了cudnn 5.1。根据错误的提示,如果你的tensorflow是使用二进制文件安装的,直接把cudnn的include 和 lib64 文件夹下的文件相应的替换到 /usr/local/cuda/ 中就行了。但是由于我是直接用pip install tensorflow-gpu 的方式来安装的,替换掉文件后还是出错。解决办法呢就是把tensorflow-gpu卸了重新安装一遍!!*
refer to: Ubuntu 16.04 CUDA 8 cuDNN 5.1安装
linux替换cudnn版本 cudnn v5cudnn 5.1 的安装比较简单。下载地址
2.1. 下载
a. 首先需要注册一个账号,填一下问卷。登录之后才让你下载,而且下载之前也是简单填个问卷。
b.下载 Download cuDNN v5 (May 27, 2016), for CUDA 8.0 ,注意要和自己安装的cuda的版本对应了。
2.2.安装(其实只是解压)
下载下来可能是 .solitairetheme8 文件, 先把后缀改成 .tgz 再进行解压即可:
cp cudnn-8.0-linux-x64-v5.1.solitairetheme8 cudnn-8.0-linux-x64-v5.1.tgz
tar -xvf cudnn-8.0-linux-x64-v5.1.tgz
- 1
- 2
比如我下载的位置为: /home/common/cudnn/cudnn-8.0-linux-x64-v5.0-ga.tgz
a. 进入该目录
cd /home/common/cudnn/
- 1
b. 解压文件,会生成一个cuda文件夹
tar -zxvf cudnn-8.0-linux-x64-v5.0-ga.tgz
- 1
c. 把相应的文件拷贝到cuda的对应目录。(注意是cuda, 不是cuda-8.0)
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
- 1
- 2
d. 修改软连接,在 /usr/local/cuda/lib64/ 目录下,使用 ll 命令可以查看软俩姐情况。如果里边有旧版本的 libcudnn.so. 开头的文件,全部删了,只需要保留现在最新的 libcudnn.so.5.1.3 文件即可,按下面顺序执行:
# libcudnn.so.5.1 -> libcudnn.so.5.1.3*
sudo ln -s libcudnn.so.5.1.3 libcudnn.so.5.1
# libcudnn.so -> libcudnn.so.5.1*
sudo ln -s libcudnn.so.5.1 libcudnn.so
- 1
- 2
- 3
- 4
如果报错,说某个文件已经存在了(libcudnn.so.5.1 或者 libcudnn.so),那么先删除该文件,再执行上面的两行命令即可。
e. 修改文件的权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
- 1
f.更新链接库:
sudo ldconfig
- 1
3. 安装 tensorflow-gpu
首先安装 anaconda。anaconda 使用 python 进行科学运算,必须得第一步把 anaconda 安装上,安装好以后里边包括了各个库,比如 numpy, pandas, seaborn, matplotlib 等。
安装步骤非常简单,直接下载,执行就可以了,这里不多说。
因为keras 和theano 的安装都比较容易,也没出什么问题,所以就不说了。关于tensorflow,网上好多都说用源码来安装,其实只要版本选择正确的话不用源码安装,还是非常容易的,所以一定要和自己安装的cuda和cudnn的版本对应。
比如我安装了cuda 8.0 和 cudnn v5 , 则根据tensorflow的官网的说明。
The GPU version works best with Cuda Toolkit 8.0 and cuDNN v5. Other versions are supported (Cuda toolkit >= 7.0 and cuDNN >= v3) only when installing from sources.
就是说如果不是cuda 8.0 和 cudnn v5的话,应该使用源码方式进行安装才行。幸运的是,我安装的正好就是cuda 8.0 和 cudnn v5,所以直接使用pip install 的方式就行了。因为我的是Ubuntu, 所以只需要执行下面一行命令就搞定了。
$ pip install tensorflow-gpu
- 1
如果一切顺利,那么你的 tensorflow gpu 版本环境安装完毕,下面的内容也不用看了,直接起飞。
这样安装的是最新版本的 tensorflow,如果想安装旧版本的话,可以使用下面的方式进行安装:
(tensorflow)$ pip install --upgrade tfBinaryURL # Python 2.7
(tensorflow)$ pip3 install --upgrade tfBinaryURL # Python 3.n
- 1
- 2
后面的这个 tfBinaryURL 是你所要安装的版本对应的链接,点击这里进行查看:
比如要安装 python2.7 的 tensorflow1.2.1(其他版本直接改一下版本号就得了), 可以执行下面的命令:
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.2.1-cp27-none-linux_x86_64.whl
- 1
其中 –upgrade 表示会覆盖掉你当前已经安装的版本。如果提示你没有sudo权限的话,那么你可以安装到自己的目录下,再把路径添加到自己的环境变量中就可以了,通过 –target 参数来设置,其他所有的 python 库都可以以这样的方式安装。
pip install --target /home/huangyongye/my_python/ tensorflow-gpu
- 1
安装完后,改一下你自己的环境变量:
vim ~/.bashrc
- 1
然后在该文件里边添加你的安装路径:
PATH=/home/yongye/my_python:$PATH;
export PATH;
- 1
- 2
然后执行下面的命令即可:
source ~/.bashrc
- 1
4. 配置keras
4.1. 设置后端(backend)
vi ~/.keras/keras.json
- 1
使用tensorflow为后端的话,在keras.json 中写入:
{
"image_dim_ordering": "tf",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}
- 1
- 2
- 3
- 4
- 5
- 6
使用teano为后端的话,在keras.json 中写入:
{
"image_dim_ordering": "th",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}
- 1
- 2
- 3
- 4
- 5
- 6
i其中,”image_dim_ordering”: “th” 表示使用theano的数据格式。关于’th’ 和 ‘tf’ 可以参考:keras的一些基本概念。
4.2 设置gpu按需使用
refer to: Tensorflow设置显存自适应,显存比例
如果是tensorflow的话,可以在你的代码中进行设置。比如:
# 设置tendorflow对显存使用按需增长。
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils
...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如果是theano的话,用户在自己的home根目录下面建立.theanorc文件,在其中写入:
[global]
openmp=False
device = gpu
optimizer=fast_compile
floatX = float32
allow_input_downcast=True
[lib]
cnmem = 0.3
[blas]
ldflags= -lopenblas
[nvcc]
fastmath = True
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
其中cnmem = 0.3 这一行表示占用GPU所有显存的30%.
5. 速度比较
s按照[译]神经网络的”Hello world” –keras 入门跑了个小例子。结果如下:
-
theano + gpu
CPU times: user 7.49 s, sys: 100 ms, total: 7.59 s
Wall time: 7.61 s -
tensorflow + gpu
CPU times: user 48 s, sys: 7.06 s, total: 55 s
Wall time: 25.9 s -
theano + cpu
CPU times: user 3.77 s, sys: 468 ms, total: 4.24 s
Wall time: 26.5
在这个小任务中,速度体现的并不是太好。毕竟CPU也是12核的,还有64G的DDR4内存,所有跑这个小任务还是蛮快的。
好吧,感觉很多东西还不是特别清楚,后期理解了再来更新。