Part.1链接:
TchaikovskyBear:Caffe完全安装指南 Part.1 依赖库的安装zhuanlan.zhihu.com2. caffe的编译安装
在环境安装完毕之后,我们开始来进行caffe的源码编译,为了完全理解caffe的环境配置,本文采用CMake来进行编译配置
2.1 源码的下载
我们使用的是原始版本的caffe,github地址为https://github.com/BVLC/caffe.git
在该库下有多个分支,我们就使用主分支(master),使用以下命令将源码下载
git clone https://github.com/BVLC/caffe.git
2.2 Cmake编译配置流程
官网和大部分教程基本都是使用make来进行配置编译的,这种方式可读性较差,为了更好的理解caffe的配置,我们采用Cmake来进行编译。
同时笔者建议这部分内容各位要反复推敲,只有真正理解了,才能在以后遇到类似情况的时候触类旁通
- 安装流程:
cd caffe mkdir build cd build #为了易于阅读,这里我们使用ccmake视窗来进行配置
ccmake ..
输入ccmake进入可视化配置后我们可以看到一个界面:
可以发现他目前是空的,根据下面的操作帮助,先按c进行一次配置,它会报错,但是没有关系,这主要是让他先自动搜索一部分包,同时告诉你缺少什么,接下来就可以根据提示一点一点的补全配置。
可以发现它提示我们没有找到Protobuf,此时我们按e返回配置界面,然后按t打开进阶配置翻页找到Protobuf库的相关配置,如下图:
上面会告诉我们需要配置的参数,这些值要根据依赖库安装路径(即文中的/your/install/path(你的安装路径),笔者的路径为/home/liuky/venvs/local_caffe)进行填写,填写完成后形如:
Protobuf_INCLUDE_DIR /your/install/path/include
Protobuf_LIBRARY_DEBUG /your/install/path/lib/libprotobuf.so
Protobuf_LIBRARY_RELEASE /your/install/path/lib/libprotobuf.so
Protobuf_LITE_LIBRARY_DEBUG /your/install/path/lib/libprotobuf-lite.so
Protobuf_LITE_LIBRARY_RELEASE /your/install/path/lib/libprotobuf-lite.so
Protobuf_PROTOC_EXECUTABLE /your/install/path/bin/protoc
Protobuf_PROTOC_LIBRARY_DEBUG /your/install/path/lib/libprotoc.so
Protobuf_PROTOC_LIBRARY_RELEAS /your/install/path/lib/libprotoc.so
记住要将文中的/your/install/path替换为你自己的环境安装路径。
经过上面的操作,boost库的配置就完成了,我们继续按c进行一次cmake配置:
你就会发现报错的信息不一样了,它不再提示找不到Protobuf,而是找不到lmdb了,经过多次反复以上操作,我们就可以逐步将cmake文件配置完成。
2.3 配置信息
这里给出各个模块的配置参数以供参考,请注意替换环境目录。
要注意的是,对于下文中没有提到的参数,都可以不必太过关心,这些参数要么是自动搜索获得,要么是不需要配置,留空或者NOTFOUND也没有影响的。
Protobuf
Protobuf_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
Protobuf_LIBRARY_DEBUG /home/liuky/venvs/local_caffe/lib/libprotobuf.so
Protobuf_LIBRARY_RELEASE /home/liuky/venvs/local_caffe/lib/libprotobuf.so
Protobuf_LITE_LIBRARY_DEBUG /home/liuky/venvs/local_caffe/lib/libprotobuf-lite.so
Protobuf_LITE_LIBRARY_RELEASE /home/liuky/venvs/local_caffe/lib/libprotobuf-lite.so
Protobuf_PROTOC_EXECUTABLE /home/liuky/venvs/local_caffe/bin/protoc
Protobuf_PROTOC_LIBRARY_DEBUG /home/liuky/venvs/local_caffe/lib/libprotoc.so
Protobuf_PROTOC_LIBRARY_RELEAS /home/liuky/venvs/local_caffe/lib/libprotoc.so
boost
因为我们安装boost库的时候会自带cmake配置信息,所以boost的配置大部分会自动完成
boost_filesystem_DIR /home/liuky/venvs/local_caffe/lib/cmake/boost_filesystem-1.72.0
boost_headers_DIR /home/liuky/venvs/local_caffe/lib/cmake/boost_headers-1.72.0
boost_system_DIR /home/liuky/venvs/local_caffe/lib/cmake/boost_system-1.72.0
boost_thread_DIR /home/liuky/venvs/local_caffe/lib/cmake/boost_thread-1.72.0
boost_python_DIR /home/liuky/venvs/local_caffe/lib/cmake/boost_python-1.72.0
Boost_DIR /home/liuky/venvs/local_caffe/lib/cmake/Boost-1.72.0
HDF5
HDF5的配置中使用了部分系统预装好的库,主要为libm,librt,libdl,libpthread这几个,这些库cmake会自动搜索到。但是要注意的是大部分系统也预装了libz这个库,而我们使用的libz是自己编译的,因此要注意修改。
HDF5_CXX_COMPILER_EXECUTABLE /home/liuky/venvs/local_caffe/bin/h5c++
HDF5_CXX_LIBRARY_dl /usr/lib64/libdl.so
HDF5_CXX_LIBRARY_hdf5 /home/liuky/venvs/local_caffe/lib/libhdf5.so
HDF5_CXX_LIBRARY_hdf5_cpp /home/liuky/venvs/local_caffe/lib/libhdf5_cpp.so
HDF5_CXX_LIBRARY_hdf5_hl /home/liuky/venvs/local_caffe/lib/libhdf5_hl.so
HDF5_CXX_LIBRARY_hdf5_hl_cpp /home/liuky/venvs/local_caffe/lib/libhdf5_hl_cpp.so
HDF5_CXX_LIBRARY_m /usr/lib64/libm.so
HDF5_CXX_LIBRARY_pthread /usr/lib64/libpthread.so
HDF5_CXX_LIBRARY_rt /usr/lib64/librt.so
HDF5_CXX_LIBRARY_z /home/liuky/venvs/local_caffe/lib/libz.so
HDF5_C_COMPILER_EXECUTABLE /home/liuky/venvs/local_caffe/bin/h5cc
HDF5_C_LIBRARY_dl /usr/lib64/libdl.so
HDF5_C_LIBRARY_hdf5 /home/liuky/venvs/local_caffe/lib/libhdf5.so
HDF5_C_LIBRARY_hdf5_hl /home/liuky/venvs/local_caffe/lib/libhdf5_hl.so
HDF5_C_LIBRARY_m /usr/lib64/libm.so
HDF5_C_LIBRARY_pthread /usr/lib64/libpthread.so
HDF5_C_LIBRARY_rt /usr/lib64/librt.so
HDF5_C_LIBRARY_z /home/liuky/venvs/local_caffe/lib/libz.so
HDF5_DIFF_EXECUTABLE /home/liuky/venvs/local_caffe/bin/h5diff
GFLAG&GLOG
GFLAGS_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
GFLAGS_LIBRARY /home/liuky/venvs/local_caffe/lib/libgflags.so
GLOG_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
GLOG_LIBRARY /home/liuky/venvs/local_caffe/lib/libglog.so
LMDB&LevelDB
LMDB_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
LMDB_LIBRARIES /home/liuky/venvs/local_caffe/lib/liblmdb.so
LevelDB_INCLUDE /home/liuky/venvs/local_caffe/include
LevelDB_LIBRARY /home/liuky/venvs/local_caffe/lib/libleveldb.so
OpenBLAS
OpenBLAS_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
OpenBLAS_LIB /home/liuky/venvs/local_caffe/lib/libopenblas.so
OpenCV
OpenCV_DIR /home/liuky/venvs/local_caffe/share/OpenCV
Snappy
Snappy_INCLUDE_DIR /home/liuky/venvs/local_caffe/include
Snappy_LIBRARIES /home/liuky/venvs/local_caffe/lib64/libsnappy.so
Python
笔者这里使用的是anaconda下的python
PYTHON_EXECUTABLE /home/liuky/soft/anaconda3/bin/python3
PYTHON_INCLUDE_DIR /home/liuky/soft/anaconda3/include/python3.7m
PYTHON_LIBRARY /home/liuky/soft/anaconda3/lib/libpython3.7m.so
PYTHON_LIBRARY_DEBUG PYTHON_LIBRARY_DEBUG-NOTFOUND
python_version 3
cuda
cuda配置cmake全部都可以自动搜索到,不需要手动修改,自己配置的时候可以直接跳过
CUDA_64_BIT_DEVICE_CODE ON
CUDA_ARCH_NAME Auto
CUDA_ATTACH_VS_BUILD_RULE_TO_C ON
CUDA_BUILD_CUBIN OFF
CUDA_BUILD_EMULATION OFF
CUDA_CUDART_LIBRARY /usr/local/cuda/lib64/libcudart.so
CUDA_CUDA_LIBRARY /usr/lib64/libcuda.so
CUDA_GENERATED_OUTPUT_DIR
CUDA_HOST_COMPILATION_CPP ON
CUDA_HOST_COMPILER /usr/bin/cc
CUDA_NVCC_EXECUTABLE /usr/local/cuda/bin/nvcc
CUDA_NVCC_FLAGS
CUDA_NVCC_FLAGS_DEBUG
CUDA_NVCC_FLAGS_MINSIZEREL
CUDA_NVCC_FLAGS_RELEASE
CUDA_NVCC_FLAGS_RELWITHDEBINFO
CUDA_PROPAGATE_HOST_FLAGS ON
CUDA_SDK_ROOT_DIR CUDA_SDK_ROOT_DIR-NOTFOUND
CUDA_SEPARABLE_COMPILATION OFF
CUDA_TOOLKIT_INCLUDE /usr/local/cuda/include
CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda
CUDA_USE_STATIC_CUDA_RUNTIME ON
CUDA_VERBOSE_BUILD OFF
CUDA_VERSION 10.1
CUDA_cublas_LIBRARY /usr/lib64/libcublas.so
CUDA_cudadevrt_LIBRARY /usr/local/cuda/lib64/libcudadevrt.a
CUDA_cudart_static_LIBRARY /usr/local/cuda/lib64/libcudart_static.a
CUDA_cufft_LIBRARY /usr/local/cuda/lib64/libcufft.so
CUDA_cupti_LIBRARY /usr/local/cuda/extras/CUPTI/lib64/libcupti.so
CUDA_curand_LIBRARY /usr/local/cuda/lib64/libcurand.so
CUDA_cusolver_LIBRARY /usr/local/cuda/lib64/libcusolver.so
CUDA_cusparse_LIBRARY /usr/local/cuda/lib64/libcusparse.so
CUDA_nppc_LIBRARY /usr/local/cuda/lib64/libnppc.so
CUDA_nppial_LIBRARY /usr/local/cuda/lib64/libnppial.so
CUDA_nppicc_LIBRARY /usr/local/cuda/lib64/libnppicc.so
CUDA_nppicom_LIBRARY /usr/local/cuda/lib64/libnppicom.so
CUDA_nppidei_LIBRARY /usr/local/cuda/lib64/libnppidei.so
CUDA_nppif_LIBRARY /usr/local/cuda/lib64/libnppif.so
CUDA_nppig_LIBRARY /usr/local/cuda/lib64/libnppig.so
CUDA_nppim_LIBRARY /usr/local/cuda/lib64/libnppim.so
CUDA_nppist_LIBRARY /usr/local/cuda/lib64/libnppist.so
CUDA_nppisu_LIBRARY /usr/local/cuda/lib64/libnppisu.so
CUDA_nppitc_LIBRARY /usr/local/cuda/lib64/libnppitc.so
CUDA_npps_LIBRARY /usr/local/cuda/lib64/libnpps.so
CUDA_rt_LIBRARY /usr/lib64/librt.so
CUDNN_INCLUDE /usr/local/cuda/include
CUDNN_LIBRARY /usr/local/cuda/lib64/libcudnn.so
CUDNN_ROOT
USE
配置完各个依赖库后,还需要勾选是否使用它
USE_CUDNN ON
USE_HDF5 ON
USE_LEVELDB ON
USE_LMDB ON
USE_NCCL OFF
USE_OPENCV ON
USE_OPENMP OFF
USE_PROJECT_FOLDERS OFF
2.4 编译,安装与测试
经过上面的设置后,caffe的配置就已经全部完成了,接下来就可以开始进行编译:
# 记得进入编译文件夹
cd build
make -j4
make install
如果没有报错的话,此时caffe就已经安装完成了,但是这不代表caffe能够正常运行,我们还需要再进行一下测试:
make runtest
输入runtest后,caffe会开始测试,这个时间比较漫长,如果测试能够全部通过:
最后一行会显示PASSED,此时就表示caffe已经完全安装完毕并且可以正常使用了。