深度学习3Caffe框架搭建
Posted 一点一的N次方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习3Caffe框架搭建相关的知识,希望对你有一定的参考价值。
上周为了中兴调参大赛又倒腾了另一个深度学习框架——Caffe。
Caffe的环境搭建稍稍比PyTorch要麻烦一些,不过万幸的是,倒也没踩什么坑。看看别人安装的血泪史,觉得自己还是很幸运的!现在就总结一下Caffe的配置。
1 cuDNN配置
在配置cuDNNN之前,还需要安装NVIDIA显卡驱动和CUDA Toolkit,前面安装PyTorch的时候已经记录过,这就不再赘述了,具体参考。
装好NVIDIA显卡驱动和CUDA Toolkit之后,输入命令
~$ nvidia-smi
会显示显卡的具体信息,如下图
图1 显卡驱动版本
然后输入命令
~$ nvcc -V
会显示CUDA Toolkit的版本信息,如下图
图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 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
图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,编译过程如下图
图5 Caffe编译过程
我编译的时候报错了,关于"compute_20"的错误
图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
这里我又有报错,如图
图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
然后继续上面的编译,没问题了。
图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 $req; done
安装完成以后,再次回到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’,没有报错就是编译成功了。
图9 Python接口成功import
至此,Caffe的安装就大功告成啦!
4 MNIST数据集测试
配置完Caffe之后,我们可以利用官方给的demo在MNIST手写数据集上测试一下。
进入Caffe根目录下
~$ cd ~/caffe
下载MNIST数据集并解压
~$ ./data/mnist/get_mnist.sh
过程如下图所示
图10 下载MNIST数据集
将数据集转换为LMDB文件
~$ ./examples/mnist/create_mnist.sh
过程如下图所示
图11 数据集转换LMDB
然后开始训练网络
~$ ./examples/mnist/train_lenet.sh
过程如下图所示
图12 用MNIST数据集训练LeNet(1)
图12 用MNIST数据集训练LeNet(2)
以上就是编译安装Caffe深度学习框架的全过程,恭喜成功如坑!
以上是关于深度学习3Caffe框架搭建的主要内容,如果未能解决你的问题,请参考以下文章