集群服务器环境下安装Caffe深度学习库(GPU)

关于配置Berkeley Caffe深度学习库的帖子网上已经有很多了, 不过大多数都是基于本地机进行配置.

我个人的一部分研究涉及到用深度学习对数字病理学图片进行分类(基于像素),因为图像量很大所以需要用到集群计算并利用GPU加速.个人觉得自己在算法和理论上并不算深入,在具体应用上大概有一年左右经历.

集群环境下配置和本地机配置过程最大区别在于大多数情况下我们没有根权限, 因此需要把Caffe和依赖库安装在用户目录下.

我在两个不同的集群环境中进行过Caffe的配置和运行, 资源管理软件分别是Grid Engine(CWRU)和SLURM(Buffalo), 二者在对于运行Caffe上大同小异,在具体环境和资源申请时候会有略微不同.

CWRU和Buffalo的集群服务器都支持模块管理,因此方便动态按需求加载和卸载资源. Caffe对于依赖库的版本要求比较苛刻,因此使用模块管理可以更好的控制依赖库版本和对应的环境变量.

首先,我们需要查一下Caffe依赖的库,具体可以从官网查到,大致概括一下:

1.CUDA肯定是必须的, 如果用GPU.推荐7.0版本,6.5也行,5.5以下不确定是否会出问题

2.BLAS(线性代数和矢量操作库), 可以是ATLAS,MKS,OpenBLAS中的任意一个

3.Boost,大于1.55版本

4.OpenCVS,大于2.4版本(3.0可以)

5.protobuf, glog, gflags 等等

6.hdf5, leveldb, snappy, lmdb

7.如果需要python和matlab接口,需要分别编译其各自接口:

   1)Python Caffe, python 2.7 或者 python 3.3+, numpy版本大于1.7, 含有boost的boost.python

   2)Matlab, MATLAB还有mex编译器

8.cuDNN (如果GPU支持cuDNN并且想启用cuDNN加速)


现在,我们先检测一下集群服务器上有哪些库已经安装我们只需要加载即可,使用命令,module avial

集群服务器环境下安装Caffe深度学习库(GPU)_第1张图片

可以发现其实很多库已经存在,只需加载即可. 为了运行Caffe时方便,我的做法是写一个脚本,把所有要加载的库都写在里面,用Caffe之前运行一下即可. 具体做法是, 我在这个路径下简历一个文件~/.usr/local/share/modulefiles/caffe_dependencies

  1. module load cmake
  2. module load hdf/5-1.8.11
  3. module load cuda/6.5
  4. module load intel-mpi/4.1.3
  5. module load vtk/6.0.0
  6. module load python/anaconda
  7. module load opencv/2.4.10
  8. module load boost/1.57.0
  9. module load mkl/11.2
  10. module load google-api/11.06.2014
到这里,我们把能通过加载解决的依赖库解决了,剩下就是得我们自己安装在用户目录下. 我自己喜欢安装在~/.usr/local目录下,因此
cd ~/.usr/local
然后就是git一下列源码
  1. git clone https://github.com/google/leveldb.git
  2. git clone https://github.com/schuhschuh/gflags.git
  3. git clone https://github.com/google/protobuf.git
  4. git clone https://github.com/google/glog.git
  5. git clone https://gitorious.org/mdb/mdb.git
  6. git clone https://github.com/google/snappy.git
接下来安装这些源码,主要有两种方式,用cmake和用make, 大概总结为5步
1.cd进入源码文件夹
2.如果有autogen.sh,先运行一下
        3.如果用make编译,则会有configure的脚本文件, 可以选择文件编译安装的位置,我的习惯是放在~/.usr/local下. 因此,
. ./configure --prefix=~/.usr/local/
        4.如果使用cmake,则用以下命令:
mkdir build,  cd build, cmake -DCMAKE_INSTALL_PREFIX= /nfs /01 /cwr0463 /.usr /local / ..
        5.make
        6.make all
