Caffe安装过程全记录

来源:互联网 发布:淘宝男质量好的店铺 编辑:程序博客网 时间:2024/04/28 16:35

由于项目需要,这周花了两天时间在实验室的云服务器上搭好了Caffe环境,期间走了一些弯路,也总结了一些经验教训。今天又从头开始重新搭了一遍,并且记录下了整个过程,形成了这篇安装笔记,留作备忘。

系统环境:

  • 操作系统:CentOS 6.5 64位
  • 显卡配置:无GPU

主要参考文档:

  1. 官方安装文档 http://caffe.berkeleyvision.org/installation.html
  2. 官方依赖安装指导 http://caffe.berkeleyvision.org/install_yum.html
  3. @s2392735818 的博客 http://blog.csdn.net/s2392735818/article/details/49796017

首先明确几个问题:

  1. 因为我们的服务器没有GPU,所以这篇笔记不涉及CUDA和cuDNN的安装;
  2. 配置了Caffe的Python接口Pycaffe,未配置MATLAB接口Matcaffe;
  3. BLAS选用OpenBLAS库,Pycaffe的依赖选用Anaconda来安装;
  4. 基本按照文档2中的顺序和方法来安装各项依赖,当yum软件库中的版本不满足要求时则采取源码编译安装的方式,并调整了个别依赖的安装次序;
  5. 按照文档3的说法,各依赖均需安装在/usr/local目录下,否则Caffe编译时会提示找不到相应的库(大多数依赖的默认安装路径就在/usr/local,但是有个别除外,需要特别注意;另外,我是用root用户登录的所以不存在/usr目录写入权限的问题,如果用其他用户登录的话最好用 sudo 命令来安装)。

下面是具体的安装过程:

1. Protobuf

GitHub项目主页 https://github.com/google/protobuf/

我下载的版本是Protobuf 3.3.2(Pycaffe要求Protobuf版本>=2.5.0):

cd ~wget https://github.com/google/protobuf/archive/v3.3.2.tar.gz

解压:

tar -zxvf v3.3.2.tar.gzcd protobuf-3.3.2

编译之前需要先执行下面的脚本来生成configure文件:

./autogen.sh

然后就是正常的编译、安装:

./configuremakemake checksudo make install

默认的安装路径就在/usr/local,所以只要确保当前用户有写入权限就可以了,不需要特别指定安装路径;

安装完成后刷新动态库目录的缓存:

sudo ldconfig

测试是否安装成功:

protoc --version

如果回显 libprotoc 3.3.2 则表示安装成功。

注:这里编译的是protobuf的C++接口,由于编译Python接口所需的依赖较多,所以将其放在安装Anaconda之后。


2. LevelDB,Snappy

Pycaffe要求LevelDB版本>=0.191,yum软件库中的版本满足要求,所以这里采用Caffe官网给出的方法,直接用yum安装:

sudo yum install leveldb-devel snappy-devel

安装时的版本是LevelDB 1.7.0Snappy 1.1.0

安装的路径为/usr/include(包含目录)/usr/lib64(库目录),这两个目录最后需要在Caffe的Makefile.config文件中配置。


3. OpenCV

这里使用GitHub上 @jayrambhia 写好的脚本来自动安装:

cd ~git clone https://github.com/jayrambhia/Install-OpenCV.gitcd Install-OpenCV/RedHatsudo ./opencv_latest.sh

安装时的版本是OpenCV 3.2.0(Caffe要求OpenCV版本>=2.4)。

安装的过程中在”– ICV: Downloading ippicv_linux_20151201.tgz…”这一步会卡很长时间,而且最后通常都会下载失败;
我在网上找到了这个包,上传了一份到这里 http://download.csdn.net/detail/u010391437/9880368 ;
把下载好的包上传到目录 ~/Install-OpenCV/RedHat/OpenCV/opencv-3.2.0/3rdparty/ippicv/downloads/linux-xxx/,重新执行 sudo ./opencv_latest.sh 即可完成安装。

