您的位置:首页 > Web前端

Caffe在Ubuntu 16.04的安装配置

2017-04-08 17:07 399 查看

Caffe在Ubuntu 16.04的安装配置

安装配置网络搜索一大把,可是来回折腾好多回,记录整理过程,方便自己和他人:

独立显卡的Nvidia驱动安装

Opencv安装

依赖库安装

Caffe下载,配置与编译,测试

环境准备:安装编译依赖库

-协议、数据、opencv库等:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler


-Boost库
sudo apt-get install --no-install-recommends libboost-all-dev


- ATLAS库
sudo apt-get install libatlas-base-dev
(科学计算库BLAS(Basic Linear Algebra Subprograms 基本线性代数子程序))

- 日志、标签等库
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev


NVIDIA相关配置

(1)安装NVIDIA驱动

首先去官网(http://www.nvidia.com/Download/index.aspx?lang=en-us)查看适合自己显卡的驱动:



图1.显卡驱动查询

选择符合操作系统、显卡版本下载,本例采用run文件安装方式,如NVIDIA-Linux-x86_64-378.13.run.

因为是独显,需要重启ubuntu,高级模式里选recovery mode,选择network等选项后,选root …shell,进入命令行界面。

运行

sh ./NVIDIA-Linux-x86_64-378.13.run


然后重启系统。

终端执行命令 nvidia-smi ,若列出了GPU的信息列表则表示驱动安装成功。

(2)安装CUDA

CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。

首先下载CUDA

首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:



接着安装CUDA

下载完成后执行以下命令:

sudo sh cuda_8.0.27_linux.run


注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia361驱动时,一定要选择否:

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 361.62?

因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。

然后配置环境变量

打开~/.bashrc文件:

sudo vim ~/.bashrc


将以下内容写入到~/.bashrc尾部:

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}


测试CUDA的sammples

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuerymakesudo ./deviceQuery


如果现实一些关于GPU的信息,则说明安装成功。

(3)配置cuDNN

cuDNN是GPU加速计算深层神经网络的库。

首先去官网(https://developer.nvidia.com/rdp/cudnn-download)下载cuDNN,可能需要注册一个账号才能下载。由于显卡是GTX1080ti,所以下载版本号如下:cudnn-8.0-linux-x64-v6.0.tgz

下载cuDNN6.0之后进行解压,cd进入cuDNN6.0解压之后的include目录,在命令行进行如下操作:

sudo cp cudnn.h /usr/local/cuda/include/    #复制头文件


再将cd进入lib64目录下的动态文件进行复制和链接:

sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库

cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.5    #删除原有动态文件

sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5  #生成软衔接

sudo ln -s libcudnn.so.5 libcudnn.so      #生成软链接


安装opencv

从官网(http://opencv.org/downloads.html)下载Opencv,并将其解压到你要安装的位置。见前面的相关博文。

配置Caffe

下载

从官网下载caffe代码:

sudo apt-get install git

git clone https://github.com/BVLC/caffe.git[/code] 

配置编译选项

(1)复制并修改Makefile.config:

sudo gedit Makefile.config #打开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/include

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib


修改为:

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 /usr/lib/x86_64-linux-gnu/hdf5/serial


这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.

(2)修改makefile文件

打开makefile文件,做如下修改:

将:

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)


替换为:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)


(3)如果需要编辑/usr/local/cuda/include/host_config.h

将其中的第115行注释掉:



#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!


改为

//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!


编译

make all -j8 #-j根据自己电脑配置决定

编译过程中可能会出现如下错误:

错误内容1:

“fatal error: hdf5.h: 没有那个文件或目录”

解决办法:

step1:在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。

将:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include


替换为:

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


stept2:在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。

将:

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


错误内容2:

"libcudart.so.8.0 cannot open shared object file: No such file or directory"


解决办法是将一些文件复制到/usr/local/lib文件夹下:

#注意自己CUDA的版本号!

sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig

sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig

sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig


测试

测试C接口

sudo make runtest

如果成功,则编译配置完毕。

测试Matlab接口

sudo make mattest

如果成功,则显示:

总计:

7 Passed, 0 Failed, 0 Incomplete.

0.80043 秒测试时间。

错误1:
MATLAB/R2015b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6: version
GLIBCXX_3.4.20’ not found (required by /home/caffe/matlab/+caffe/private/caffe_.mexa64)
原因:说明cc的动态库还是旧版本的,出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。 这里需要在matlab启动前指定这个lib。

strings /home/MATLAB/R2015b/sys/os/glnxa64/libstdc++.so.6 | grep GLIBC

解决办法:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6`

错误2:
Invalid MEX-file /home/caffe/matlab/+caffe/private/caffe_.mexa64:

/home/caffe/matlab/+caffe/private/caffe_.mexa64: undefined symbol:

_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE


原因是Matlab自带的opencv库版本2.4.9和Ubuntu的编译的opencv库版本2.4.13之间发生了冲突,符号表对不上,一言不和使用Matlab的自带库。Caffe在编译的时候需要指定OpenCV的版本和位置,这个时候Caffe的库是链接到系统安装的OpenCV库的;使用make matcaffe命令编译Caffe的MATLAB接口的时候却是链接到MATLAB自带的OpenCV库。

解决办法1预加载caffe编译库:

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4:/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libfreetype.so.6

解决办法2(推荐):

解决办法是首先将MATLAB自带的OpenCV中的三个软符号链接文件备份,其次删除这三个软符号链接文件,再次重新建立这三个软符号链接文件:

/usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4 -> /usr/local/lib/libopencv_core.so.2.4.9

/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4 -> /usr/local/lib/libopencv_highgui.so.2.4.9

/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4 -> /usr/local/lib/libopencv_imgproc.so.2.4.13


sudo make pytest

成功则显示如下:

Ran 47 tests in 17.507s

OK

错误1:ImportError: No module named google.protobuf.internal

原因:python缺少google.protobuf包,但需要安装系统一致的。先查看系统版本:

protoc --version

libprotoc 2.6.1

conda install protobuf=2.6.1 --no-update-dependencies


错误2:ImportError: No module named pydot

解决办法:

conda install pydot=1.0.28


错误3:InvocationException: GraphViz’s executables not found

解决办法:

conda install GraphViz


错误4:pydot.InvocationException: Program terminated with status: 1. stderr follows: Warning: Could not load “/home/orange/studio/anaconda2/lib/graphviz/libgvplugin_pango.so.6” - file not found

原因:然后又会有Graphviz中找不到libgvplugin_pango.so.6的问题,根据官网Issue的解答,应该是少了依赖库。用命令检查:

ldd /home/anaconda2/lib/graphviz/libgvplugin_pango.so.6 | grep not


缺少:libiconv.so.2, libpcre.so.1 => not found

conda install libiconv

conda install pcre

数据训练

字符识别的训练样例

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


训练的时候可以看到损失与精度数值。

End
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息