|
Ubuntu20.04下caffe环境(源码编译)搭建【终于成功啦】
Python2.7
cuda10.0
cuDNN 7.6.0
GeForce RTX 2070s
第一步:创建conda虚拟环境(源码编译安装caffe)
conda create -n py2_caffe_source python=2.7.18
mkdir ~/py2_caffe_source_works
conda activate py2_caffe_source
pip --version
pip install pip -U
pip --version
pip install numpy
第二步:安装基础依赖库
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
第三步:下载caffe的源代码到项目目录py2_caffe_source_works
git clone https://github.com/BVLC/caffe.git
cd caffe/
第四步:修改Makefile.config
首先拷贝一份:cp Makefile.config.example Makefile.config
开始编辑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/py2_caffe_source
py2_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 /usr/lib/x86_64-linux-gnu/hdf5/serial
- USE_CUDNN := 1
- OPENCV_VERSION := 3
- CUDA_DIR := /usr/local/cuda-10.0
-
- CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
- -gencode arch=compute_75,code=sm_75
- BLAS := atlas
- ANACONDA_HOME := $(HOME)/miniconda3/envs/py2_caffe_source
- PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
- $(ANACONDA_HOME)/include/python2.7 \
- $(ANACONDA_HOME)/lib/python2.7/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 /usr/lib/x86_64-linux-gnu/hdf5/serial
- 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_python python2.7 (这里不用动)
如果是python3.6 则改为:PYTHON_LIBRARIES ?= boost_python3 python3.6m
第六步:make编译caffe
make all -j8
make test -j8
make pycaffe -j8
如果报错 需重新编译 make clean
报错:需要通过源码编译安装opencv3 参考地址:http://www.ai111.vip/thread-1063-1-1.html
fatal error: opencv2/core/core.hpp: No such file or directory
#include <opencv2/core/core.hpp>
^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:592: .build_release/examples/cpp_classification/classification.o] Error 1
报错:cannot find lboost_python 软链接
/usr/bin/ld: cannot find -lboost_python
collect2: error: ld returned 1 exit status
make: *** [Makefile:583: .build_release/lib/libcaffe.so.1.0.0] Error 1
首先进入目录查看是否存在libboost_python对应的so文件
cd /usr/lib/x86_64-linux-gnu
ll libboost_python.so 发现没有 只有libboost_python38.so 如下面的图
突然发现系统的python只有python3.8.2
只需要在系统也安装一个python2.7即可
sudo apt-get install python 这样还不行!
建立一个软连接就可以了,在命令行中输入(如下面图所示):
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_python.so
这样 报错就变了 应该是版本不匹配吧
只能从另外电脑拷贝a文件和so文件到对应目录(我放附件了)
sudo cp libboost_python-py27.a /usr/lib/x86_64-linux-gnu
sudo cp libboost_python-py27.so /usr/lib/x86_64-linux-gnu
然后手动创建软链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py27.so /usr/lib/x86_64-linux-gnu/libboost_python.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py27.a /usr/lib/x86_64-linux-gnu/libboost_python.a
之后 make clean make all -j8 成功啦!
第七步:拷贝编译后的libcaffe.so至caffe的虚拟环境
在caffe源码项目下/python目录下 打开终端:
cp -rf caffe/ ~/miniconda3/envs/py2_caffe_source/lib/python2.7/
cp -rf ../.build_release/lib/* ~/miniconda3/envs/py2_caffe_source/lib/
第八步:进入conda虚拟环境py2_caffe_source
安装caffe依赖的Python库
pip --version
pip install numpy (之前已经安装了的)
pip install scikit-image
pip install protobuf
需要把caffe源码下的python路径加入环境变量.bashrc
export PYTHONPATH=$PYTHONPATH:/home/jingyun/py2_caffe_source_works/caffe/python
这样从终端运行就不会报错了:ImportError: libcaffe.so.1.0.0: cannot open shared object file: No such file or directory
但是直接用Pycharm运行还是报错,解决方法:
在conda虚拟环境下miniconda3/envs/环境名字/lib/python2.7/site-packages/下创建一个pth文件
比如:caffe_python.pth 里面放路径即可:/home/jingyun/py2_caffe_source_works/caffe/python
之后重启Pycharm
进入python后 import caffe
报错:ImportError: libboost_python-py27.so.1.65.1: cannot open shared object file: No such file or directory
前面的文件拷贝不对:
sudo cp libboost_python-py27.so.1.65.1 /usr/lib/x86_64-linux-gnu
删除软链接:(rm -rf 映射目录)
sudo rm -rf /usr/lib/x86_64-linux-gnu/libboost_python.so
手动创建软链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.65.1 /usr/lib/x86_64-linux-gnu/libboost_python.so
再重新编译一下 第七步 第八步 重新走!
大功告成,此后caffe可以完美和anaconda环境共存了!
|
|