Ubuntu 16.04 Anaconda2虚拟环境下(python3.6)安装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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值