这段折腾caffe的日子…

Preface

这段日子,一直在折腾caffe, 试跑了一下CNN、测试了一个FCN(Fully Convolutional Networks)。
下面纪录一下自己的配置过程(Ubuntu+Driver+MKL+CUDA+cuDNN+python),我在OS X、Ubuntu(14.04、15.04、15.10以及15.10 Kylin版本)上都折腾安装过。可谓战斗经验丰富,目的是给大家做个参考,因为每个人都会遇到各种不同的问题。如果能给读者一丝的帮助,那真是太好了!

一开始我在自己的MacBook pro上配置,不过由于MacBook没有显卡。之后训练了一个160M的数据,笔记本跑了20多个小时,都没跑完。风扇“呼呼“地转,心疼。强制停止了,也说明了折腾深度学习这东西,别折腾笔记本了,当个终端就好。于是在一台装有Ubuntu + Titan X的电脑上配置,跑数据。Ubuntu的配置相对OS X还是简单多的,OS X因为默认编译器是Clang,会麻烦一些。
至于Windows版本的caffe,倩姐折腾了一个星期多才搞定……我选择狗带……不过好像用微软编译好的也很快,不过少了一个配置的过程,感觉不是那么完整,哈哈。

Install general dependencies

caffe依赖的库很多,这一点原作者贾扬清也承认。我在一开始配置的过程中,经常需要编译错误后停下来,安装缺失的库。
配置的第一步,就是把caffe所依赖的通用包直接用sudo apt-get install ***来解决。以下是依赖的包,参考caffe官网配置教程:

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

这里补充一点,由于每个人的电脑环境情况不一样,所以在后面很多时候用caffe的python接口的时候。在import caffe的时候,会出现No module named lmdb之类的情况,这时候试一下用pip或者’easy_install’来安装缺失的库,如lmdb

$ pip install lmdb
or
$ easy_install lmdb

最好加上sudo,赋予权限,因为要将这些库安装到/usr/local目录下:

$ sudo pip install lmdb

Install BLAS or Intel MKL

然后是安装BLAS,是为了让CPU计算时速度更快,可以用ATLAS:

$ sudo apt-get install libatlas-base-dev

当然了,也可以用OpenBLAS或者Intel MKL。
MKL是需要进行学生身份认证,并申请秘钥,并且安装包比较大,末尾我传一份我下载到的MKL。安装MKL后,如果不配置MKL路径与库,编译caffe会报错。配置方法:

$ sudo gedit /etc/ld.so.conf.d/intel_mkl.conf

在新建的intel_mkl.conf中添加intelmkl的路径:

/opt/intel/lib/intel64

/opt/intel/mkl/lib/intel64

Install CUDA

之后, 下载并安装CUDA。下载到*.deb文件后,推荐用命令行的安装方式,直接用Ubuntu的Software Center安装之后,貌似/usr/local/文件夹下并不会出现关键的cuda这个文件,我试验了几次,都是这样的情况,所以推荐命令行(以我自己的CUDA7.5版本为例):

$ sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64
$ sudo apt-get update
$ sudo apt-get install -y cuda

完成后,记得配置CUDA的/usr/local/cuda-7.5/binPATH/usr/local/cuda-7.5/lib64LD_LIBRARY_PATH。执行bash

$ sudo vim ~/.bashrc

添加路径:

export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

可以Terminal中用以下命令查看CUDA版本:

$ nvcc --version

Install Nvidia Driver

对于我这台新的工作站,我这台机器的主板是没有集成显卡的,只有Nvidia Titan X独显。所以安装完Ubuntu之后,由于没有显卡驱动,屏幕分辨率不能直视。但安装Nvidia显卡驱动中,各种折腾,吃尽了苦头。
一开始我按照网上的教程:

$ sudo apt-get remove --purge nvidia

或安装指定版本:

$ sudo add-apt-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ sudo apt-get install nvidia-352 

安装后Logout,重新进入调整屏幕分辨率。发现最大只能到 1360×768 ,我以为我的显卡驱动没有安装好,因为我看我们组的服务器以及倩姐的电脑,都能达到1080的分辨率。这块至少折腾了我一个星期,最后得出结论:

只要是含有集成显卡的,都可以调节为1080的分辨率。而只含有Nvidia独显de机器,比如说我的机器只含有Titan X这一个显卡,就不可能调节成1080的分辨率,当然这是在系统是Ubuntu系统的情况下。对于Windows系统,发现分辨率可以支持的很高,要看你的显示器支持多大的分辨率了。

而且,这块安装显卡驱动过程中,得到教训是,Nvidia的闭源驱动真的是Linux不稳定因素的主要原因,不光难装(有的还需要按ALT+Ctrl+F1进入控制台界面,用run文件进行安装),而且在安装之后,系统会经常性的崩溃!
所以,如果对命令行不熟悉的,我推荐可以用新立得安装包管理器(Synaptic)安装Nvidia驱动,很方便。而且,对于自己不熟悉的命令,不要乱敲进Terminal!

Install cuDNN

cuDNN是GPU加速计算神经网络的库。
这段折腾caffe的日子…_第1张图片

更新真的跟快,我之前下载的时候还是v4版本,现在都到v5了。不过提醒的是,如果你的深度学习框架,如caffe,由于版本问题,有些caffe的版本只支持cuDNN6.5版本,有些,只支持7.0及更高版本。编译的时候出现cuDNN的报错,十有八九是cuDNN的版本不对导致,所以这一块按需下载,并进行正确连接。

