Ubuntu16.04安装配置GPU版本Caffe经验总结

时间:2021-06-05 06:26:47

环境前提:

系统:ubuntu16.04

GPU: nvidia GeForce GTX 960

CUDA: 8.0

下面的安装步骤之前需要配置GPU的驱动和安装CUDA,这两个步骤在另一篇博文已经总结过,参见此链接

1. 安装配置cuDNN

官网上也有的介绍,参见cuDNN Installation Guide

此处选用的是dep文件安装,根据自己的配置从下载地址选择下载包。其它环境或是文件类型在上面的链接也可以找到安装方式。

本文选用以下三个:

cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb)

cuDNN v7.0.5 Developer Library for Ubuntu16.04 (Deb)

cuDNN v7.0.5 Code Samples and User Guide for Ubuntu16.04 (Deb)

最后一个包内存放了验证代码。

进入安装包所在路径,执行以下代码即可安装完毕。将之前下载的三个安装包名依次替换到后面。

$ sudo dpkg -i libcudnn7_7.0.5.15-1+cuda8.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda8.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.0.5.15-1+cuda8.0_amd64.deb

运行以下代码验证安装。

$ cp -r /usr/src/cudnn_samples_v7/ $HOME
$ cd $HOME/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN
最后出现Test passed!则安装成功。

2. 安装OpenCV

安装依赖库,很多经验都像集成了血和泪一样列举了很多依赖项,下面的依赖项有可能不是全部必须的,但是为了防止后续出错,都安装了。

$ sudo apt-get install libprotobuf-dev$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libleveldb-dev
$ sudo apt-get install libsnappy-dev
$ sudo apt-get install libopencv-dev
$ sudo apt-get install libhdf5-serial-dev
$ sudo apt-get install protobuf-compiler
$ sudo apt-get install --no-install-recommends
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libgflags-dev
$ sudo apt-get install libgoogle-glog-dev
$ sudo apt-get install liblmdb-dev

$ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev  libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev  
$ sudo apt-get install cmake
更新
$ sudo apt-get update$ sudo apt-get upgrade
OpenCV 下载驿站(百度云盘下载,同步更新) - CSDN博客
官网Linus的版本不知道为什么不见了,可到上面的链接下载所需的安装包。
进入caffe所在的文件夹,注意cmake后面后个点,它们之间有空格。
$ cd /home/karin/caffe$ cmake .
结束之后make,这个过程有点久
$ sudo make
或是以四线程或者八线程的方式加速,用以下其中一句替换上面的语句
$ sudo make -j4$ sudo make -j8
完成之后
$ sudo make install
至此编译过程结束
下面对环境进行配置
配置OpenCV的库路径

$ sudo gedit /etc/ld.so.conf.d/opencv.conf  
打开可能是空白,加入下面的路径
/usr/local/lib  
保存退出,执行下面语句使配置生效
$ sudo ldconfig
打开bash.bashrc文件
$ sudo gedit /etc/bash.bashrc  
末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig       export PKG_CONFIG_PATH 
保存退出,之后
$ source ~/.bashrc
更新数据库
$ sudo updatedb
配置完成

测试
创建opencv.cpp,同一文件夹下放置一张test.jpg

#include <iostream>  #include <opencv2/opencv.hpp>  

using namespace std;
using namespace cv;

int main()
{
Mat srcImage = imread("test.jpg");
imshow("srcIMage",srcImage);

waitKey(0);

return 0;
}
编译:

$ g++ `pkg-config opencv --cflags` opencv.cpp  -o opencv `pkg-config opencv --libs`   
运行:

./opencv  

正确的结果应该是显示图片。

过程中出现的错误:
[OpenCV3.*与CUDA8.0不兼容],解决方案如下:
修改opencv目录下opencv/modules/cudalegacy/src/graphcuts.cpp

if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
修改为
if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000)

[找不到一个库]
有一个库无法下载,暂时来看并不影响正常使用,去到库调用文件将其调用删除。
/usr/local/lib/pkgconfig
找到该库添加语句,删除。

3. 配置Caffe

Caffe下载地址
首先下载Caffe,然后找到下载的caffe-master.zip,解压到/home,重新命名为caffe。
以下大部分摘取自超详细配置Caffe(gpu版本+ubuntu16.04)考虑各种问题 - CSDN博客。里面有其它的配置情况可供参考。
将Makefile.config.example的内容复制到Makefile.config

$ sudo cp Makefile.config.example Makefile.config 
打开配置文件
$ sudo gedit Makefile.config
a.若使用cudnn,则
将#USE_CUDNN := 1
修改成:
USE_CUDNN := 1
b.若使用的opencv版本是3的,则
将#OPENCV_VERSION := 3
修改为:
OPENCV_VERSION := 3
c.若要使用python来编写layer,则
将 #WITH_PYTHON_LAYER := 1
修改为 WITH_PYTHON_LAYER := 1
d.重要的一项 :
将 # Whatever else you find you need goes here. 下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/includeLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serialLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial 
e. 将:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

替换为:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

修改修改makefile文件
a.
将(大概409行):
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

b.
将(大概181行):

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
  • 1
  • 2
  • 3

编译与测试

$ make all -j16
$ make test -j16
$ make runtest -j16
Ubuntu16.04安装配置GPU版本Caffe经验总结
MNIST数据集测试
配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
1.将终端定位到Caffe根目录
cd ~/caffe
2.下载MNIST数据库并解压缩
./data/mnist/get_mnist.sh
3.将其转换成Lmdb数据库格式
./examples/mnist/create_mnist.sh
4.训练网络
./examples/mnist/train_lenet.sh
训练的时候可以看到损失与精度数值,如下图:
Ubuntu16.04安装配置GPU版本Caffe经验总结
至此全部内容完毕。

参考链接:

超详细配置Caffe(gpu版本+ubuntu16.04)考虑各种问题 - CSDN博客
Ubuntu16.04 安装配置GPU版本Caffe - CSDN博客
Ubuntu16.04 14.04安装配置Caffe(GPU版) - --红尘-- - 博客园
Ubuntu16.04.1安装Caffe(GPU) - 惜祯 - 博客园
OpenCV 下载驿站(百度云盘下载,同步更新) - CSDN博客