东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14438
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, 下载次数: 327)

libboost_python.png

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

libboost_python2.png

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

libboost_python3.png

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

libboost_python4_success.png

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

make_all_j8.png

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

caffe_success.png

libboost_python.zip

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

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

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
17#
发表于 2023-11-6 23:18:39 | 只看该作者
这是挖坑后就不打算回你了
回复

使用道具 举报

0

主题

1

帖子

10

积分

新手上路

Rank: 1

积分
10
16#
发表于 2022-6-9 10:03:46 | 只看该作者
楼主,文件只有特定用户才能下载怎么办?python2的libboost-python 去哪里下载安装呢?谢谢
回复

使用道具 举报

0

主题

1

帖子

8

积分

新手上路

Rank: 1

积分
8
15#
发表于 2022-4-20 18:00:52 | 只看该作者
东方耀 发表于 2020-7-8 17:48
sudo apt-get install python-dev  或
sudo apt-get install python3-dev

这段是要添加路径吗  但是我没有添加路径好像也成功了
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
回复

使用道具 举报

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
14#
发表于 2021-7-6 17:19:36 | 只看该作者
您好,您有没有ubuntu下caffe环境搭建python3.5的教程
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
13#
发表于 2021-5-21 14:52:04 | 只看该作者
你好  我在编译caffe的时候遇到了这个问题 请问如何解决呢?

make: *** [.build_release/tools/caffe.bin] Error 1
575:
其他环境都跟您一样,只是我安装的是python3.8   然后编译的时候出现了这种情况
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14438
QQ
12#
 楼主| 发表于 2021-5-9 21:44:35 | 只看该作者
575 发表于 2021-5-9 10:14
请问如何查询GPU的算力呀?

GPU型号就知道了啊
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
11#
发表于 2021-5-9 10:14:51 | 只看该作者
请问如何查询GPU的算力呀?
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14438
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/
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14438
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
复制代码


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 11:54 , Processed in 0.204979 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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