深度学习3Caffe框架搭建

Posted 一点一的N次方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习3Caffe框架搭建相关的知识,希望对你有一定的参考价值。


上周为了中兴调参大赛又倒腾了另一个深度学习框架——Caffe。


Caffe的环境搭建稍稍比PyTorch要麻烦一些,不过万幸的是,倒也没踩什么坑。看看别人安装的血泪史,觉得自己还是很幸运的!现在就总结一下Caffe的配置。


1 cuDNN配置

在配置cuDNNN之前,还需要安装NVIDIA显卡驱动和CUDA Toolkit,前面安装PyTorch的时候已经记录过,这就不再赘述了,具体参考。


装好NVIDIA显卡驱动和CUDA Toolkit之后,输入命令


~$ nvidia-smi


会显示显卡的具体信息,如下图


【深度学习3】Caffe框架搭建

图1  显卡驱动版本


然后输入命令


~$ nvcc -V


会显示CUDA Toolkit的版本信息,如下图


【深度学习3】Caffe框架搭建

图2  CUDA Toolkit版本


装好NVIDIA显卡驱动和CUDA Toolkit之后,接着下载cuDNN,先前安装PyTorch的时候把它给忘了。拿它是干嘛用的呢?NVIDIA官网是这么说的


The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers.


也就是说,装了cuDNN训练网络就会溜得飞起!


首先,去NVIDIA官网下载cuDNN库(需要注册一个帐号),选好对应自己系统CUDA的版本,例如我安装的CUDA是9.0的就选for CUDA 9.0下的for Linux,如下图


【深度学习3】Caffe框架搭建

图3  cuDNN版本选取


然后在下载好的路径下进行解压


~$ sudo tar -zxvf ./cudnn-<version>-linux-x64-<version>.tgz


进入cuDNN解压后的include目录,输入如下命令


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


再进入lib64目录,将里面的动态文件复制到CUDA的路径下,再创建链接,其中软链接的具体版本需要到对应的路径下查看


~$ cd ..
~$ cd lib64
~$ sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
~$ cd /usr/local/cuda/lib64/
~$ sudo rm -rf libcudnn.so libcudnn.so.<version>    #删除原有动态文件
~$ sudo ln -s libcudnn.so.<version> libcudnn.so.<version>    #生成软链接
~$ sudo ln -s libcudnn.so.<version> libcudnn.so    #生成软链接


输入命令,查看一下cuDNN的版本


~$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2


终端显示cuDNN版本,如下图版本为7.5.0


【深度学习3】Caffe框架搭建

图4  cuDNN版本查看


这样,cuDNN就搞定了!这可是其中最简单的操作了。


2 OpenCV的安装

OpenCV3.4.5是以前就已经编译安装好的,时间久远没有记录,也不太记得住,等往后再补充吧!


3 Caffe的安装

通过编译源码安装Caffe,首先从GitHub上下载Caffe源代码


~$ git clone https://github.com/BVLC/caffe


进入Caffe主目录


~$ cd caffe


里面有一个配置文件的实例Makefile.config.example,因为配置文件后缀应为.config,所以先将该配置文件复制成Makefile.config


~$ sudo cp Makefile.config.example Makefile.config


接着打开该配置文件,并修改里面设置,这里一般都要用sudo,如果不用的话只能打开只读模式,无法进行修改并保存


~$ sudo gedit Makefile.config


下面4项就根据个人的情况选择性修改


1)如果使用cuDNN的话(当然如果按照前面的安装,那这一项得改),则找到这两行


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


把第二行的注释符号#去掉,改为


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


2)如果使用OpenCV的版本是3的话,则找到这两行


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


把第二行的注释符号#去掉,改为


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


3)如果使用Python编写Layer的话,则找到这两行


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


把第二行的注释符号#去掉,改为


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


4)这一项很重要,找到下面这三行


# 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


上面的修改完成后,保存退出。接着修改Makefile文件


~$ sudo gedit Makefile


用Ctrl+F,输出关键词NVCCFLAGS,找到下面这一行,不然一行一行找会瞎的


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


