[深度学习] centos7上搭建基于Anaconda3的caffe+pycaffe环境(python3.6)
本文记录从零开始在CentOS7.x系统上搭建Caffe深度学习平台,并配置pycaffe环境。(由于在虚拟机上搭建,所以为CPU_ONLY模式)
1.选择CentOS7 mini版镜像安装虚拟机
镜像版本:CentOS-7-x86_64-Minimal-1511.iso
安装好虚拟机后,配置网卡,本文采用桥接模式接入局域网,能够正常访问互联网。


2.更新yum源
安装wget、net-tools等常用工具:
yum install wget net-tools -y
更换国内yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update -y
安装epel-release源:
yum install epel-release -y
3.安装依赖
按照caffe官方文档,安装依赖包:
yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel -y
yum install gflags-devel glog-devel lmdb-devel -y
yum install openblas-devel atlas-devel -y
安装其他需要的工具包:
yum install git gcc gcc-c++ bzip2 unzip -y
4.安装Anaconda3
从Anaconda Install Archive中下载:Anaconda3-5.2.0-Linux-x86_64.sh(对应python3.6)
安装Anaconda,安装目录在/usr/local/anaconda3
bash Anaconda3-5.2.-Linux-x86_64.sh
根据提示,依次Enter、yes、输入安装位置,等待安装完成。结束不选择不添加.bashrc,不安装VSCode。
使用/usr/local/anaconda3/bin/pip安装protobuf==3.6.0和protobuf-py3
cd /usr/local/anaconda3/bin
./pip install protobuf==3.6.0
./pip install protobuf-py3
5.下载caffe
选择从github上下载caffe,本文下载的是caffe的zip格式包,名为master,解压:
unzip ~/master
进入caffe-master目录:
cd ~/caffe-master
将配置文件复制一份:
cp Makefile.config.example Makefile.config
修改配置文件Makefile.config:
CPU_ONLY := 1
BLAS := open
BLAS_INCLUDE := /usr/include/openblas
ANACONDA_HOME := /usr/local/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.6m \
$(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include
PYTHON_LIBRARIES := boost_python36 python3.6m
PYTHON_LIB := $(ANACONDA_HOME)/lib
6.添加环境变量
将各个动态库加入环境变量:
vi /etc/profile
在末尾添加:
LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/lib:/lib64:/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/anaconda3/lib
生效:
source /etc/profile
7.编译caffe
进入~/caffe-master目录:
make all -j8
make test
make runtest
8.编译libboost_python36.so(编译pycaffe时依赖)
下载 boost_1_70_0.tar.gz载/root下。
要编译libboost_python36版本,需要将/usr/bin下的python软连接指向Anaconda3中的python
cd /usr/bin
mv python python.bak
ln -s /usr/local/anaconda3/bin/python3. python
注意,此时尽量不要使用yum,因为yum默认使用python2.7,修改了python软连接会导致报错,解决方法如下:
vi /usr/bin/yum
将第一行的#!/usr/bin/python 修改为:
#!/usr/bin/python2.
同样修改/usr/libexec/urlgrabber-ext-down文件。
解压boost压缩包:
tar zxvf ~/boost_1_70_0.tar.gz
进入解压后的boost_1_70_0目录:
./bootstrap.sh --with-python=/usr/local/anaconda3/bin/python3 --with-python-version=3.6 --with-python-root=/usr/local/anaconda3/lib/python3.
./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/usr/local/anaconda3/include/python3.6m/"
./b2 install
9.编译pycaffe
进入~/caffe-master目录
make pycaffe
10.添加环境变量
vi /etc/profile
添加:
export PYTHONPATH=/root/caffe-master/python:$PYTHONPATH
export PYTHONPATH=/usr/local/anaconda3/lib/python3.6/site-packages:$PYTHONPATH
11.python导入caffe
运行python3.6.5
import caffe
此时会报错:
>>> import caffe
Failed to include caffe_pb2, things might go wrong!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/caffe-master/python/caffe/__init__.py", line 4, in <module>
from .proto.caffe_pb2 import TRAIN, TEST
File "/root/caffe-master/python/caffe/proto/caffe_pb2.py", line 4, in <module>
from google.protobuf.internal import enum_type_wrapper
ModuleNotFoundError: No module named 'google'
这是需要更新protobuf的版本,从2.5.0版本更新为2.6.1。
12.升级protobuf
下载protobuf-2.6.1.tar.gz在/root下
卸载protobuf-2.5.0版本:
yum remove protobuf -y
这里的yum可能会报错:
[root@leocaffe lib]# yum remove protobuf
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
这是因为我们将python软连接指向了python3.6,我们可以使用前面所讲的解决错误的方法,修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down文件(参照8.编译libboost_python36.so)
解压:
cd ~
tar zxvf ~/protobuf-2.6.1.tar.gz
执行:
cd /usr/local
mkdir protobuf
cd ~/protobuf-2.6.1
./configure --prefix=/usr/local/protobuf
然后编译:
cd ~/protobuf-2.6.1
make
make install
13.添加protobuf环境变量
vi /etc/profile
添加以下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
export PATH=$PATH:/usr/local/protobuf/bin/
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
检查以下安装是否成功:
protoc --version
[root@leocaffe lib]# protoc --version
libprotoc 2.6.1
打印版本号说明安装成功。
14.python再次导入caffe
为保险,可以重新对caffe进行编译:
cd ~/caffe-master
make clean
make all -j8
make pycaffe
然后导入caffe:
import caffe
成功:
[root@leocaffe bin]# ./python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>
总结:
从本文可以看出,部署caffe平台坑还是挺多,主要集中在所依赖的动态库,环境变量以及软件版本问题。特别注意boost的编译安装、protobuf的版本更新、以及profile环境变量的修改。
[深度学习] centos7上搭建基于Anaconda3的caffe+pycaffe环境(python3.6)的更多相关文章
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【四】使用CUBLAS加速计算人脸向量的余弦距离
前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...
- Mac 上搭建基于 Hexo + GitHub 个人博客
环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode ...
- centos7上搭建开源系统jforum
centos7上搭建好tomcat,mysql; 将 jforum-2.6.2.war放到tomcat目录的webapps下: 启动tomcat,./startup.sh ,查看webapp下jfor ...
- 搭建基于MyEclipse的Hadoop开发环境
不多说,直接上干货! 前面我们已经搭建了一个伪分布模式的Hadoop运行环境.请移步, hadoop-2.2.0.tar.gz的伪分布集群环境搭建(单节点) 我们绝大多数都习惯在Eclipse或MyE ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境
Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境 下载PCL For windows 软件包 到这个网站下载PCL-All-In-One Installer: ...
- 【深度学习笔记】(一)TensorFlow安装及环境搭建
在学习了一段时间台大李宏毅关于deep learning的课程,以及一些其他机器学习的书之后,终于打算开始动手进行一些实践了. 感觉保完研之后散养状态下,学习效率太低了,于是便想白天学习,晚上对白天学 ...
- 在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
前言:这是一篇教你如何在阿里云的ECS CentOS 7服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对Linu ...
- 如何在ASP.NET 5上搭建基于TypeScript的Angular2项目
一.前言 就在上月,公司的一个同事建议当前的前端全面改用AngularJs进行开发,而我们采用的就是ASP.NET 5项目,原本我的计划是采用TypeScript直接进行Angular2开发.所以借用 ...
随机推荐
- [python] 正则表达式细节
1.零宽断言 所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置. 正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z ...
- java 实现读取某个目录下指定类型的文件
我这里是读取txt类型的文件,在指定的目录下有不同类型的文件 实现代码,读取txt类型的文件并打印出该文件的绝对路径 package com.SBgong.test; import java.io.F ...
- [Python3] 038 函数式编程 偏函数
目录 函数式编程 之 偏函数 1. 关于强制类型转换 int 的补充 2. 利用 int 新建函数 3. functools.partial 函数式编程 之 偏函数 1. 关于强制类型转换 int 的 ...
- iframe在firefox下的无法正常target问题
今日在改一个网站的时候碰到个奇葩的问题. 把网站按照结构划分,做了个主页面,嵌入iframe,设定该iframe的name,主页面上的链接使用target保证在iframe中打开该链接. 听上去很常规 ...
- JAVA基础--JAVA API常见对象(字符串&缓冲区)
一. String 类型 1. String类引入 第二天学习过Java中的常量: 常量的分类: 数值型常量:整数,小数(浮点数) 字符型常量:使用单引号引用的数据 字符串常量:使用双引号引用 ...
- jQuery 实现图片放大两种方式
jQuery 实现图片放大两种方式 一.利用css样式表实现,多用于后台显示 1.这种比较简单,利用dom元素的hover实现样式切换 <style> img{ cursor: point ...
- PHP使用CURL抓取页面
cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php //1.初始化,创 ...
- Codeforces 1194D. 1-2-K Game
传送门 先考虑只能走 $1,2$ 步的情况,设 $p[i]$ 表示当 $n=i$ 时先手是否必胜 自己手玩一下发现 $p$ 就是 $011011011...011$ 这样循环(下标从 $0$ 开始,其 ...
- leetcode难题
4 寻找两个有序数组的中位数 35.9% 困难 10 正则表达式匹配 24.6% 困难 23 合并K个排序链表 47.4% 困难 25 K ...
- css动画之旋转翻牌效果
1.我们先设置两个盒子大小,颜色等等,然后定位重叠在一起,最后再进行动画设置 例子如下: <style> .box { height: 300px; width: 300px; posit ...