如果自动脚本安装失败,可以仿照opencv_install.sh的代码手动安装。具体可参考 http://www.tuicool.com/articles/uiuA3e 这篇博客的第6步。


4. HDF5

后面的Anaconda会自动安装,这里可以先跳过这一步。


5. GLog,GFlags,LMDB

这三项依赖均采用Caffe官网给出的方式来安装:

GLog:

cd ~wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-glog/glog-0.3.3.tar.gztar zxvf glog-0.3.3.tar.gzcd glog-0.3.3./configuremake && sudo make install

GFlags:

cd ~wget https://github.com/schuhschuh/gflags/archive/master.zipunzip master.zipcd gflags-mastermkdir build && cd buildexport CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1make && sudo make install

LMDB:

cd ~git clone https://github.com/LMDB/lmdbcd lmdb/libraries/liblmdbmake && sudo make install

默认的安装路径均在/usr/local,不需要特别指定。

安装时的版本分别为GLog 0.3.3GFlags 2.2.0LMDB 0.9.21


6. OpenBLAS

官网下载地址 http://www.openblas.net/

我下载的版本是OpenBLAS 0.2.19

cd ~wget http://github.com/xianyi/OpenBLAS/archive/v0.2.19.tar.gz

解压:

tar -zxvf v0.2.19.tar.gzcd OpenBLAS-0.2.19

编译,安装:

makesudo make PREFIX=/usr/local install

由于OpenBLAS的默认安装路径是/opt/OpenBLAS,所以这里我们需要用 PREFIX 选项来指定安装路径,安装到/usr/local。


7. Anaconda

这个包提供了Pycaffe所需的多项依赖,包括Python、NumPy、pandas等,还提供了HDF5等其他的库。

官网下载地址 https://www.continuum.io/downloads

官网提供了两种版本:Anaconda2基于Python 2.7,Anaconda3基于Python 3.6。

我下载的版本是Anaconda2 4.4.0

cd ~wget https://repo.continuum.io/archive/Anaconda2-4.4.0-Linux-x86_64.sh

下载后直接运行即可:

sudo bash Anaconda2-4.4.0-Linux-x86_64.sh

先让你阅读license,一路回车;
然后问你是否接受license,输入yes;
接下来输入安装路径,默认是 ~/anaconda2,我在这里安到了/usr/local/anaconda2
最后问你要不要把安装路径加入用户环境变量PATH,输入yes,安装完成。

安装完成后还要继续做一步操作,把Anaconda的库目录添加到环境变量中:

打开当前用户的 .bashrc 文件:

vim ~/.bashrc

在末尾添加一行:

export LD_LIBRARY_PATH=your_anaconda_path/lib:/usr/local/lib:$LD_LIBRARY_PATH

用Anaconda的实际安装路径替换your_anaconda_path(我在这里填的是/usr/local/anaconda2);
保存,退出;
关闭当前终端,重新打开一个新的终端使环境变量生效。

这一步非常重要,后面运行Caffe的时候如果报错找不到libxxx.so文件,很可能就是由于没有添加库目录引起的。


8. Protobuf - Python接口

由于编译protobuf的Python接口所需的依赖Anaconda都会帮我们自动装好,所以把Python接口的编译放到Anaconda安装之后来做。

cd ~/protobuf-3.3.2/python python setup.py build python setup.py test python setup.py install

完成后进入Python命令行验证一下是否安装成功:

python>>> import google.protobuf

如果没有报错则说明protobuf的Python接口安装成功。


9. Boost

官网下载地址 http://www.boost.org/

我下载的版本是Boost 1.64.0(Caffe要求Boost版本>=1.55):

cd ~wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz

解压:

tar -zxvf boost_1_64_0.tar.gzcd boost_1_64_0

编译,安装:

./bootstrap.shsudo ./b2sudo ./b2 install

默认安装路径就在/usr/local,所以不需要特别指定。


10. Caffe

终于迎来了最后一步的重头戏。

GitHub项目主页 https://github.com/BVLC/caffe

下载:

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

修改配置文件:

cd caffecp Makefile.config.example Makefile.configvim Makefile.config

