Caffe配置录

贫僧终于沦落到要去配置Caffe了。。。用的python版本还是3。。。

准备

先写出个目录:
1. 安装依赖包(贫僧在实际安装的时候跳过了这一步,因为之前已经安装过了)
2. 安装caffe
3. 安装pycaffe
4. bug

安装依赖包

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

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential

验证安装成功的方法:

再运行上面的指令一次,看看有没有“已经是最新版”之类的提示,有的话就成功了。

安装依赖包这部分内容参考了这篇文章,因为之前装过所以贫僧这次没有再装一次。

安装caffe

在你想安装的路径下运行这行指令(这里贫僧就是在~目录下运行的):

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

然后:

$ cd ~/caffe  # 不一定是~/caffe,这里的路径换成你安装的路径

在编译之前要编辑Makefile.config,直接复制caffe目录下的Makefile.config.example(这是caffe给出的配置文件例子,复制然后更改可以省很多时间)并改成这个名字:

$ sudo cp Makefile.config.example Makefile.config

Makefile.config内容

这里直接放贫僧的修改过的内容了,因为贫僧把opencv安装在了虚拟环境里面,而且要用到python3,所以改了python相关的路径(PYTHON_INCLUDEPYTHON_LIB,改成了创建好了的cv虚拟环境相关的路径)。如果opencv就安装在系统的python里面的话应该不用改太多东西的。

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1
# 贫僧修改了这里,删掉了注释符

# uncomment to disable IO dependencies and corresponding data layers
USE_OPENCV := 1
# 贫僧修改了这里,删掉了上一行的注释符
# USE_LEVELDB := 0
# USE_LMDB := 0

# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3
# 贫僧修改了这里,删掉了上面的前面的注释符

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH :=    -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_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# 贫僧修改了这里(注释掉了)
# PYTHON_INCLUDE := /usr/include/python2.7 \
        /usr/lib/python2.7/dist-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)   # 贫僧修改了这里,删掉了下面的注释(因为要用到python3)
PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_INCLUDE := /usr/tank/.virtualenvs/cv/include/python3.5m \
                 /usr/tnak/.virtualenvs/cv/lib/python3.5/site-packages/numpy/core/include

# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1
# 贫僧删掉了上面的注释符

# Whatever else you find you need goes here.
# 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
# 贫僧修改了上面这行的内容

然后再改下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,但是可能是因为贫僧用了cuda9.1,所以这个文件里面并没有#error-- xxx省略xxx的注释,所以就没有修改。

编译(记得把数字改成你的电脑的核心数目):

make all -j 4

如果不记得核心数的话直接用下面这个也行(推荐用这个):

make all -j $(($(nproc) + 1))

编译成功之后就可以进行测试了:

sudo make runtest -j 4

然后要编译pycaffe:

sudo make pycaffe -j 4

编译成功了就基本上没什么问题了。。。可能会出现一两个错误,这种错误要么是因为cuda程序员引入了新的bug(真遇到过。。。),要么就是偶然出现的(Torch里面遇到过)或者是别的原因。如果遇到这种情况就跑多1~2次,如果情况消失了那么很可能只是偶然的,是测试程序设计的问题,如果是遇到了这种情况:

这里写图片描述

那么就一定是cuda9.1的锅了。。。

cuda9.1引发的血案的解决方法:

修改caffe目录下的Makefile:

将:
# Debugging
ifeq ($(DEBUG), 1)
        COMMON_FLAGS += -DDEBUG -g -O0
        NVCCFLAGS += -G
else
        COMMON_FLAGS += -DNDEBUG -O2
endif

改成:
ifeq ($(DEBUG), 1)
        COMMON_FLAGS += -DDEBUG -g -O0
        NVCCFLAGS += -G
else
        COMMON_FLAGS += -DNDEBUG -O2
        NVCCFLAGS += -G
endif

然后重新编译:

make clean && make all -j 4 && sudo make runtest -j 4 && sudo make pycaffe -j 4

可能遇到的bug

使用Python3编译PyCaffe时出现的bug

贫僧在编译PyCaffe的时候遇到了这个bug:

/usr/bin/ld: cannot find -lboost_python3 pycaffe

问题出现原因(参考了这篇文章):

caffe默认是python2.7,而python2.7lboost_python2python3没有,所以要用ubuntu自带的python3来建立一个软连接,不过要注意对应的python版本号。

解决方法:

sudo ln -s  /usr/lib/x86_64-linux-gnu/libboost_python-py35.so  /usr/lib/x86_64-linux-gnu/libboost_python3.so

没有caffe模块

这是在python交互界面里面触发的:

>>> import caffe

输出:

...略略略
ImportError: No module named caffe

这是因为没有把pycaffe路径添加到环境变量里面,所以只需要改改~/.bashrc就可以解决了:

export PYTHONPATH=/home/ubuntu/caffe/python:PYTHONPATH

记得要用绝对路径,如果是用了~/之类的相对路径的话可能会用不了。如果别的用户要用caffe的话添加这个路径就可以用了。

没有skimage模块

还是import的时候出现的错误:

ImportError: No module named 'skimage'

这个比较好解决,只需要pip安装一下这个模块就可以了:

pip install -U scikit-image

然后基本上就可以开始愉快地import了。。。

Pycharm中import caffe的方法

现在配置好了之后在pycharm里面是没有办法直接import caffe的,因为pycharm不能够读取~/.bashrc来确定caffe的位置,所以这时候就需要手动添加搜索库的地址。因为已经有人写了所以就不详细讲,内容来自这里的问答

打开项目翻译器设置,点那个齿轮图案的按钮,选show all,然后选中要设置的翻译器,再点面板右边最下面的那个按钮

这里写图片描述

把caffe的路径(这里的话就是/home/ubuntu/caffe/python和/usr/local/lib/python3.5/dist-packages)添加进去:

这里写图片描述

这样就可以import caffe了。。。

参考资料

Ubuntu16.04 Caffe 安装步骤记录(超详尽):很推荐看,基本上这篇文章的大部分东西都是参考这篇博文的,虽然比较旧了。。。
virtualenv 下安装caffe教程:这个博主很有个性。。。内容太简略了。。。如果要把caffe装到virtualenv的话可以参考

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值