下面我纪录下cuDNN v2版本,cuDNN v4版本的配置链接过程。
cuDNN v4,下载文件名称: cudnn-7.0-linux-x64-v4.0-prod.tgz

//安装cuDNN
$ sudo tar xvf cudnn-7.0-linux-x64-v4.0-prod.tgz
$ cd cuda/include
$ sudo cp *.h /usr/local/include/
$ cd ../lib64
$ sudo cp lib* /usr/local/lib/
$ cd /usr/local/lib
$ sudo chmod +r libcudnn.so.4.0.7
//链接cuDNN的库文件
$ sudo ln -sf libcudnn.so.4.0.7 libcudnn.so.4
$ sudo ln -sf libcudnn.so.4 libcudnn.so
$ sudo ldconfig -v

cuDNN v2,下载文件名称: cudnn-6.5-linux-x64-v2.tgz

//安装cuDNN
$ sudo cp cudnn.h /usr/local/include
$ sudo cp libcudnn.so /usr/local/lib
$ sudo cp libcudnn.so.6.5 /usr/local/lib
$ sudo cp libcudnn.so.6.5.48 /usr/local/lib
//链接cuDNN的库文件
$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5.48 /usr/local/lib/libcudnn.so.6.5
$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5 /usr/local/lib/libcudnn.so
$ sudo ldconfig -v

Git and compile caffe

现在,基本把caffe所需要的各种环境及依赖安装好了,下面就是要Git caffe源码了:

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

cd进caffe目录下,按照官网上的教程:

$ cp Makefile.comnfig.example Makefile.config

再修改Makefile.config文件,前方高能!这里坑太多……

第一步,因为我是有GPU的,所以,不需要CPU_ONLY的,如果没有的话,需要把这行取消注释,用CPU跑。
我也配置了cuDNN库,所以取消注释:

USE_CUDNN := 1

这里坑太多是因为每个人的电脑的配置、环境都不一样,所以需要根据自己的实际去判断、选择、修改Makefile.config里的环境。所以,这地方需要细心、耐心,加油!

我还修改的地方是:

//This is required only if you will compile the MATLAB wrapper
//MATLAB directory should contain the mex bin
MATLAB_DIR := /usr/local/MATLAB/R2015b

这里,我需要配置Matlab wrapper,所以需要提供Matlab的环境位置。

接下来就是:

$ make all

或者:

 $ make all -j8

我推荐后面一种编译方式,编译速度快很多,意思是用电脑的8个线程来编译。caffe官网上建议根据自己计算机的实际情况合理分配线程。
之后:

$ make test -j8
$ make runtest -j8

这里,如果之前的CUDA没有安装好,或者CUDA的库没有配置好,会出现如下错误:error while loading shared libraries: libcudart.so.7.5: connot open shared object file: No such file or directory,如下图:

这里要使得编译通过,得加上如下语句:

$ export PATH = /usr/local/cuda-7.5/bin:$PATH
$ export LD_LIBRARY_PATH = /usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

我比较奇怪,我在之前一台机子上编译的时候并没有出现这种问题,但这里却碰到很多次了。仔细Google一下,碰到这种问题的还挺多。

之后,make runtest -j8完成,对于我编译的版本的caffe,出现了如图的警报:YOU HAVE 2 DISABLED TESTS
这段折腾caffe的日子…_第2张图片

我跑了两遍,都出现了这种情况。Google之,发现caffe作者之一的Shelhamer在Github上有解答:
这段折腾caffe的日子…_第3张图片

所以,这不是我编译出了问题,而是这个版本caffe自己本身的问题。

Compile python wrapper and Matlab wrapper

最后一部分就是编译caffe的python wrapper,与编译Matlab的wrapper。

$ make pycaffe
$ make matcaffe

这里一个问题是,经常当我们编译好python的接口后,进入python控制台,想import caffe导入caffe模块的时候,会出现如下的错误:

No Module named caffe

解决办法是,export导入编译好的python借口的路径:

$ export PYTHONPATH=/home/chenxp/caffe/python:$PYTHONPATH

根据我的实践,只要是成功编译好python wrapper的情况下,这种方法还没有不成功过。
/home/chenxp/caffe/python是我的路径,这个根据自己的路径正确填写即可。
之后,就可以import caffe啦~^_^

至此,caffe的配置、编译、安装已经完成,enjoy…Y(^_^)Y…

再强调一次,每个人的环境都不一样,每个人遇到的问题也会不一样,所以解决方法不能一概而论,没有完全的通解。所以,在遇到实际的报错时,还需要自己去探索解决。加油,希望你能体会到这种解决问题的快乐!

Supplementary

最后,附上我配置过程中的各种库与包,但还是强烈建议去官网下载自己对应的包。
1. Nvidia CUDA: http://pan.baidu.com/s/1gfwlb31 (key: gmxf)
2. Intel Parallel Studio XE: http://pan.baidu.com/s/1miEiN0G (key: ax67)
3. Nvidia cuDNN: http://pan.baidu.com/s/1o7Di4P0 (key: dyyk)

Reference

  1. http://caffe.berkeleyvision.org/install_apt.html
  2. https://ouxinyu.github.io/Blogs/20140723001.html
  3. https://ouxinyu.github.io/Blogs/20151108001.html

你可能感兴趣的:(CUDA,机器学习,深度学习,caffe)