CentOS 7.3 Caffe搭建全过程记录 2020-08-20 重发布

硬件说明
Dell R730服务器 ,配备两块Tesla K40m显示卡,64GB内存,英特尔至强32核心处理器,安装时显示器采用KVM方案。

安装系统

系统下载

官网下载地址https://www.centos.org/download/

参考https://wiki.centos.org/TipsAndTricks/sha256sum 验证你下载的iso镜像是否完整
在地址http://mirrors.163.com/centos/7/isos/x86_64/sha256sum.txt 中可以找到CentOS-7-x86_64-DVD-1611.iso 对应的sha1sum值
mac上如下图所示

image.png

请务必校验下载的镜像文件

系统启动盘制作

  • 1、插入U盘并打开软碟通(UltraISO Premium Edition 9.6.0.3000,版本至少9.6)
  • 2、文件—>>打开—>>CentOS-7-x86_64-DVD-1611.iso
  • 3、启动—>>写入硬盘映像
  • 4、硬盘驱动器千万别选错了,一定要确定是你的U盘再开始点击写入


    image.png
  • 5、右键—>>对U盘重命名为CENTOS7(名字不要紧,但一定要改,否则安装会出错)

系统安装

服务器原本需要创建RAID5磁盘阵列的,但由于现在已经是创建好的磁盘阵列,暂时不需要再次创建,只要在系统安装时清除整个磁盘就可以了。
开机时按F11 进入系统设置,选择One-shot....启动,选择你的U盘即可

  • 1、当出现下面的画面时,按F11
image.png
  • 2、稍等进入系统后选择One-Shot BIOS Menu


    image.png
  • 3、选择你的U盘并等待启动
image.png
  • 4、出现如下画面时,上下键选择Install Centos …


    image.png
  • 5、按TAB键,修改启动选项,将LABLE修改为CENTOS7(或者你自己定义的名称)

image.png
  • 6、语言选择English,在SOFTWARE选项,选择Server with GUI ,并勾选如下选项
image.png
  • 7、设置硬盘
image.png

点击DONE,下一步清空所有磁盘空间


image.png
  • 8、设置网络,设置IPV4即可,最后别忘了勾选自动连接


    image.png
  • 9、设置超级用户和普通用户

配置网络

如果你的网络不正常,就需要配置网络了
检查网络是否工作正常

ping 192.168.69.254 #192.168.69.254 为网关地址,无错误即可```

**如果不通,则设置网络**

cd /etc/sysconfig/network-scripts
vi ifcfg-em3 #按要求配置ip地址```

TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="em3"
UUID="a4a96c2a-0efc-4442-bb52-024ba11aed90"
DEVICE="em3"
ONBOOT="yes"
IPADDR="192.168.69.64"
PREFIX="24"
GATEWAY="192.168.69.254"
DNS1="211.82.112.120"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
sudo ifdown em3
sudo ifup em3

再次使用ping 命令连接网关验证

配置代理

代理服务器搭建

  • Mac上
    安装SquidMan这个软件并设置好端口号与允许访问的客户端地址
  • windows
    安装ccproxy并设置好相关参数

登录服务器

ssh [email protected]
vi ~/.bashrc
#添加如下内容
export http_proxy=http://192.168.69.165:8066
export https_proxy=http://192.168.69.165:8066
export ftp_proxy=http://192.168.69.165:8066

切换到root环境,并修改 .bashrc

测试网络是否通畅
注意不要使用ping www.baidu.com 因为代理服务器不支持 ICMP协议的代理

wget www.baidu.com

切换到到root用户下重复上述操作,以便切换到root后依然能上网

root账户使用vim

默认vi编辑时,使用的是vi,没有语法高亮功能,而vim可以

sudo mv /bin/vi /bin/vi_bak
sudo ln -s /bin/vim /bin/vi

使sudo继承用户当前代理变量

参考:
https://www.chenyudong.com/archives/sudo-keep-env.html
配置完代理后发现sudo 执行的命令无法上网,原因是每次执行时都会进行变量重置,为了解决这个问题可以进行如下设置

