|
通过源码编译安装Caffe到Anaconda的某个虚拟环境中(详细步骤)
安装caffe最简单的方式是:通过conda install 具体见:http://www.ai111.vip/thread-780-1-1.html
但是却是conda已经编译好了的 以后我们也不能去修改caffe源码
基于以后深入学习的目的,希望大家还是要通过caffe源码编译的方式再次安装caffe
为了上述两种方式之间不会冲突,还是需要用conda来隔离环境!
这次我们源码编译安装caffe能与自己创建的conda虚拟环境完美结合!
第一步:创建conda虚拟环境(源码编译安装caffe)
conda create -n py3_caffe_source python=3.7.3
笔记:此时python的版本最好与系统的Python版本一致,在后面关于libboost的python3软链接中有分析
因为会报错找不到pyconfig.h文件:fatal error: pyconfig.h: 没有那个文件或目录
修改之后:
conda remove -n py3_caffe_source --all (删掉环境)
再创建环境:
conda create -n py3_caffe_source python=3.6.8
第二步:安装基础依赖库
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
sudo apt install libatlas-base-dev
sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev
笔记:卸载libboost的方法:sudo apt autoremove libboost-all-dev
由于是基于python3的,因此要创建基于python3软链接,
这部分操作应切换至/usr/lib/x86_64-linux-gnu目录执行
先查看:
ll libboost_python.so
ll libboost_python3.so
# 备份py2.7的boost库软链接
sudo mv libboost_python.so libboost_python.so.back
# 备份py3.6的boost库软链接
sudo mv libboost_python3.so libboost_python3.so.back
sudo ln -s libboost_python-py36.so libboost_python.so
sudo ln -s libboost_python-py36.so libboost_python3.so
这里为什么是py36 而不是py37
为什么会没有libboost_python-py37.so这个文件 是不是没有进入conda虚拟环境中去安装libboost
分析:安装libboost是通过apt-get install 命令的 与conda虚拟环境Python版本无关
而是与系统的Python版本有关 所以在前面通过conda创建虚拟环境时Python最好与系统的python3版本一致
第三步:下载caffe的源代码到项目目录git clone https://github.com/BVLC/caffe.git
第四步:修改Makefile.config
首先拷贝一份:cp Makefile.config.example Makefile.config
0、放开 USE_CUDNN := 1 与 OPENCV_VERSION := 3
1、CUDA_ARCH变量配置。如果cuda 的版本号>=9.0,则在该文件夹下找到CUDA_ARCH变量,并把:
-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21
两行注释掉 (根据自己的GPU算力修改)
physical GPU (device: 0, name: GeForce GTX 750, pci bus id: 0000:01:00.0, compute capability: 5.0)
-gencode arch=compute_50,code=sm_50
physical GPU (device: 0, name: GeForce RTX 2070 SUPER, pci bus id: 0000:01:00.0, compute capability: 7.5)
-gencode arch=compute_75,code=sm_75
2、PYTHON_HOME变量配置。因为使用的是Python是Anaconda配置的虚拟环境,因此需要将python的环境指向该地址。
我的Anaconda安装在$(HOME)/miniconda3位置,
虚拟环境创建以后会在envs下创建一个与虚拟环境同名的文件夹,
我直接将anaconda的目录指向该位置。PYTHON的路径基于该位置指定
ANACONDA_HOME := $(HOME)/miniconda3/envs/py3_caffe_source
py3_caffe_source为前面创建的虚拟环境名字
3、PYTHON_LIB、WITH_PYTHON_LAYER、INCLUDE_DIRS和LIBRARY_DIRS变量配置
PYTHON_LIB := $(ANACONDA_HOME)/lib
WITH_PYTHON_LAYER := 1
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
- USE_CUDNN := 1
- OPENCV_VERSION := 3
- CUDA_DIR := /usr/local/cuda
- 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
- BLAS := atlas
- ANACONDA_HOME := $(HOME)/miniconda3/envs/py3_caffe_source
- PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
- $(ANACONDA_HOME)/include/python3.6m \
- $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
- PYTHON_LIB := $(ANACONDA_HOME)/lib
- WITH_PYTHON_LAYER := 1
- INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
- LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
- BUILD_DIR := build
- DISTRIBUTE_DIR := distribute
- TEST_GPUID := 0
- # enable pretty build (comment to see full commands)
- Q ?= @
复制代码
第五步:修改Makefile文件
Makefile文件主要需要修改LIBRARIES和PYTHON_LIBRARIES两个环境变量
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
PYTHON_LIBRARIES ?= boost_python3 python3.6m
第六步:make编译caffe
make all -j8
make test -j8
make pycaffe -j8
如果报错 需重新编译 make clean
第七步:拷贝编译后的libcaffe.so至caffe的虚拟环境
在caffe源码项目下/python目录下 打开终端:
cp -rf caffe/ ~/miniconda3/envs/py3_caffe_source/lib/python3.6/
cp -rf ../.build_release/lib/* ~/miniconda3/envs/py3_caffe_source/lib/
或者
cp -rf caffe/ ~/miniconda3/envs/py2_caffe_source/lib/python2.7/
cp -rf ../.build_release/lib/* ~/miniconda3/envs/py2_caffe_source/lib/
第八步:进入conda虚拟环境py3_caffe_source
安装caffe依赖的Python库
pip3 --version
pip3 install numpy
pip3 install scikit-image
pip3 install protobuf
大功告成,此后caffe可以完美和anaconda环境共存了!
编译报错:
cv::imread(cv::String const&, int)’未定义的引用
在 Makefile文件的195 行 LIBRARIES += opencv_core opencv_highgui opencv_imgproc 后面添加:
opencv_imgcodecs opencv_videoio
修改完成后,每次 make 前需要:make clean,再执行 make all 等命令
虚拟环境中不需要安装opencv
报错:
ImportError: libcaffe.so.1.0.0: cannot open shared object file: No such file or directory
如果是python2.7 则报错:ImportError: dynamic module does not define init function (init_caffe)
需要把caffe源码下的python路径加入环境变量.bashrc
export PYTHONPATH=$PYTHONPATH:/home/dfy888/py3_caffe_source_works/caffe-master/python
这样从终端运行就不会报错了
但是直接用Pycharm运行还是报错,解决方法:
在conda虚拟环境下miniconda3/envs/环境名字/lib/python3.6/site-packages/下创建一个pth文件
比如:caffe_python.pth 里面放路径即可:/home/dfy888/py3_caffe_source_works/caffe-master/python
之后重启Pycharm
|
|