需要修改的地方有以下几个:

  1. 取消注释CPU_ONLY选项(line 8);
  2. 取消注释OPENCV_VERSION选项(line 21);
  3. 注释掉GPU设置的相关选项(CUDA_DIR - line 28; CUDA_ARCH - line 36 ~ 44; TEST_GPUID - line 117);
  4. 将BLAS选项改为open(line 50);
  5. 取消注释BLAS_INCLUDE和BLAS_LIB选项,并修改为OpenBLAS相应的安装路径(line 54, 55)(我这里分别改为/usr/local/include/usr/local/lib);
  6. 注释掉PYTHON_INCLUDE选项(line 68, 69);
  7. 取消注释ANACONDA_HOME和PYTHON_INCLUDE选项(line 72 ~ 75),并将ANACONDA_HOME选项修改为Anaconda的安装路径(我这里改为/usr/local/anaconda2);
  8. PYTHON_LIB(注释掉line 83,取消注释line 84);
  9. 添加额外的包含目录INCLUDE_DIRS和库目录LIBRARY_DIRS(line 94, 95)(我这里分别添加了/usr/include/usr/lib64);

(修改后的文件在这里 http://download.csdn.net/detail/u010391437/9882095 可以直接下载使用)

修改后保存退出,执行编译:

make allmake testmake runtest

PS1. 如果是多核CPU的话可以用 -jn 选项启动n个线程同时编译,加快编译速度,比如4核CPU:

make all -j4

PS2. 每次编译失败后需要先清理编译文件:

make clean

再重新开始编译。

最后编译Python接口:

make pycaffe

至此Caffe环境全部安装完成。


11. Pycaffe编译和运行过程中的报错及解决方案

我在编译和运行Pycaffe的过程中出现过几个问题,这里记录一下,供参考。

11.1 编译Pycaffe时报错 “cannot find -lboost_python”

报错信息如下:

CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp/usr/bin/ld: cannot find -lboost_pythoncollect2: ld returned 1 exit statusmake: *** [python/caffe/_caffe.so] Error 1

报错的原因是boost.python模块没有被正确安装。

解决方案:

重新编译boost.python模块:

cd ~/boost_1_64_0./bootstrap.sh --with-libraries=pythonsudo ./b2sudo ./b2 install

之后再重新编译Pycaffe即可。

我猜测boost.python模块的编译失败可能和Python版本有关,因为第一次编译boost时用的是系统的Python,版本2.6;重新编译boost.python时系统Python由Anaconda提供,版本是2.7。所以在新版安装笔记中我把boost放到Anaconda安装之后才编译,就没有再出现这个问题了。

11.2 调用Pycaffe时报错 “No module named google.protobuf.internal”

报错信息如下:

Traceback (most recent call last):  File "/root/caffe/python/classify_mike.py", line 14, in <module>    import caffe  File "/root/caffe/python/caffe/__init__.py", line 1, in <module>    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer  File "/root/caffe/python/caffe/pycaffe.py", line 15, in <module>    import caffe.io  File "/root/caffe/python/caffe/io.py", line 8, in <module>    from caffe.proto import caffe_pb2  File "/root/caffe/python/caffe/proto/caffe_pb2.py", line 6, in <module>    from google.protobuf.internal import enum_type_wrapperImportError: No module named google.protobuf.internal

报错的原因是protobuf的Python接口没有被正确安装。

解决方案一:

按照第8步重新编译protobuf的Python接口。

解决方案二:

@wuzuyu365 在 http://blog.csdn.net/wuzuyu365/article/details/52431062 这篇博客中给出了另一种解决方案:

在Anaconda中安装protobuf:

cd /usr/localsudo chmod 777 -R anaconda2conda install protobuf

编译安装成功后便可正常使用Pycaffe。


12. 最后的一点唠叨

囿于水平有限,文章难免有所疏漏,如果发现哪些地方表述有误,请指出来大家可以一起讨论。

另外这篇文章是我一点一点码出来的,所以未经允许,请勿转载,谢谢配合!

原创粉丝点击