东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[课堂笔记] 通过源码编译安装Caffe到Anaconda的某个虚拟环境中(详细步...

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14431
QQ
跳转到指定楼层
楼主
发表于 2019-8-5 08:40:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


通过源码编译安装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


  1. USE_CUDNN := 1

  2. OPENCV_VERSION := 3

  3. CUDA_DIR := /usr/local/cuda

  4. CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \
  5.                 -gencode arch=compute_35,code=sm_35 \
  6.                 -gencode arch=compute_50,code=sm_50 \
  7.                 -gencode arch=compute_52,code=sm_52 \
  8.                 -gencode arch=compute_60,code=sm_60 \
  9.                 -gencode arch=compute_61,code=sm_61 \
  10.                 -gencode arch=compute_61,code=compute_61

  11. BLAS := atlas

  12. ANACONDA_HOME := $(HOME)/miniconda3/envs/py3_caffe_source
  13. PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
  14.                   $(ANACONDA_HOME)/include/python3.6m \
  15.                   $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include

  16. PYTHON_LIB := $(ANACONDA_HOME)/lib

  17. WITH_PYTHON_LAYER := 1

  18. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
  19. LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

  20. BUILD_DIR := build
  21. DISTRIBUTE_DIR := distribute

  22. TEST_GPUID := 0

  23. # enable pretty build (comment to see full commands)
  24. 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

















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

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14431
QQ
沙发
 楼主| 发表于 2019-8-6 07:40:51 | 只看该作者
为了跑caffe-ssd模型训练 还是推荐使用python2版本 编译ssd 否则很容易出python版本冲突问题  因为默认的caffe与caffe-ssd都是用Python2版本的
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 18:51 , Processed in 0.171680 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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