Caffe 完全安装指南(GPU) 上

0. 写在前面


本文从Caffe的依赖库开始, 以源码编译的方式完整的安装整一个Caffe框架所需的环境, 并且对整个开发步骤都做了一定的解释说明, 力求通俗易懂, 让Caffe能被更多人接受.
要注意的是源码编译是比较繁琐的工作,笔者测试了多次才使文中所用各个库的版本所用标准不发生冲突,如果需要更换版本,请自行斟酌。

本文所用编译工具版本为:

make 3.82
cmake 1.14.7
gcc/g++ 6.5.0
cuda 10.1

1. Caffe依赖包安装


1.1. ProtoBuffer


ProtoBuffer是由Google开发的一种可以实现内存与非易失存储介质(如硬盘文件)交换的协议接口。Caffe源码中大量使用ProtoBuffer作为权值和模型参数的载体。一般开发者对参数管理各有好恶,有人喜欢TXT的易于修改,有人喜欢BIN的读写高效,也有人喜欢图形化配置的直观形象。不一致的参数管理带来很多问题,例如,一个项目组内不同成员必须约定一套统一的参数方案,或者称为通信协议,才便于模块集成。ProtoBuffer工具完美地解决了这个问题,用户只需要建立统一的参数描述文件(proto),然后利用protoc编译就能让协议细节等关键部分代码自动生成,节省了大量的开发、调试时间。使用ProtoBuffer还可以跨语言(C++/Java/Python)传递相同的数据结构,让团队协作更有效率。

注意:有时旧版本的ProtoBuffer生成的文件在新版本中使用会有各种不易排查的错误信息,所以推荐在需要运行Caffe的环境下都使用同一版本ProtoBuffer。

安装流程

# 从git上下载合适的版本,本文使用的是2.5.0版
wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0/
./configure --prefix=/your/install/path
make
make install

安装完成后会在/your/install/path/bin文件夹下生成一个可执行文件,因此要将此文件夹加入$PATH变量

1.2. Boost


过C++的同学应该都知道Boost库,它是一个功能强大、构造精巧、跨平台、开源且免费的库,被称为“C++准标准库”,使用了很多现代编程技术,内容涵盖字符串处理、正则表达式、容器(不是Docker)和数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,使得C++开发更加灵活、高效。更多细节请参考http://www.boost.org/。

在Caffe中主要使用了Boost中的智能指针,其自带引用计数功能,可避免共享指针时造成内存泄漏或多次释放。

另外,pycaffe使用Boost Python实现C/C++和Python语言的连接,方便Python调用C/C++设计的模块。

安装流程

