Ubuntu18.04 配置Caffe(Anaconda3和非Anaconda3))

前言

本文主要使用两种方法来配置Caffe以及在发布自己配置过程中遇到的问题和解决方案,以供大家参考。一种是基于系统本身的Python环境,无需安装Anaconda3,另外一种是基于Anaconda3的独立Python环境。
安装的前提是需要已经进行显卡驱动、CUDA、CUDNN的安装以及Opencv的安装,如果没有安装可以参考Ubuntu18.04 安装显卡驱动、CUDA、CUDNNUbuntu18.04配置Opencv3.4.9
其次要提到的是Caffe开源代码(这里的地址是我链接到码云上的,下载会比github快很多),目前对应的Python版本是3.6,这一步在后面的配置中会提到。

无需安装Anaconda3的caffe配置

这种方式相对比较简单,且不容易出错,但是我在配置到最后一步的时候却发生使用上出了问题,原因是似乎是多操作了一步,因此喜欢简单方法的建议谨慎尝试。
1.安装必要的依赖包

$ 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

一定要确保所有的依赖包都正常安装了,如果没有可以尝试apt update一下
2.更改默认Python
终端输入python查看版本,如果默认不是python3,则在终端输入:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150  

执行完上述两行命令之后在终端输入python,如果第一行信息是3.6,则成功。
如果要切换到Python2,执行:

$ sudo update-alternatives --config python

3.下载caffe开源库

$ git clone https://gitee.com/notalone0125/caffe.git

4.进行编译前的配置更改

$ cd caffe
$ sudo cp Makefile.config.example Makefile.config
$ sudo gedit Makefile.config
/#修改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.修改 python 路径
将#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.删掉compute_20,最后效果是
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
/#
$ sudo gedit Makefile
/#修改Makefile文件
1.将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX)  -Xcompiler -fPIC $(COMMON_FLAGS)

2.将:
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

3.将
PYTHON_LIBRARIES := boost_python python2.7
改为
PYTHON_LIBRARIES := boost_python-py35  #py35需要改为你自己的python版本,如py34,py33
/#

5.开始编译
在 caffe 目录下执行 :

$ make all -j8

这一步前面如果配置正确就应该没什么问题。

$ make runtest -j8

图片.png

出现如图结果就表示成功。
到了这一步,在命令行的执行python,之后import caffe应该就可以正常使用的。提示File "<stdin>", line 1, in <module> ImportError: No module named caffe的话,进行一下环境变量的配置

$ sudo echo export PYTHONPATH="~/caffe/python" >> ~/.bashrc
$ source ~/.bashrc

但是在参考文章中说位置支持Python接口,需要make pycaffe -j8。这一步我尝试了之后,import caffe就报错了,暂时没有找到原因。如果在上面一步import caffe已经可以成功,先不要进行make pycaffe -j8,看后面能不能正常使用。
关于更详细的操作可以看我的参考文章的第一篇。我还是想重点讲一讲第二种方法。

安装Anaconda3之后进行Caffe环境的配置

我在操作了make pycaffe -j8之后就报错了,因此就又折腾了一下在Anaconda3下配置pyhton并且安装caffe。
1.安装Anaconda3,这张表上提供了Anaconda以及对应的Python版本。我使用的是3.5.2,最好是3.5.2,因为对应的caffe里的python是3.6版本的,这样会少走很多弯路。

Anaconda版本.png

anaconda下载,这里使用清华镜像软件站下载,会很快。
下载完之后执行.sh文件,并按照第一种方法中的第2步更改默认Python.
之后还要更改环境变量

$ sudo gedit /etc/profile
# 在文件末尾处添加exportPATH=/home/liguangyao/anaconda3/bin:$PATH
$ source ~/.bashrc

此时,在终端输入Python,会看到第一行位Python3.6.5 |Anaconda,Inc.|.....,这样就证明默认的Python已经是Anaconda下的Python3.6.5了。

2.首先安装Caffe-GPU

$ sudo apt install caffe-cuda

3.基本依赖库的安装

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
$ sudo apt-get install 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

4.下载源码的过程和上面一样,只要是文件的配置更改稍有不同,参考如下:

/#修改Makefile.config的配置文件
1.将#USE_CUDNN:= 1
取消注释

2.将#OPENCV_VERSION := 3
取消注释

3.将#compute_20删掉,最后效果是
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

4.将#BLAS:= atlas注释
换成BLAS := open

5.将Python2环境注销,换成Anaconda3下的Python环境,最后效果:
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
        /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
    $(ANACONDA_HOME)/include/python3.6m \
    $(ANACONDA_HOME)/lib/python3.6m/site-packages/numpy/core/include

6.将#PYTHON_LIB:= /usr/lib注释
取消PYTHON_LIB:= $(ANACONDA_HOME)/lib的注释

7.将#INCLUDE_DIRS :=$(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include LIBRARY_DIRS :=$(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
改为
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/local/hdf5/lib
/#
/#修改Makefile的配置文件
1将#NVCCFLAGS+= -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
修改为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 
 
2.将:
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

3.将
PYTHON_LIBRARIES := boost_python python2.7
改为
PYTHON_LIBRARIES := boost_python-py35  #py35需要改为你自己的python版本,如py34,py33
/#
/#

5.进入到caffe主目录下的python目录,安装Python的必要项( -i https://pypi.tuna.tsinghua.edu.cn/simple可以极大提高pip的下载速度)

$ for req in $(cat requirements.txt); do pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done

这一步可能会出现一些红色报错,按照下面的方法解决
(1).ERROR: After October 2020 you may experience errors when installing or updating packages

$ pip install python-openstackclient python-glanceclient python-neutronclient   -i https://pypi.tuna.tsinghua.edu.cn/simple --use-feature=2020-resolver

(2).错误:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5

$ sudo pip install --upgrade python-dateutil
#或者
$ sudo gedit requirements.txt
将#python-dateutil>=1.4,<2
改为python-dateutil

直到for req in $(cat requirements.txt); do pip install -i语句执行不出现任何红色字体并正确执行。

6.进入caffe的根目录下进行编译

$ sudo make clean
$ sudo make all -j4
$ sudo make test -j8 
$ sudo make runtest -j8   

这些步骤中只要没提示报错信息,就代表执行成功了。一般runtest会报错,参见参考文章中Anaconda3配置Caffe的第五篇,比较常见的是错误三。
最后,sudo make pycaffe -j4 //配置pycaffe即可。

参考文章

无Anaconda3配置Caffe
1.Ubuntu18.04 Caffe 安装步骤记录(超详尽)
2.error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

Anaconda3配置Caffe
1.Ubuntu18.04LTS下基于 Anaconda3 安装 Caffe-GPU及 Python3.6 + Pycharm + Mnist例子教程(超详细)
2.ERROR: After October 2020 you may experience errors when installing or updating packages
3.错误:pandas 0.23.4 has requirement python-dateutil>=2.5.0, but you'll have python-dateutil 1.5
4.pycaffe编译后的配置问题(ModuleNotFoundError: No module named 'caffe'
5.Ubuntu18.04 LTS下Caffe-GPU版本安装常见错误

python降级的灵感来源
1.ubuntu18——ModuleNotFoundError: No module named 'caffe._caffe'
2.Ubuntu 16.04下安装Caffe解决 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

其他文章
1.完美解决pip下载慢、下载超时问题(含镜像网站,代码)
2.清华大学开源软件镜像站
3.恢复anaconda环境, 卸载anaconda, 重装anaconda
4.Boost Python 的安装配置以及示例 (支持python3.x)
5.Linux 编译boost (for python3)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容