东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 9855|回复: 16
打印 上一主题 下一主题

[课堂笔记] Ubuntu20.04下caffe环境(源码编译)搭建【终于成功啦】

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
跳转到指定楼层
楼主
发表于 2020-7-8 14:32:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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





  1. USE_CUDNN := 1



  2. OPENCV_VERSION := 3

  3. CUDA_DIR := /usr/local/cuda-10.0
  4.         
  5. CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
  6.                 -gencode arch=compute_75,code=sm_75


  7. BLAS := atlas


  8. ANACONDA_HOME := $(HOME)/miniconda3/envs/py2_caffe_source
  9. PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
  10.                   $(ANACONDA_HOME)/include/python2.7 \
  11.                   $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

  12. PYTHON_LIB := $(ANACONDA_HOME)/lib


  13. WITH_PYTHON_LAYER := 1



  14. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
  15. LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

  16. BUILD_DIR := build
  17. DISTRIBUTE_DIR := distribute

  18. TEST_GPUID := 0

  19. # enable pretty build (comment to see full commands)
  20. 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环境共存了!


libboost_python.png (94.32 KB, 下载次数: 319)

libboost_python.png

libboost_python2.png (43.58 KB, 下载次数: 317)

libboost_python2.png

libboost_python3.png (99.58 KB, 下载次数: 316)

libboost_python3.png

libboost_python4_success.png (54.05 KB, 下载次数: 315)

libboost_python4_success.png

make_all_j8.png (75.75 KB, 下载次数: 315)

make_all_j8.png

caffe_success.png (120.08 KB, 下载次数: 316)

caffe_success.png

libboost_python.zip

428 KB, 阅读权限: 188, 下载次数: 0

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
沙发
 楼主| 发表于 2020-7-8 17:48:17 | 只看该作者
sudo apt-get install python-dev  或
sudo apt-get install python3-dev

sudo apt-get install libboost-python-dev

Download the lastest version of Boost from http://www.boost.org/

./bootstrap.sh --with-python=python2.7  或
./bootstrap.sh --with-python=python3.5

Compile Boost in directory :

./b2

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

    /home/jingyun/dfy_softwares2/boost_1_73_0

The following directory should be added to linker library paths:

    /home/jingyun/dfy_softwares2/boost_1_73_0/stage/lib

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
板凳
 楼主| 发表于 2020-7-8 18:00:12 | 只看该作者
建立一个软连接就可以了,在命令行中输入(如下面图所示):
sudo ln -s  /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0  /usr/lib/x86_64-linux-gnu/libboost_python.so

这样 报错就变了   应该是版本不匹配吧
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
地板
 楼主| 发表于 2020-7-8 18:01:22 | 只看该作者
东方耀 发表于 2020-7-8 18:00
建立一个软连接就可以了,在命令行中输入(如下面图所示):
sudo ln -s  /usr/lib/x86_64-linux-gnu/libboos ...

创建软链接:

ln -s 原目录 映射目录
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
5#
 楼主| 发表于 2020-7-8 18:01:53 | 只看该作者
东方耀 发表于 2020-7-8 18:00
建立一个软连接就可以了,在命令行中输入(如下面图所示):
sudo ln -s  /usr/lib/x86_64-linux-gnu/libboos ...

删除软链接:

rm -rf 映射目录
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
6#
 楼主| 发表于 2020-7-9 10:34:45 | 只看该作者
运行caffe源码自带的mnits项目实验
http://www.ai111.vip/forum.php?m ... =1064&fromuid=1
(出处: 东方耀AI技术分享)
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
7#
 楼主| 发表于 2020-7-10 09:32:40 | 只看该作者
make runtest -j8
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
8#
 楼主| 发表于 2020-7-10 14:35:04 | 只看该作者
make test -j8时报错:
/usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o
test_image_data_layer.o
undefined reference to `non-virtual thunk to caffe::ImageDataLayer<double>::~ImageDataLayer()'
是我添加的自定义层有问题 去掉后正常啦  也可能是因为多线程的冲突问题
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
9#
 楼主| 发表于 2020-7-11 09:53:38 | 只看该作者
  1. 加了自定义的层后 make test -j8
  2. make all -j8    make pycaffe -j8都是正常的!
  3. 容易报错:
  4. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIdEE[_ZTVN5caffe14ImageDataLayerIdEE]+0xe0): undefined reference to `non-virtual thunk to caffe::ImageDataLayer<double>::~ImageDataLayer()'
  5. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIdEE[_ZTVN5caffe14ImageDataLayerIdEE]+0xe8): undefined reference to `non-virtual thunk to caffe::ImageDataLayer<double>::~ImageDataLayer()'
  6. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIdEE[_ZTVN5caffe14ImageDataLayerIdEE]+0xf0): undefined reference to `non-virtual thunk to caffe::BasePrefetchingDataLayer<double>::InternalThreadEntry()'
  7. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIfEE[_ZTVN5caffe14ImageDataLayerIfEE]+0xe0): undefined reference to `non-virtual thunk to caffe::ImageDataLayer<float>::~ImageDataLayer()'
  8. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIfEE[_ZTVN5caffe14ImageDataLayerIfEE]+0xe8): undefined reference to `non-virtual thunk to caffe::ImageDataLayer<float>::~ImageDataLayer()'
  9. /usr/bin/ld: .build_release/src/caffe/test/test_image_data_layer.o:(.data.rel.ro._ZTVN5caffe14ImageDataLayerIfEE[_ZTVN5caffe14ImageDataLayerIfEE]+0xf0): undefined reference to `non-virtual thunk to caffe::BasePrefetchingDataLayer<float>::InternalThreadEntry()'
  10. collect2: error: ld returned 1 exit status
  11. make: *** [Makefile:626: .build_release/test/test_image_data_layer.testbin] Error 1
复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14435
QQ
10#
 楼主| 发表于 2020-9-1 17:26:48 | 只看该作者
不做第七步也是可以的:
第七步:拷贝编译后的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/
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-26 18:10 , Processed in 0.186363 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表