Ubuntu 16.04 Anaconda2虛擬環境下安裝caffe-gpu

 參考文章:https://www.jianshu.com/p/0cad02ad323b  

首先確保CUDA,CUDNN已經安裝配置好

1. 創建虛擬環境:

conda create –n fdpy2 python=2.7 (我的虛擬環境名爲:fdpy2)

2.安裝基礎庫:

   

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

3.安裝protoc

命令 whereis protoc可以查看哪些路徑下安裝了protoc
命令which protoc可以查看默認選用protoc的路徑
命令 protoc --version可以查看當前protoc版本

系統默認的protobuf路徑爲/usr/bin/protoc

4. 安裝 caffe

首先在你要安裝的路徑下 clone :

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

進入 caffe ,將 Makefile.config.example 文件複製一份並更名爲 Makefile.config ,也可以在 caffe 目錄下直接調用以下命令完成複製操作

cd caffe

sudo cp Makefile.config.example Makefile.config

sudo gedit Makefile.config

4-1:

修改Makefile.config:

(1)USE_CUDNN := 1

(2)USE_OPENCV := 1

(3)OPENCV_VERSION := 3

(4)CUDA_DIR := /usr/local/cuda

(5)如果是CUDA-9.0的話,則將20和21的算力去除,如下:

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

(6) 注:此處爲指定虛擬環境下python包的路徑,而不是大環境下的python

ANACONDA_HOME := $(HOME)/anaconda2/envs/fdpy2

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \

                $(ANACONDA_HOME)/include/python2.7 \

                $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

假如虛擬環境是python3.6版本的:

ANACONDA_HOME := $(HOME)/anaconda2/envs/py3

PYTHON_INCLUDE := $(ANACONDA_HOME)/include \

                $(ANACONDA_HOME)/include/python3.6m \

                $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

並將 PYTHON_LIBRARIES := boost_python-py35 python3.6m 打開,修改成這樣(系統中只有boost_python-py35,沒有boost_python-py36),重點:同時將找到虛擬環境中的libpython3.6m.so文件,複製到/usr/lib/x86_64-linux-gnu下;確認/usr/lib/x86_64-linux-gnu下的libboost_python-py35.so的文件存在,如果不存在py35後綴,而存在別的py3*文件,如libboost_python-py34.so,則修改Makefile.config中的PYTHON_LIBRARIES修改爲boost_python-py34 python3.6m。

 

(7) PYTHON_LIB := $(ANACONDA_HOME)/lib

(8) WITH_PYTHON_LAYER := 1  

(9)替換以下兩行

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

(10) BUILD_DIR := build

(11) TEST_GPUID := 0

(12) Q ?= @

(13)在最後添加: LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda2/envs/py3/lib

4-2:

修改Makefile:

sudo gedit Makefile

(1)將下面一行替換成下面一行

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

(2) 指定protoc路徑

$(Q)protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<

改爲下面:

$(Q)/usr/bin/protoc --proto_path=$(PROTO_SRC_DIR) --cpp_out=$(PROTO_BUILD_DIR) $<

(3)

將這行

#NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

修改如下:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

注意:假如你是在python3的虛擬環境下配置caffe的話,還應將Makelfile的215行左右的PYTHON_LIBRARY := boost_python python2.7   修改爲 PYTHON_LIBRARY := boost_python python35 (當你的python爲python3.6時)

5.編譯caffe

make all -j4

make test -j4

make runtest -j4

make pycaffe

  

6.拷貝編譯後的libcaffe.so 至配置caffe所在的虛擬環境

(1)在caffe所在目錄的caffe/python目錄下,執行cp -rf caffe/ ~/anaconda2/envs/fdpy2/lib/python2.7/命令,這一步命令將python包拷貝至虛擬環境目錄;

(2)在caffe所在目錄的build 目錄下,執行cp -rf lib/ ~/anaconda2/envs/ fdpy2/lib 命令,這一步將caffe中相關庫拷貝至虛擬環境目錄。

激活虛擬環境:source avtivate fdpy2,然後在python 下import caffe

(3)

若果提示ImportError: No module named caffe,需要把caffe下的Python路徑導入環境變量中去。sudo vim ~/.bashrc,最後一行加上export PYTHONPATH="/home/lz/Documents/caffe/python:$PYTHONPATH"export LD_LIBRARY_PATH=/home/lz/Documents/caffe/build/lib:$LD_LIBRARY_PATH這裏的路徑寫上你自己的路徑,記得source ~/.bashrc。否則的話只能在這個目錄下執行Python,導入caffe了。

其實(1)(2)步做好了等同於做第三步,這樣就可以在多個不同的python虛擬環境下使用caffe了

 

報錯提示can not find module skimage.io,安裝scikit-image,conda install scikit-image
報錯提示No module named google.protobuf.internal,安裝protobuf,pip install protobuf

make runtest 時報錯提示Check failed: status == CUBLAS_STATUS_SUCCESS (13 vs. 0) CUBLAS_STATUS_EXECUTION_FAILED   解決:不要多個終端在跑或者編譯,只留這個終端編譯即可編譯通過  

    

1.  報錯  nvcc fatal : Unknown option ‘fPIC’

解決:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)  
在-Xcompiler前少了一個空格

2. 報錯  PyErr_Print’未定義的引用; Py_NoneStruct等未定義,修改如下,問題解決
解決:
PYTHON_LIBRARIES := boost_python-py35 python3.6m  (我的python是3.6的)

3. 報錯  F0104 17:15:55.187031 27536 math_functions.cu:42] Check failed: status == CUBLAS_STATUS_SUCCESS (13 vs. 0)  CUBLAS_STATUS_EXECUTION_FAILED
解決:這個錯誤一般是出在make runtest期間,可停掉其他終端的進程,等一會再 make runtest即可通過

4. 報錯
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
/usr/bin/ld: cannot find -lboost_python3
collect2: error: ld returned 1 exit status
Makefile:510: recipe for target 'python/caffe/_caffe.so' failed

解決:boost配置問題
PYTHON_LIBRARIES := boost_python-py35 python3.6m。重點:找到虛擬環境中的libpython3.6m.so文件,複製到/usr/lib/x86_64-linux-gnu下;確認/usr/lib/x86_64-linux-gnu下的libboost_python-py35.so的文件存在,如果不存在py35後綴,而存在別的py3*文件,如libboost_python-py34.so,則修改Makefile.config中爲boost_python-py34。

 

發佈了11 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章