sudo visudo #不要直接使用sudo vi /etc/sudoers修改,会被覆盖
#添加如下内容
Defaults    env_keep += "http_proxy https_proxy ftp_proxy no_proxy DISPLAY XAUTHORITY"
image.png

这样sudo 执行的命令就可以使用用户的代理变量了

设置国内镜像源

这一步操作非必须,但强烈推荐,这会大大加快你的网络访问速度,节省时间。具体操作请移步本人博客 CentOS 7 禁用fastestmirror插件并配置清华镜像源

安装epel源

yum install -y epel-release

更新系统(非常重要,请务必执行)

yum update -y
reboot

配置pip镜像源

pip安装第三方软件包时总是很慢,如果你还不知道镜像源的妙用,那就OUT啦~~,配置镜像源后,速度快得飞起!

这一步非必须,但强烈建议安装
参考 http://www.jianshu.com/p/5002e4aea6d7

mkdir ~/.pip
vi  ~/.pip/pip.conf

添加如下内容

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

在root用户下重复上述操作,以便切换到root后依然能使用pip镜像源

关闭SELinux

vi /etc/sysconfig/selinux
修改#SELINUX=enforcing 为 SELINUX=disable
#立即生效
setenforce 0
# 查看SELinux状态
getenforce

升级Python为2.7.13

请移步本人博客CentOS 7.3 升级Python 2.7.13
至此,Python的升级工作终于完成

安装Python3.6.1 多版本共存

请移步本人博客 CentOS 7 安装Python3.6.1 多版本共存

配置Xmanager

请移步本人博客 Centos 7 配置Xmanager XDMCP

安装Nvidia显卡驱动

请到Nvidia驱动官网查询并下载与显卡对应的驱动程序、cuda包及cudnn库
使用winscp或其他软件上传相关文件到服务器

[zhangxinming@localhost Nvidia]$ ll
总用量 1595180
-rw-rw-r--. 1 zhangxinming zhangxinming 1457082926 11月 16 02:05 cuda_8.0.44_linux.run
-rw-rw-r--. 1 zhangxinming zhangxinming  100504805 11月 16 01:57 cudnn-8.0-linux-x64-v5.1.tgz
-rw-rw-r--. 1 zhangxinming zhangxinming   75866380 4月  24 03:26 NVIDIA-Linux-x86_64-375.51.run
  • 禁用nouveau
vi /etc/modprobe.d/blacklist-nouveau.conf
添加如下内容
blacklist nouveau 
options nouveau modeset=0
#退出后
sudo dracut --force
sudo reboot
#检验是否禁用成功
lsmod | grep nouveau #如果没有输出就表示成功
  • 安装相应的软件包
yum install gcc make kernel-devel-$(uname -r)
  • 安装
sudo init 3
chmod +x NVIDIA-Linux-x86_64-375.51.run
sudo ./NVIDIA-Linux-x86_64-375.51.run #按照提示操作就可以了
# 与windows不同的是,显卡的驱动安装完毕后不需要重新启动系统,为了保险起见,重启一下也无妨
  • 验证
nvidia-smi #如果出现相应的信息就说明成功了
  • 问题
    你可能会遇到nvidia-smi命令特别慢的情况,而且GPU-Util利用率非常高。
    参考https://devtalk.nvidia.com/default/topic/539632/k20-with-high-utilization-but-no-compute-processes-/
    我们执行以下命令为GPU打开persistence mode
sudo nvidia-smi -pm 1

可以看到如下信息:

Enabled persistence mode for GPU 0000:03:00.0.
Enabled persistence mode for GPU 0000:82:00.0.
All done.

再次执行nvidia-smi就很快了,而且GPU-Util利用率为0.

安装CUDA

注意:安装cuda的同时就不要安装安装cuda自带的显卡驱动。如果你使用的是GNOME桌面不要安装OPENGL,GNOME桌面在很多情况下会崩溃!当然如果你水平够高的话,也可以尝试着解决以下这个问题。服务器环境请使用别的桌面环境和图形管理器

  • 安装依赖
    首先把依赖安装完毕,否则会出现如下错误:
