ubuntu 下GPU版的keras的环境搭建

时间:2022-10-27 13:53:15

前言:零零散散地整了好长一段时间,终于把环境搭得差不多了。本人刚开始学习深度学习,甚至连入门都还不算。因为舍友们都是用的caffe,所以之前也搭了caffe跑了几个例子。但是之前没有GPU,用的是CPU跑的。以前做的都是传统机器学习方法,也学过一点神经网络的基础,但是却不知道原来搞深度学习对于硬件的要求如此至高。可以说没有GPU根本就搞不起深度学习。突然好羡慕舍友们实验室都有充足的资源,最近老板终于肯置了一台服务器,虽然好多人一块用,资源非常紧张,但是总算也有GPU了,甚是高兴。

本文我主要记录了之前安装环境的各个步骤,以免日后遗忘,其中可能有些记录不够完整,而且每个人的机器硬件不尽相同,所以只能提供一点参考。

我的环境: Ubuntu14.04 + TITAN X (Pascal) + cuda8.0 + cudnn5.0 cudnn5.1+ keras(thenao | tensorflow)

1. cuda8.0 的安装

有了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/profile

    b.添加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.安装(其实只是解压)

比如我下载的位置为: /home/common/cudnn/cudnn-8.0-linux-x64-v5.0-ga.tgz
a. 进入该目录
cd /home/common/cudnn/
b. 解压文件,会生成一个cuda文件夹
tar -zxvf cudnn-8.0-linux-x64-v5.0-ga.tgz
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
d. 修改文件的权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

3. 安装 tensorflow-gpu

因为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

4. 配置keras

4.1. 设置后端(backend)

vi ~/.keras/keras.json

使用tensorflow为后端的话,在keras.json 中写入:

{
"image_dim_ordering": "tf",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "tensorflow"
}

使用teano为后端的话,在keras.json 中写入:

{
"image_dim_ordering": "th",
"epsilon": 1e-07,
"floatx": "float32",
"backend": "theano"
}

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
...

如果是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

其中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内存,所有跑这个小任务还是蛮快的。

好吧,感觉很多东西还不是特别清楚,后期理解了再来更新。