美文网首页
Build Caffe from Source on CentO

Build Caffe from Source on CentO

作者: 菜鸟瞎编 | 来源:发表于2019-03-15 16:32 被阅读0次

    1、安装依赖库

    sudo yum install boost-devel gflags-devel glog-devel hdf5-devel leveldb-devel lmdb-devel snappy-devel numpy protobuf-c-compiler openblas-devel python-devel
    如果某些包找不到,可以添加阿里云的yum源,参考 centos 7 添加 aliyun yum 源、epel源

    2、编译安装

    https://github.com/BVLC/caffe/下载源码包

    1)、配置Makefile.config

    cp Makefile.config.example Makefile.config

    打开 USE_CUDNN := 1, 支持cuDNN加速。
    打开 WITH_PYTHON_LAYER := 1,支持Python Layer。
    打开 USE_NCCL := 1,支持多GPU。需要先下载nccl源码, 编译安装。

    在Makefile.config中将BLAS改为open,如下:

    #BLAS := atlas
    BLAS := open
    # Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
    # Leave commented to accept the defaults for your choice of BLAS
    # (which should work)!
    BLAS_INCLUDE := /usr/include/openblas
    BLAS_LIB := /usr/lib64
    

    找到CUDA_ARCH 位置,如下:

    # 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_20,code=sm_20 \
    -gencode arch=compute_20,code=sm_21 \
    -gencode arch=compute_30,code=sm_30 \
    

    根据注释, 注释掉 *21和 *21。如果CUDA在9.0以下则不用注释。

    配置python路径,默认如下:

    python配置
    Caffe在运行的时候会调用这个路径下的python包。
    如果添加了Python Layer,在运行时报错 ImportError: No module named xxx,很可能就是因为这个python所指的路径下缺包。有一种情况就是,用户可能搭建可多个python环境,然后用pip list能查到这个包,却仍然报错,那就可能是因为查到的包不是上面路径下的包。

    2)、配置Makefile

    编译过程中有多处依赖C++11,在Makefile中添加依赖:

    CXXFLAGS += -std=c++11 或者CXXFLAGS += -std=gun++11

    NVCCFLAGS += -std=c++11

    虽然这里添加了C++11的依赖,但是后面编译过程中可能还会出现类似“usr/include/c++/4.8.2/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.”的错误,需要在Makefile中找到具体的编译命令添加 C++11依赖。
    不要把python配置为Anaconda环境下的python,否则会导致libprotobuf链接时找不到符号。

    3)、接下来开始编译

    make all -j8

    make pycaffe

    make distribute

    将 distribute目录拷贝到其他目录,并添加进环境变量

    设置环境变量,示例

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/tools/distribute/lib
    export PATH=$PATH:$HOME/tools/distribute/bin
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:$HOME/tools/distribute/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$HOME/tools/distribute/include
    export PYTHONPATH=$PYTHONPATH:$HOME/tools/distribute/python
    

    3、注意事项

    如果在Caffe源码中添加自定义层,这时往往需要添加一个 param ID。如果你后面要用ncnn转换生成的模型,需要保证Caffe中的 param ID 和 ncnn中的 param ID不冲突。

    我在Caffe的caffe-master/src/caffe/proto/caffe.proto中添加shuffle_channel_param ID值为149


    image

    刚好和ncnn中 ncnn-master/tools/caffe/caffe.proto的 psroi_pooling_param的ID值相同


    image
    这导致ncnn在转换模型时将shuffle_channel_param转换成 psroi_pooling_param。
    解决办法:将这两个文件中的shuffle_channel_param ID值都改为其他不冲突的值, 重新编译。

    如果在运行的时候报这个错误:

    Check failed: status == CUBLAS_STATUS_SUCCESS (13 vs. 0) CUBLAS_STATUS_EXECUTION_FAILED
    

    就把这几个patch安装了 https://developer.nvidia.com/cuda-90-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal

    相关文章

      网友评论

          本文标题:Build Caffe from Source on CentO

          本文链接:https://www.haomeiwen.com/subject/holrmqtx.html