基本的依赖库安装
sudo apt install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt install --no-install-recommends libboost-all-dev
矩阵依赖库
sudo apt-get install libatlas-base-dev
建立pycaffe interface需要的python头文件
sudo apt install the python-dev
sudo apt install python-matplotlib
sudo apt install python-scipy
sudo apt install python-numpy
其他库的安装
sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev
注意,在安装上述依赖库的过程中,对于protobuf-compiler会因为版本的问题出现bug,具体修复方法见后面
最后其他库的安装libgflags,libgoogle-glog-dev因为我之前已经用源码进行安装,所以尽量不要安装,防止版本问题
需要GPU的话需要安装cuda与cudnn,具体的方法见博客安装cuda,cudnn等
sudo cp Makefile.config.example Makefile.config
然后修改Makefile.config文件
1.应用cudnn
#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
2.应用opencv版本
#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
3.应用python接口
#WITH_PYTHON_LAYER := 1
修改为
WITH_PYTHON_LAYER := 1
4.修改python路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
之后修改caffe目录下的Makefile文件
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
之后修改/usr/local/cuda/include/host_config.h 文件 :
将
#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
改为
//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
mkdir build && cd build
cmake -DMAKE_BUILD_TYPE=Release -DCPU_ONLY=NO ..
在make过程中,可能会遇到构建目标时的bug,具体情况下下方
安装好之后,可以进行测试,输入
没有报错说明caffe安装完成.
在编译好caffe后,分别安装python依赖
sudo apt-get update
sudo apt-get install python-pip python-dev python-numpy
$sudo apt-get install gfortran graphviz
$sudo pip install -r ${CAFFE_ROOT}/python/requirements.txt
需要把${CAFFE_ROOT}的路径换成自己caffe的路径,最后一句是要到所对应的位置下下载requirements.txt里面写下的所需下载的python依赖项.可能会遇到需要的依赖版本要在python3环境下才能安装,这时根据提示修改requirements.txt中的版本.
之后进入caffe文件夹下的python.import caffe成功.
解决:
这是在编译过程中没有加入-fPIC所导致,因此对于一般的CMakeList.txt的文件,在文件中加入
set(CMAKE_C_FLAGS“$ {CMAKE_C_FLAGS} -fPIC”)
set(CMAKE_CXX_FLAGS“$ {CMAKE_CXX_FLAGS} -fPIC”)
即可.
或者因为我的gflags是使用源码安装,因此解决方法是:
进入gflags/build中,找到CMakeCache.txt
改为CMAKE_CXX_FLAGS:STRING=-fPIC
然后在build中,执行
export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
make && make install
之后回到caffe编译就没有问题了
解决:
make 太快可能会丢失文件,首先进入~/applications/caffe/src/caffe/proto,这对应的是我当面目录,需要你根据位置进行修改,看到当前文件夹下有个名为caffe.proto的文件,然后终端输入
protoc --cpp_out=~/caffe/include/caffe/ caffe.proto
之后在caffe/include/caffe下新建文件夹命名为proto,将编译出来的caffe.pb.h与caffe.pb.cc放进去就好
解决:proto版本问题,网上搜索了很多方法都没用,解决的方法就是没有安装官方的方法进行安装,而是用cmake再make的方法就没有这个问题了
命令 whereis protoc 可以查看哪些路径下安装了protoc
命令which protoc 可以查看默认选用protoc的路径
命令 protoc --version 可以查看当前protoc版本
指定protoc的版本可以在 Makefile文件内修改
在Makefile 中修改这两句:
$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
为
$(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<
$(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --python_out=$(PY_PROTO_BUILD_DIR) $<
即把开头的"protoc"补全路径即可 (/usr/bin/protoc即为自己向指定给的版本路径)
想要把默认的环境改为你当前需要的protobuf
则需要
因为rtx系列使用的nvidia驱动版本为4.10以上,因此此时的cuda driver version==10.0,如果你在默认环境下使用的cuda不是10.0,那么在上述安装的make过程中,会出现error:
nvcc fatal : Unsupported gpu architecture 'compute_75'
注意::后续解决方法:找到caffe下的cmake文件夹,下面的Cuda.cmake
修改如下:
set(Caffe_known_gpu_archs "20 21(20) 30 35 50 60 61 75")
修改为
set(Caffe_known_gpu_archs "20 21(20) 30 35 50 60 61")
之后cmake -DCUDA_ARCH_NAME=ALL ..
就能够使用cmake方式进行编译。
因此需要更换编译方式,按照make方式进行编译。
除开上述需要修改的地方,还需要修改一段:
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
修改为:
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
-gencode=arch=compute_70,code=sm_70 \
-gencode=arch=compute_75,code=sm_75 \
-gencode=arch=compute_75,code=compute_75
其他修改Makefile的方式与上述相同。
make all -j8
make test -j8
make runtest -j8
(1)make runtest -j8错误
.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libcudart.so.9.0: cannot open shared object file: No such file or directory
Makefile:542: recipe for target 'runtest' failed
make: *** [runtest] Error 127
解决方法:首先检查你的bashrc或者zshrc,是否有对cuda的LD_LIBRARY_[PATN,如果没有,按照cuda的安装方法进行安装,如果有了则sudo ldconfg /usr/local/cuda-8.0/lib64
ldconfig命令的用途主要是在默认搜寻目录/lib
和/usr/lib
以及动态库配置文件/etc/ld.so.conf
内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache
,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在/sbin
目录下。
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
(2)使用pycaffe
回到caffe目录下make pycaffe -j8
因为安装方式并没有Install,所以外部使用caffe需要声明caffe的头文件位置,库文件位置。
具体的实现在外部程序的CMakeList.txt中:
set(Caffe_Root /home/yiqiaozhou/applications/caffe)
set(Caffe_INCLUDE_DIRS
${Caffe_Root}/include
${Caffe_Root}/src
/usr/local/cuda/include
)
set(Caffe_LIBRARIES
caffe
boost_system
glog
)
include_directories(${Caffe_INCLUDE_DIRS})
link_directories(${Caffe_LIBRARIES})
解决:在使用memorydata加载数据进网络时,报了这个错,其原因是未声明“USE_OPENCV”
在cpp文件中加入
#ifndef USE_OPENCV
#define USE_OPENCV
#include
#include
#include #endif