Caffe 安装手记

前言

其实写这些东西没有什么技术含量,只是为了以后能快速跳过这些无聊的步骤,把时间和经历更多地花在开发主要功能上。

特别是我这种手残天天把系统搞坏又不会修只会重装的!

首先

首先打开 官方教程,下载 Caffe 安装包,解压缩。

安装依赖

依赖神马的还是比较简单的。照着 官方教程 来就好了。大致如下:

sudo apt install libatlas-base-dev -y;
sudo apt install libopenblas-dev -y;
sudo apt install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libboost-all-dev -y;
sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev -y;

如果需要 Python 的支持,下面几句话就好了:

sudo dnf install -y python{2,3}-{numpy,scipy,scikit-image,matplotlib,h5py,networkx,nose,pandas,dateutil,gflags,pillow,six}
sudo pip install -U Cython numpy scipy scikit-image matplotlib ipython h5py leveldb networkx nose pandas python-dateutil protobuf python-gflags pyyaml Pillow six
sudo pip3 install -U Cython numpy scipy scikit-image matplotlib ipython h5py leveldb networkx nose pandas python-dateutil protobuf python-gflags pyyaml Pillow six

如果需要 Intel MKL,可以按照这个官方懒人版教程来使用 apt 进行安装。

修改 Makefile.conf 文件

请回答下列问题,并按照答案修改自己的 Makefile.conf 文件。

  1. 你的 OpenCV 装的是 3.0 版本么?

    如果是,请 OPENCV_VERSION := 3

  2. 你有 GPU 么?

    如果没有 GPU,那么直接找到 CPU_ONLY,启用即可。后面关于 GPU 的都不用看了。

  3. 你打 GPU 能正常工作么?

    如果不能正常工作,那么相当于「没有 GPU」。
    目前(2016 年 12 月 31 日,Caffe rc3)Caffe 不支持 Cuda7.5。这里 给有原因。如果你现在使用的是 Cuda7.5,那么请 CPU_ONLY := 1

  4. 你的 CUDA 是自己安装的,还是通过 apt install nvidia-cuda-toolket 安装的?

    如果是通过 apt 安装的,CUDA_DIR 路径可能是 /usr/lib/nvidia-cuda-toolkit
    如果是从 NVIDIA 官网上下载的 Cuda8.0, 路径可能是 /usr/local/cuda
    否则你需要自己找路径。

  5. 你想使用 Python 写的 Layer 么?

    这个其实没有太大所谓,
    如果想使用,那么可以使用 WITH_PYTHON_LAYER := 1

  6. 你需要在 Python 中调用 Caffe 么?

    如果不需要 Python,那么关于 Python 的问题请全部忽略。

  7. 你的 Python 是 Python2 还是 Python3?

    如果是 Python3,PYTHON_INCLUDE 需要使用 Python3 的一套设置。直接把上面 Python2 的注释掉,启用下面 Python3 的就行。

  8. 你需要在 Matlab 中调用 Caffe 么?

    如果需要,则将 MATLAB_DIR 改到你的 matlab 安装地址。
    注意,是类似 /usr/local/MATLAB/R2015b,而不是 /usr/local/MATLAB/R2015b/bin

编译

为了节省时间,在这里我们使用多线程进行编译。如果你知道自己的电脑的核心数,那么可以使用 “-j 核心数 * 2-1” 或者 “-j 核心数 - 1” 来进行编译。如果不知道,直接使用下面的命令也是可以的。

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

上面的命令可以使用核心数 + 1 个线程来进行编译。线程数量不是越多越好。

如果希望使用 Python:

首先去 python 文件夹下,有一个 requirements.txt 文件,打开后使用 apt 或者 pip 安装里面提到的所有包。

之后就是一个简单的编译:

make pycaffe

最后再去 ~/.bashrc 或者 ~/.zshrc(取决于你使用的是 bash 还是 zsh)里面加上这句话:

export PYTHONPATH=/PATH/TO/CAFFE/python:$PYTHONPATH

注意:PyCharm 是不认这个环境变量的。需要自己手动引入。

import sys
sys.path.insert(0, "PATH/TO/CAFFE/python")
import caffe

如果希望使用 Matlab:

make matlab

安装

sudo make distribute

错误解决

Fedora 25 下提示没有 cblas.h

sudo dnf install atlas-devel liblas-devel

或者使用 openblas 也是可以的。

更新:或者将-lcblas 替换成 -lsatlas 也是可以的。

Ubuntu 下提示没有 libcblas 的问题

sudo apt install libatlas-base-dev

解决 libhdf5 报错的问题

首先,去 /usr/lib/x86_64-linux-gnu,做两个软链接:

sudo ln -s libhdf5_serial.so libhdf5.so
sudo ln -s libhdf5_serial_hl.so libhdf5_hl.so

然后,在 Makefile.conf 里面,找到 INCLUDE_DIRSLIBRARY_DIRS,改为

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/hdf5/serial/

找不到 lboost_python3

请去 /usr/lib/x86_64-linux-gnu/(Ubuntu) 或 /lib64(Fedora) 里面看一下是否有 libboost_python-py35.so,如果没有的话,做一个软连接

Ubuntu:

sudo ln -s libboost_python-py35.so libboost_python3.so

Fedora:

sudo ln -s libboost_python3.so.1.60.0 libboost_python3.so

解决 libcblas 的问题

  • 方法一: 安装 libatlas-dev 包。

  • 方法二(我没有尝试):sudo update-alternatives --config libblas.so; sudo update-alternatives --config liblapack.so

  • 方法三:找到 BLAS,按照提示进行修改。Fedora 上经常可以修改为 open

解决 memcpy 的问题

大多数解决办法都是使用 cmake 而不是 make。这里贴出来 Github 上面的一个方法。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..

遇到这个错误,说明你不是 CPU_ONLY。个人对这个问题无解…… 上面所有东西都是 CPU_ONLY 的。

解决 numpy/arrayobject.h 的问题

这个问题是在 Ubuntu 下遇到的。解决方法是,PYTHON_INCLUDE 里面,将路径 /usr/lib/python... 改为 /usr/local/lib/python...

后记

这是第二版了。每次遇到的坑都不一样,慢慢地积攒了这么一大堆说明。

一般来说,新版本 OS 总是会容易一些的。

参考资料

留下评论