【起因:】tensorflow,caffe,pytorch三选其一,是深度学习必须要过一道坎。tensorflow就不说了,只要cuda版本对上,安装就很简单。pytorch听说也不难。caffe试过都说到处是坑,网上一搜,全部都是踩坑记,血泪史之类,今天就来扒一扒这个坑。
【步骤:】
一.我的环境
ubuntu16.04+python3.5+cuda 10.0
关于如何安装nvidia驱动,cuda,cudnn,以及opencv3 等网上已经有足够多的教程了,可以直接在网上找。这里主要提示三点:
1.确保nvdia显卡驱动要正确安装,有的虽然安装上了,但由于版本之间不兼容问题,是看不到GPU里线程的信息,就是下图下面半部分,在后面GPU编译会过不去。
2.nvcc -V和你安装的cuda版本不一致
请参考我的另一篇博客:https://blog.csdn.net/qq525003138/article/details/103911704
3.python版本问题
有的虽然安装了python3.x版本,但默认指向还是ubuntu自带的python2.7
如何切换python版本,请参考:https://www.jianshu.com/p/4d27fa2dce86
二、安装依赖库
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
三、下载caffe源码
下载地址:git clone https://github.com/BVLC/caffe.git
四、修改配置文件
1.修改makefile.config文件
进入caffe源码主目录,拷贝一个Makefile.config作为编译配置选项
命令:cp Makefile.config.example Makefile.config
打开makefile.config
# USE_CUDNN := 1
# USE_OPENCV := 0
# OPENCV_VERSION := 3
# WITH_PYTHON_LAYER := 1
# 改为:
USE_CUDNN := 1
USE_OPENCV := 1
OPENCV_VERSION := 3
WITH_PYTHON_LAYER := 1
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
使用python3.5版本,把python2.7代码加注释,python3.5前的注释去掉
2.修改makefile文件
位置分别在181行,425行
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
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
五、编译
在caffe-master目录下打开终端输入:make all -j8
流程非常简单,主要时解决编译时出现的错误:
【问题1:】缺少gflags头文件,这是一个google的日志库
【解决方法:】
【问题2:】缺少lmdb头文件
【解决方法:】
和上面一样,直接安装:sudo apt-get install liblmdb-dev
【问题3:】
【解决方法:】
后面两个lcblas,latlas都是缺少依赖库,和上面一样:sudo apt-get install libatlas-base-dev
lopencv_imgcodecs是opencv里的一个链接库,必须先安装opencv,然后在/usr/lib/x86_64-linux-gnu目录下建立软连接。
【问题4:】
nvcc fatal : Unsupported gpu architecture 'compute_20',原因是不支持GPU架构'compute_20'(cuda版本高了)
【解决方法:】
在Makefile.config里面的找到
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
把前面compute_20相关的那2行删除
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
KO!
【总结:】基本还算顺利,除了配置opencv和建立那个链接库软连接花点时间,其他需要注意的就是前面显卡安装,然后就是各种版本和依赖库,因为caffe这个框架维护的人还是比较少的,所以安装的版本不要太新。看到别人还有一个c++=std-11标准库问题,我没遇到,不过解决链接mark下来:https://blog.csdn.net/pkwcxy/article/details/82351669?utm_source=blogxgwz8