将其改为


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


网上有博客提到这一步,修改下面文件


~$ sudo gedit /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!


我配置的时候发现这个文件里啥也没有,就没有修改,接下来的编译也没有任何报错!!不懂,玄学。


好了,接下来就是编译caffe了


~$ sudo make -jX


这里的X根据电脑CPU的核数进行修改,我的电脑是4核CPU,所以就是-j4,编译过程如下图


【深度学习3】Caffe框架搭建

图5  Caffe编译过程


我编译的时候报错了,关于"compute_20"的错误


【深度学习3】Caffe框架搭建

图6  Caffe编译报错"compute_20"


度娘找到了方法,如果编译时出现这样的报错,就在Makefile文件中找到这几行


# 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.
For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.


可以看到,如果CUDA版本高于9.0,将带有*_20和*_21这两个数字的行注释掉或者直接删除就可以了。然后继续上面的编译。


接着,编译test


~$ sudo make test -jX


然后编译runtest


~$ sudo make runtest -jX


这里我又有报错,如图


【深度学习3】Caffe框架搭建

图7  Caffe编译runtest报错


继续度娘找到了方法,输入以下命令


~$ sudo cp /usr/local/cuda-<version>/lib64/libcudart.so.<version> /usr/local/lib/libcudart.so.<version> && sudo ldconfig
~$ sudo cp /usr/local/cuda-<version>/lib64/libcublas.so.<version> /usr/local/lib/libcublas.so.<version> && sudo ldconfig
~$ sudo cp /usr/local/cuda-<version>/lib64/libcurand.so.<version> /usr/local/lib/libcurand.so.<version> && sudo ldconfig


然后继续上面的编译,没问题了。


【深度学习3】Caffe框架搭建

图8  Caffe编译runtest


最后,就是Caffe的Python接口pycaffe的编译。


在Caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了安装pycaffe需要的依赖库,我们按照这个清单安装就可以了。


在安装scipy库的时候,需要fortran编译器(gfortran),如果没有这个编译器就会报错。首先回到caffe的根目录,然后执行安装代码


~$ cd ~/caffe
~$ sudo apt-get install gfortran
~$ cd ./python
~$ for req in $(cat requirements.txt); do pip install $reqdone


安装完成以后,再次回到Caffe根目录,输入命令安装依赖库


~$ cd ..
~$ sudo pip install -r python/requirements.txt


接着,编译pycaffe


~$ sudo make pycaffe -jX


编译完成后,修改环境变量


~$ sudo gedit ~/.bashrc


将如下配置语句添加到文件最后一行


export PYTHONPATH=/home/caffe/python:$PYTHONPATH


保存退出后,更新环境变量


~$ source ~/.bashrc


最后,进入Python2,输入’import caffe’,没有报错就是编译成功了。


【深度学习3】Caffe框架搭建

图9  Python接口成功import


至此,Caffe的安装就大功告成啦!


4 MNIST数据集测试

配置完Caffe之后,我们可以利用官方给的demo在MNIST手写数据集上测试一下。


进入Caffe根目录下


~$ cd ~/caffe


下载MNIST数据集并解压


~$ ./data/mnist/get_mnist.sh


过程如下图所示


【深度学习3】Caffe框架搭建

图10  下载MNIST数据集


将数据集转换为LMDB文件


~$ ./examples/mnist/create_mnist.sh


过程如下图所示


【深度学习3】Caffe框架搭建

图11  数据集转换LMDB


然后开始训练网络


~$ ./examples/mnist/train_lenet.sh


过程如下图所示


图12  用MNIST数据集训练LeNet(1)


图12  用MNIST数据集训练LeNet(2)


以上就是编译安装Caffe深度学习框架的全过程,恭喜成功如坑!

以上是关于深度学习3Caffe框架搭建的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式学深度学习:1Pytorch框架搭建

Ubuntu 搭建深度学习框架 keras

深度学习的代码框架

详解神经网络 | 深度学习框架是如何搭建的

李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建

深度学习7日入门-百度PaddlePaddle框架学习小结