这里需要注意几点:
1. LevelDB没有make install, 因此我们要手动添加,具体做法是
a) cp  --preserve=links libleveldb. *  /nfs /01 /cwr0463 /.usr /local /
b)cp -r include/leveldb /nfs/01/cwr0463/.usr/local/include
2. MDB没有configure和cmake, 因此我们需要在Makefile中改变安装路径,具体
具体用vim进入Makefile, /操作符找到prefix, 改为想要的路径, 我的是prefix  = ~/.usr/local/
3. Gflags如果在编译时没有使用-fPIC会进行报错,解决做法是
a)vim打开CMakeCache.txt
b)改变为CMAKE_CXX_FLAGS: STRING=-fPIC
c)正常步骤继续
安装完所有依赖库了,基本上完成一半工作.下面就是在写一些脚本让shell能在和接触的时候能发现一切刚才编译的二进制文件已经头文件和库文件.我的做法是在路径下建立~/.usr/local/share/modulefiles/depends_xxw/1.0文本, 1.0文本内容为添加环境变量具体如下

set             root             /nfs /01 /cwr0463 /.usr /local /

prepend-path    PATH                     $root /bin

prepend-path    CPLUS_INCLUDE_PATH       $root /include

prepend-path    C_INCLUDE_PATH           $root /include

prepend-path    LD_LIBRARY_PATH          $root /lib

prepend-path    LIBRARY_PATH             $root /lib

prepend-path    MANPATH                  $root /share

好了,现在对于在自己目录下编译的库设置完环境后,我们在打开刚才的caffe_dependencies文本, 把1.0也加入进去.最终结果看上去类似这样

[xiangxui@rush:~/.usr/local/share/modulefiles]$ cat caffe_dependencies 

module use -a /user/xiangxui/.usr/local/share/modulefiles

module load depends_xxw/1.0

module load cmake

module load hdf/5-1.8.11

module load cuda/6.5

module load intel-mpi/4.1.3

module load vtk/6.0.0

module load python/anaconda

module load opencv/2.4.10

module load boost/1.57.0

module load mkl/11.2

module load google-api/11.06.2014

至此依赖库及环境的设置就完成了. 接下来就开始编译Caffe的过程

首先, 依旧git Caffe源码

git clone https://github.com/BVLC/caffe.git

根据官方建议,

cp Makefile.config.example Makefile.config

根据自己实际情况更改一些路径和配置:

我个人使用cuDNN因此

< # USE_CUDNN := 1

改为

> USE_CUDNN := 1

因为使用mkl, 所以

< BLAS := atlas
< # Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
改为
> BLAS := mkl
> # Custom (MKL/ATLAS/OpenBLAS) include and lib directories

接下来继续改变路径到自己安装的路径, 需要注意的是PYTHON可能会有比较多的版本,每个版本的包含文件可能存在几个不同的位置,需要都进行包含

.
到这里,所有的环境,路径也设置完了. 不放心也可以用module list等命令确认一下

终于到了实际编译caffe阶段.....

1.因为我使用Python接口,所以需要单独编译,步骤是
a)cd进入caffe目录下的python文件夹
b)使用命令
for req in $(cat requirements.txt)do pip install --user $reqdone
2.进入实际的Caffe编译阶段, 首先确认在服务器上成功申请了GPU资源,并且编译阶段建议使用排错(debug)模式或者交互(interactive)模式
SLURM为
fisbatch --partition=debug --nodes=1 --ntasks=16 --gres=gpu:1
GE为
qsub -I -q gpufermi -l nodes=2:ppn=8:gpus:2
3.最后就是
make all
make run
make runtest
也可以用自带的一些例子进行一下测试比如

集群服务器环境下安装Caffe深度学习库(GPU)_第2张图片
我的一个研究项目关于分类数字病理学图像像素点为0或1(1为细胞核像素,0为非细胞核像素),用训练好的模型得到最终结果为:

从左到又依次为原图片,Caffe计算出来的概率图片, Caffe自带的argmax作用于概率图片上的结果.对了,DL模型用的是Alexnet.

先写这么多了,欢迎大家交流讨论


你可能感兴趣的:(集群服务器环境下安装Caffe深度学习库(GPU))