#下载合适的版本,本文使用的是1.72,由于boost在git上的源码安装步骤较为繁琐,这里使用SOURCEFORGE的源码包
#下载页面为:https://sourceforge.net/projects/boost/files/boost/1.72.0/
tar zxvf boost_1_72_0.tar.gz
cd boost_1_72_0
./bootstrap.sh --with-libraries=system,thread,python3
./b2
cp -r boost /your/install/path/include/
cp -r stage/lib/* /your/install/path/lib/
history

注意:如果你使用的不是系统默认的python(即不在/usr/bin目录下),需要手动指定CPLUS_INCLUDE_PATH环境变量到你所用的python include目录下,比如:

export CPLUS_INCLUDE_PATH=/你的anconda路径/include/python3.7:$CPLUS_INCLUDE_PATH

1.3. GFLAGS


GFLAGS在Caffe中主要起到命令行参数解析的作用,这与ProtoBuffer功能类似,只是参数输入源不同。GFLAGS的使用方法可参考Caffe源码中的tools/caffe.cpp

安装流程

# 从git上下载合适的版本,本文使用的是2.2.0版
wget https://codeload.github.com/gflags/gflags/tar.gz/v2.2.0
tar zxvf gflags-2.2.0.tar.gz
cd gflags-2.2.0/
mkdir build
cd build/
cmake ..
ccmake ..

ccmake调出配置界面,修改如下:
在这里插入图片描述

make -j4
make install

1.4. GLOG


GLOG库是Google开发的用于记录应用程序日志的实用库,提供基于C++标准输入输出流形式的接口,记录时可选择不同的日志级别,方便将重要日志和普通日志分开。

GLOG在Caffe中主要起到记录日志的作用,便于开发者查看Caffe训练中产生的中间输出,并根据这些信息决定如何调整参数来控制收敛。从日志文件我们能非常方便地看到程序运行的流程,便于跟踪源码、定位问题。GLOG的使用方法可参考Caffe源码中的tools/caffe.cpp。

安装流程

# 从git上下载合适的版本,本文使用的是0.3.3版
wget https://github.com/google/glog/archive/v0.3.3.tar.gz
tar zxvf glog-0.3.3.tar.gz
./configure --prefix=/your/install/path/
make -j4
make install

1.5. BLAS


卷积神经网络中用到的数学计算主要是矩阵、向量的计算,Caffe中调用了BLAS(Basic Linear AlgebraSubprograms,基本线性代数子程序)中的相应方法。最常用的BLAS实现有Intel MKL、ATLAS、OpenBLAS等,Caffe可以选择其中任一种

安装流程

# 从git上下载合适的版本,本文使用的是0.3.3版
wget https://codeload.github.com/xianyi/OpenBLAS/tar.gz/v0.3.9
tar zxvf OpenBLAS-0.3.9.tar.gz
cd OpenBLAS-0.3.9/
make -j4
make PREFIX=/your/install/path/ install

1.6. ZLIB


zlib初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目
这个库绝大多数系统都会默认已经装上,但是很可能只包含动态库而不包含头文件,这里我们也编译安装它。

安装流程

tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --help
./configure --prefix=/your/install/path
make -j4
make install

1.7. HDF5


HDF(Hierarchical Data File)是美国国家高级计算应用中心(NCSA)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。它可以存储不同类型的图像和数码数据的文件,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。Caffe训练模型可以选择保存为HDF5格式或(默认的)ProtoBuffer格式。

安装流程

# 从git上下载合适的版本,本文使用的是1.10.3版
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
tar zxvf hdf5-1.10.3.tar.gz
cd hdf5-1.12.0/
# 要启用c++模块编译,同时指定ZLIB库的位置,本文是和环境文件夹安装在一起的
./configure --prefix=/your/install/path/ --enable-cxx --with-zlib=/your/install/path/include,/your/install/path/lib
#配置完成后现实的配置信息中,出现了 I/O filters (external): deflate(zlib)就表示zlib配置完成
make -j4
make install

1.8. LMDB和LEVELDB


LMDB(Lightning Memory-Mapped DatabaseManager)——闪电般的内存映射型数据库管理器,在Caffe中的作用主要是提供数据管理,将形形色色的原始数据(JPEG图片、二进制数据)转换为统一的Key-Value存储,便于Caffe的DataLayer获取这些数据。

LEVELDB库是Caffe早期版本使用的数据存储方式,由Google开发。它是一种持续的键值对存储方式,键和值可以为任意字节数组。键的存储顺序可由用户定义的比较函数决定。

目前大部分例程都已经使用LMDB代替了LEVELDB,但是为了与以前的版本兼容,仍然将这个依赖库编译到Caffe中。

安装流程

# dmdb可以从git上下载
git clone https://github.com/LMDB/lmdb.git
cd lmdb/libraries/liblmdb
make -j4
# 将头文件和库拷贝到环境文件夹下
cp lmdb.h /your/install/path/include/
cp liblmdb.so /your/install/path/lib/

# leveldb可以下载包后直接编译
wget https://github.com/google/leveldb/archive/v1.7.tar.gz
tar zxvf leveldb-1.7.tar.gz
cd leveldb-1.7/
make -j4
cp -r include/leveldb /your/install/path/include/
cp libleveldb.so* /your/install/path/lib/

1.9. Snappy


Snappy是一个用来压缩和解压缩的C++库,旨在提供较高的压缩速度和合理的压缩率。Snappy比zlib更快,但文件相对要大20%~100%。

安装流程

tar zxvf Snappy-1.1.7.tar.gz
cd snappy-1.1.7/
mkdir build
cd build/
cmake ..
ccmake ..

配置如下:
image

要注意的是Gflags_DIR这个参数需要根据你安装的Gflags包来进行调整,一般会自动寻找

#配置完毕后直接安装
make install

1.10. OpenCV


OpenCV是世界上最流行的开源计算机视觉库,包含有大量图像处理函数。虽然Caffe只使用OpenCV完成一些图像存取和预处理功能,但是考虑到我们还会进行其他的图像处理操作,因此这里选择全部安装
安装流程
从Opencv官网下载源码和附加包contrib,本文使用的是opencv_3.4.9,主要的配置参数为:

# 编译模式
-D CMAKE_BUILD_TYPE=Release
# 安装路径
-D CMAKE_INSTALL_PREFIX=/your/install/path 
# 是否编译python2接口
-D BUILD_opencv_python2=OFF
# 是否编译python3接口
-D BUILD_opencv_python3=ON
# 是否使用cuda加速,要注意的是cuda9以后不再支持2.0架构,当使用较旧版本的opencv时需要对源码进行修改
-D WITH_CUDA=OFF
# 附加contrib模块,需要额外下载,本文不使用
-D OPENCV_EXTRA_MODULES_PATH=/your/opencv/ext/modules
# python3路径
-D PYTHON3_EXECUTABLE=/your/python/path/python3.x
# 如果使用支持c++11标准的cuda则需要加上下面这条参数
# 这是因为opencv3.4.9还不支持c++11,所以编译的时候会有一些代码通过不了。加上后解决
-D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr

在配置过程中可能会出现由于网络问题卡下载的情况(比如的IPPICV下载),此时可以预先下载下来然后修改cmake文件进行加载,详细操作自行查找,本文不赘述。

这里我们不适用CUDA加速,通过以下参数进行cmake:

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/your/install/path -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D WITH_CUDA=OFF -D PYTHON3_EXECUTABLE=/your/python/path/python3.x ..

make -j4
make install

# make安装完成后,如果有需要可以在build/python_loader下安装python接口:
python3 setup install

结束


至此caffe的全部依赖就已经安装完毕,使用tree查看目录结构后如下:

├── bin
├── include
│   ├── boost
│   ├── gflags
│   ├── glog
│   ├── google
│   ├── leveldb
│   ├── opencv
│   └── opencv2
├── lib
│   ├── cmake
│   ├── pkgconfig
│   └── python3.6
├── share
│   ├── doc
│   ├── hdf5_examples
│   ├── licenses
│   └── OpenCV
└── soft
    └── caffe-master

下一章我们将开始caffe的安装

猜你喜欢

转载自blog.csdn.net/TchaikovskyBear/article/details/129141958
今日推荐