Installing the NVIDIA display driver...
Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...
Missing recommended library: libGLU.so
Missing recommended library: libXmu.so
Installing the CUDA Samples in /usr/local/cuda-8.0-samples ...
Copying samples to 
/usr/local/cuda-8.0-samples/NVIDIA_CUDA-8.0_Samples now...
Finished copying samples.

解决方案:参考 Cuda on CentOS 7

yum install mesa-libGLES.x86_64 mesa-libGL-devel.x86_64 mesa-libGLU-devel.x86_64 mesa-libGLw.x86_64 mesa-libGLw-devel.x86_64 libXi-devel.x86_64 freeglut-devel.x86_64 freeglut.x86_64
  • 安装
    安装很简单,只要注意驱动不要选yes就可以了,其他的选择yes及默认路径
sudo ./cuda_8.0.44_linux.run
  • 修改环境变量
vi /etc/profile
#添加如下内容
#Base LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
#CUDA
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

设置LD_LIBRARY_PATH基本变量能避免很多类似于找不到share library的错误,推荐

  • 更新运行库缓存
source /etc/profile
sudo ldconfig

安装CUDNN

cudnn是比cuda更高级的GPU加速库,安装也十分简单,只要将文件移动到相应的位置就可以了

tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz
sudo mv include/cudnn.h /usr/local/cuda/include/
sudo mv lib64/*  /usr/local/cuda/lib64/

至此,基础环境搭建完毕,下一步,配置caffe平台

配置Git协议结合SquidMan走HTTP代理

参考:
http://www.vpsee.com/2011/07/how-to-use-git-through-a-http-proxy/
https://gist.github.com/sit/49288
https://www.emilsit.net/blog/archives/how-to-use-the-git-protocol-through-a-http-connect-proxy/
https://www.digglife.net/articles/squid-for-git-proxy.html

  • 配置SquidMan的配置文件,在合适的位置添加
acl SSL_ports port 9418
acl Safe_ports port 9418
  • 重启SquidMan

  • 配置服务器

yum install socat
vi /usr/local/bin/gitproxy-socat-simon

添加如下内容

#!/bin/sh
#!/bin/sh
# Use socat to proxy git through an HTTP CONNECT firewall.
# Useful if you are trying to clone git:// from inside a company.
# Requires that the proxy allows CONNECT to port 9418.
#
# Save this file as gitproxy somewhere in your path (e.g., ~/bin) and then run
#   chmod +x gitproxy
#   git config --global core.gitproxy gitproxy
#
# More details at http://tinyurl.com/8xvpny
# Configuration. Common proxy ports are 3128, 8123, 8000.
_proxy=192.168.69.165   #搭建的http代理地址
_proxyport=8066  #自己搭建的http代理端口
exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport

配置git客户端代理
参见初次运行 Git 前的配置

git config --global core.gitproxy /usr/local/bin/gitproxy-socat-simon

安装mercurial并为为HG Clone设置http代理

参考:
http://www.it610.com/article/1672477.htm
http://chenzaichun.github.io/2010-05-16-mercurial_hg_proxy.html
http://blog.csdn.net/xiaoaiwhc/article/details/33015971

  • 安装mercurial
yum install mercurial
  • 执行vi ~/.hgrc添加如下内容
[http_proxy]
host=192.168.69.165:8066
  • 由于之前升级了python需要修改hg命令,执行 vi /usr/bin/hg
    修改#!/usr/bin/python#!/usr/bin/python2.7.5

安装FFMPEG(新版)

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum -y install ffmpeg ffmpeg-devel

安装Java

参考:https://argcv.com/articles/3155.c

  • 下载JDK
  • 安装
yum localinstall jdk-8u20-linux-x64.rpm -y
  • 更改默认java
alternatives --config java 选择2
  • 验证
java -version
  • 配置一下环境变量
vi /etc/profile
# 添加如下内容
export JAVA_HOME=/usr/java/default
export JRE_HOME=/usr/java/default/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

安装Matlab R2016b

matlab2016
  • 下载破解版文件
    链接: https://pan.baidu.com/s/1i5HXTPV 密码: 4mma

  • 挂载文件

  • 用root权限安装
    在用户根目录以绝对路径运行安装脚本
    其余参看readme.txt

另外两个版本的Matlab安装,请移步
Linux Matlab2014b安装及下载
Linux Matlab2012b安装及下载

编译安装OpenCV 3.3.0(新版)

安装依赖

yum -y install cmake git pkgconfig libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel  libdc1394-devel libv4l-devel gstreamer-plugins-base-devel  gtk2-devel tbb-devel eigen3-devel
pip install numpy 
yum install python-devel libgphoto2

修复头文件
查看jasper版本

rpm -qa | grep jasper
jasper-libs-1.900.1-30.el7_3.x86_64
jasper-devel-1.900.1-30.el7_3.x86_64

如果你得到以上信息,请务必修改头文件,修复错误
2017年5月15日,centos更新了jaspe-devel包为jasper-devel.x86_64 0:1.900.1-30.el7_3(旧版本为jasper-devel-1.900.1-29.el7.x86_64),这将导致如下问题:

In file included from /usr/include/jasper/jasper.h:77:0,
                 from /home/zhangxinming/Desktop/OpenCV/opencv-3.2.0/modules/imgcodecs/src/grfmt_jpeg2000.cpp:59:
/usr/include/jasper/jas_math.h: 在函数‘bool jas_safe_size_mul(std::size_t, std::size_t, std::size_t*)’中:
/usr/include/jasper/jas_math.h:143:15: 错误:‘SIZE_MAX’在此作用域中尚未声明
  if (x && y > SIZE_MAX / x) {
               ^
/usr/include/jasper/jas_math.h: 在函数‘bool jas_safe_size_add(std::size_t, std::size_t, std::size_t*)’中:
/usr/include/jasper/jas_math.h:170:10: 错误:‘SIZE_MAX’在此作用域中尚未声明
  if (y > SIZE_MAX - x) {
          ^
[ 38%] Building CXX object modules/reg/CMakeFiles/opencv_reg.dir/src/mapperpyramid.cpp.o
在全局域:
cc1plus: 警告:无法识别的命令行选项“-Wno-unnamed-type-template-args” [默认启用]
make[2]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_jpeg2000.cpp.o] 错误 1
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
[ 38%] Building CXX object modules/reg/CMakeFiles/opencv_reg.dir/src/mapprojec.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_video.dir/src/optflowgf.cpp.o
[ 38%] Building CXX object modules/reg/CMakeFiles/opencv_reg.dir/src/mapshift.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_video.dir/src/tvl1flow.cpp.o
[ 38%] Building CXX object modules/reg/CMakeFiles/opencv_reg.dir/src/precomp.cpp.o
[ 38%] [ 38%] Building CXX object modules/video/CMakeFiles/opencv_video.dir/opencl_kernels_video.cpp.o
Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/misc/tensorflow/versions.pb.cc.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/misc/caffe/caffe.pb.cc.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/blob.cpp.o
Linking CXX shared library ../../lib/libopencv_reg.so
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/caffe/caffe_importer.cpp.o
[ 38%] Built target opencv_reg
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/caffe/caffe_io.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/caffe/layer_loaders.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/dnn.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/init.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/concat_layer.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/convolution_layer.cpp.o
[ 38%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/crop_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/detection_output_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/elementwise_layers.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/eltwise_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/flatten_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/fully_connected_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/layers_common.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/lrn_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/mvn_layer.cpp.o
Linking CXX shared library ../../lib/libopencv_video.so
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/normalize_bbox_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/op_blas.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/op_im2col.cpp.o
[ 39%] Built target opencv_video
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/permute_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/pooling_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/prior_box_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/recurrent_layers.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/reshape_layer.cpp.o
[ 39%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/shift_layer.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/slice_layer.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/softmax_layer.cpp.o
[ 40%] [ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/layers/split_layer.cpp.o
Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/tensorflow/tf_importer.cpp.o
[ 40%] [ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/tensorflow/tf_io.cpp.o
Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/torch/THDiskFile.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/torch/THFile.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/torch/THGeneral.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/src/torch/torch_importer.cpp.o
[ 40%] Building CXX object modules/dnn/CMakeFiles/opencv_dnn.dir/opencl_kernels_dnn.cpp.o
Linking CXX shared library ../../lib/libopencv_dnn.so
[ 40%] Built target opencv_dnn
Scanning dependencies of target opencv_cudaarithm
[ 40%] [ 40%] [ 40%] [ 40%] Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/core.cpp.o
Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/element_operations.cpp.o
Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/arithm.cpp.o
Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/reductions.cpp.o
Linking CXX shared library ../../lib/libopencv_cudaarithm.so
[ 40%] Built target opencv_cudaarithm
Scanning dependencies of target opencv_cudawarping
[ 40%] [ 40%] [ 41%] [ 41%] Building CXX object modules/cudawarping/CMakeFiles/opencv_cudawarping.dir/src/remap.cpp.o
Building CXX object modules/cudawarping/CMakeFiles/opencv_cudawarping.dir/src/resize.cpp.o
Building CXX object modules/cudawarping/CMakeFiles/opencv_cudawarping.dir/src/pyramids.cpp.o
Building CXX object modules/cudawarping/CMakeFiles/opencv_cudawarping.dir/src/warp.cpp.o
Linking CXX shared library ../../lib/libopencv_cudawarping.so
[ 41%] Built target opencv_cudawarping
make: *** [all] 错误 2

解决方案:
参考:
https://stackoverflow.com/questions/44038198/opencv-3-0-0-install-error-on-centos7
https://www.cpume.com/question/ffzhgong-opencv-3-0-0-install-error-on-centos7.html

vi /usr/include/jasper/jas_math.h
#在 #include  后添加
#if ! defined SIZE_MAX
#define SIZE_MAX (4294967295U)
#endif

编译安装
请一定要指定可以帆樯的代理,因为cmake过程中需要下载依赖文件,而且下载的比较多,不可能一个个的下载再放到正确的位置上。

#使用帆樯代理,请更换成自己的代理
export http_proxy=127.0.0.1:8118
export https_proxy=127.0.0.1:8118

编译

#下载相应的包
git clone -b 3.3.0 --depth 1 https://github.com/opencv/opencv.git
git clone -b 3.3.0 --depth 1 https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D BUILD_OPENCV_PYTHON2=ON ..
#使用24核并行编译,这里更改为自己电脑的核心数
make -j24
sudo make install

检查是否安装成功

#python
>>>import cv2
>>>cv2.__version__
3.3.0

Caffe搭建

参考:
http://caffe.berkeleyvision.org/install_yum.html

安装依赖

  • General dependencies
sudo yum -y install protobuf-devel leveldb-devel snappy-devel opencv-devel  hdf5-devel openblas-devel
  • Remaining dependencies, recent OS
sudo yum -y install gflags-devel glog-devel lmdb-devel
  • BLAS
#atlas 有问题,不要使用atlas
sudo yum -y install openblas-devel
  • Python (optional)
sudo yum -y install python-devel
  • 安装python依赖
for req in $(cat requirements.txt); do pip install $req; done
  • Boost库
    epel源自带的boost库版本太低,需要源码安装boost
    官网下载boost-1.55.0 http://www.boost.org/users/history/
    下载后解压
tar -jxf boost_1_55_0.tar.bz2
cd boost_1_55_0
./bootstrap.sh --with-libraries=all
./b2

大约20分钟左右,出现如下信息

The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
    /home/zhangxinming/Desktop/boost_1_55_0
The following directory should be added to linker library paths:
    /home/zhangxinming/Desktop/boost_1_55_0/stage/lib

开始安装

sudo ./b2 install

修改Makefile.config 文件

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

# uncomment to disable IO dependencies and corresponding data layers
# USE_OPENCV := 0
# USE_LEVELDB := 0
# USE_LMDB := 0

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
#   You should not set this flag if you will be reading LMDBs with any
#   possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK := 1

# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3

# To customize your choice of compiler, uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04, if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR := /usr

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
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

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := open
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
BLAS_INCLUDE := /usr/include/openblas
#BLAS_LIB := /usr/lib64/atlas

# Homebrew puts openblas in a directory that is not on the standard search path
# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib

# This is required only if you will compile the matlab interface.
# MATLAB directory should contain the mex binary in /bin.
MATLAB_DIR := /usr/local/MATLAB/R2016b
# MATLAB_DIR := /Applications/MATLAB_R2012b.app

# 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/local/include/python2.7 /usr/local/lib/python2.7/site-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
# ANACONDA_HOME := $(HOME)/anaconda
# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
        # $(ANACONDA_HOME)/include/python2.7 \
        # $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include

# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
# PYTHON_LIB := $(ANACONDA_HOME)/lib

# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include
# PYTHON_LIB += $(shell brew --prefix numpy)/lib

# Uncomment to support layers written in Python (will link against Python libs)
WITH_PYTHON_LAYER := 1

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

# If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies
# INCLUDE_DIRS += $(shell brew --prefix)/include
# LIBRARY_DIRS += $(shell brew --prefix)/lib

# NCCL acceleration switch (uncomment to build with NCCL)
# https://github.com/NVIDIA/nccl (last tested version: v1.2.3-1+cuda8.0)
# USE_NCCL := 1

# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
# USE_PKG_CONFIG := 1

# N.B. both build and distribute dirs are cleared on `make clean`
BUILD_DIR := build
DISTRIBUTE_DIR := distribute

# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
# DEBUG := 1

# The ID of the GPU that 'make runtest' will use to run unit tests.
TEST_GPUID := 0

# enable pretty build (comment to see full commands)
Q ?= @

编译

make -j32
make pycaffe
make matcaffe
make test -j24
make runtest -j24

或者使用CMake编译

mkdir build
cd build
cmake -DBLAS=open ..
make -j32
make install 

验证

cd ~/caffe-master/python
ipython
输入
import caffe
caffe.__version__

同时make runtest也必须能通过才算成功

make runtest结果

错误及解决方法

  • 错误一:
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
                 from ./include/caffe/common.hpp:19,
                 from ./include/caffe/blob.hpp:8,
                 from ./include/caffe/layers/batch_norm_layer.hpp:6,
                 from src/caffe/layers/batch_norm_layer.cpp:4:
./include/caffe/util/cudnn.hpp:8:34: 致命错误:caffe/proto/caffe.pb.h:没有那个文件或目录
 #include "caffe/proto/caffe.pb.h"
                                  ^
编译中断。
The bug is not reproducible, so it is likely a hardware or OS problem.
make: *** [.build_release/src/caffe/layers/batch_norm_layer.o] 错误 1
make: *** 正在等待未完成的任务....

解决方法:
https://github.com/NVIDIA/DIGITS/issues/105

protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
  • 错误二
[zhangxinming@localhost caffe-master]$ make pycaffe
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
**python/caffe/_caffe.cpp:10:31:** **致命错误:**numpy/arrayobject.h:没有那个文件或目录
 #include 
**                               ^**
编译中断。
make: *** [python/caffe/_caffe.so] 错误 1

提示arrayobject.h没找到,于是使用find / -name arrayobject.h是存在的,

[root@localhost caffe-master]# find / -name arrayobject.h
/usr/local/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h

判断是Makefile.config 的python的include路径出问题了
修改路径如下:

PYTHON_INCLUDE := /usr/local/include/python2.7 /usr/local/lib/python2.7/site-packages/numpy/core/include

再次进行编译即可

  • 错误三:
    在make runtest 时出现如下错误
[zhangxinming@localhost caffe-master]$ make runtest -j8
.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory
make: *** [runtest] 错误 127

解决办法:
运行find 发现是有这个库的,只是没有加入到运行库的path里面去而已

vi /etc/profile 
#添加如下内容
#Base LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
#CUDA
export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

重建缓存

source /etc/profile 
sudo ldconfig

再次运行make runtest -j8 即可

至此,caffe的编译工作完成
其他用户使用时,请一定要使用pyhotn虚拟环境,避免干扰其他用户和项目,请移步本人博客开始你的envpython之旅——传送门==Python Virtual Environments虚拟环境导引

另外你可以移步CentOS 7 搭建Tensorflow环境,快速搭建起自己的TensorFlow环境,记得要的虚拟环境下进行哟~

你可能感兴趣的:(CentOS 7.3 Caffe搭建全过程记录 2020-08-20 重发布)