天天看點

Ubuntu16.04安裝編譯caffe以及一些問題記錄

前期準備:

最好是python虛拟環境

  • 【anaconda的建立虛拟環境】
建立
conda create -n caffeEnv(虛拟環境名字)  python=3.6  
激活環境
source activate caffeEnv
關閉
 deactivate
           
  • 【python virtualenv建立虛拟環境】
建立
pip install virtualenv
sudo apt-get virtualenv 
virtualenv caffeEnv(虛拟環境名字)  -p /usr/bin/python3(版本)
激活
cd caffeEnv && source ./bin/activate
關閉
deactivate
           

環境條件

深度學習加速子產品和opencv
  1. cuda8.0+cudnn5.1+opencv3.4.0
  2. cuda9.1+cudnn7.0+opencv3.4.0

​ (我試過8.0+5.1和9.1+7.0都可以)

​ 安裝教程另外兩片部落格記錄了

  • 安裝cuda和cudnn教程
  • 安裝opencv教程

caffe依賴庫
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install 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
           

開始安裝caffe

  • 首先在你要安裝的路徑下 clone :
git clone https://github.com/BVLC/caffe.git
           
  • 進入 caffe ,将 Makefile.config.example 檔案複制一份并命名為 Makefile.config
cd caffe
cp Makefile.config.example Makefile.config
           
複制一份的原因是編譯 caffe 時需要的是 Makefile.config 檔案,Makefile.config.example 隻是caffe 給出的配置檔案例子
  • 修改 Makefile.config 檔案
gedit 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. 修改庫路徑
    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       
               
  5. 修改cuda路徑(可選),一般不用改,由于我伺服器上的cuda的版本太多,路徑不一樣
    CUDA_DIR := /usr/local/cuda
    修改為:
    CUDA_DIR := /usr/local/nvidia/cuda/8.0
               

OK ,可以開始編譯了,在 caffe 目錄下執行 :

make all -j8
(-j8表示自己的cpu核數,如果不知道就直接make all)
           
如果出錯,則檢查前面步驟,或者利用搜尋引擎解決問題
  • 編譯成功後可運作測試(出現以下圖檔類似即成功):
make runtest -j8
           
Ubuntu16.04安裝編譯caffe以及一些問題記錄

編譯caffe的python接口

1、 編譯

make pycaffe -j8
           

2、配置到環境變量

gedit ~/.bahsrc
           

把以下内容加到最下方

export PYTHONPATH=/(caffe所在目錄)/caffe/python:$PYTHONPATH
           

若有多個環境需要添加則像如下添加方法,環境之後需要加“ : ”

export PYTHONPATH=/(caffe所在目錄)/caffe/python:/home/xxx/python/:$PYTHONPATH
           

讓環境變量生效

source ~/.bahsrc
           

have a try!看看能不能用

>>> import caffe
           
Ubuntu16.04安裝編譯caffe以及一些問題記錄

bingo!It's OK

臨時配置法(記錄一下給自己看)

import sys

sys.path.append("/(caff所在目錄)/caffe/python")

sys.path.append("/(caffe所在目錄)/caffe/python/caffe")

最後貼一些可能會出現的安裝問題:

可能出現的問題

(1)

Ubuntu16.04安裝編譯caffe以及一些問題記錄

問題:

Unsupported gpu architecture 'compute_20'

解決方案:

https://askubuntu.com/questions/960238/nvcc-fatal-unsupported-gpu-architecture-compute-20

即去掉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_50,code=compute_50
 改為:
 CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
        -gencode arch=compute_52,code=sm_52 \
        -gencode arch=compute_60,code=sm_60 \
        -gencode arch=compute_62,code=sm_62 \
        -gencode arch=compute_61,code=compute_61
           

(2)

Ubuntu16.04安裝編譯caffe以及一些問題記錄
awk: symbol lookup error: /home/lzm/.conda/envs/lzm2/lib/libreadline.so.6: undefined symbol: PC

https://github.com/conda-forge/rpy2-feedstock/issues/1

https://github.com/bioconda/bioconda-recipes/issues/5350

即 run

conda install -c conda-forge readline = 6.2
           

(3)

Ubuntu16.04安裝編譯caffe以及一些問題記錄
./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: no such file or directory

https://github.com/BVLC/caffe/issues/2690

https://github.com/NVIDIA/DIGITS/issues/156

即Makefile.config 拿兩行改掉:

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

(4)(這個應該很少人出現)

Ubuntu16.04安裝編譯caffe以及一些問題記錄
./include/caffe/util/nccl.hpp:5:18: fatal error: nccl.h: No such file or directory

建立檔案為env

将伺服器已經安裝的nccl路徑配置到env:

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/lzm/data/caffe/caffe1.0_nccl/nccl/install/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/lzm/data/caffe/caffe1.0_nccl/nccl/install/include
export LIBRARY_PATH=$LIBRARY_PATH:/home/lzm/data/caffe/caffe1.0_nccl/nccl/install/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lzm/data/caffe/caffe1.0_nccl/nccl/install/lib
           

每次要用的時候都激活環境:

source  ./env
           

(5)

Ubuntu16.04安裝編譯caffe以及一些問題記錄
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode

解決方案:https://github.com/BVLC/caffe/issues/4621

把Makefile.config 中 OPENCV_VERSION = 3的注釋去掉即可

(6)

Ubuntu16.04安裝編譯caffe以及一些問題記錄
/caffe/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by caffe-ssh/python/caffe/_caffe.so)

解決方案:https://github.com/BVLC/caffe/issues/4953

conda install libgcc