Ubuntu16.04+CUDA8.0+Cudnn5.1+Opencv3.2.0+Caffe框架的搭建
Caffe全称是Convolutional Architecture for Fast Feature Embedding(卷积神经网络框架),是一个清晰、高效的深度学习框架。它是开源的,核心语言是C++,支持命令行、Python和Matlab接口,既可以在CPU上运行也可以在GPU上运行。
本文实现在Ubuntu16.04下深度学习框架caffe + cuda8.0 + cudnn5.1 + opencv3.2.0的搭建,并对搭建过程中的诸多问题进行总结。
1 安装nvidia驱动
首先注意:UEFI引导的电脑要在BIOS中关闭Secure boot,以避免安装驱动中各种神奇的问题。
这里介绍两种安装n卡驱动的方式,runfile方式及apt方式。
据说如果n卡驱动选择了apt-get方式安装,在后面的cuda模块安装时会有大坑,所以建议使用runfile方式进行安装,如果实在有问题(比如我的情况),再尝试后者。
1.1 runfile方式
禁用集成的nouveau驱动
Ubuntu系统集成的显卡驱动程序是nouveau,它是第三方为NVIDIA开发的开源驱动,我们通过将其添加至黑名单的方法对其屏蔽禁用。
利用命令创建blacklist-nouveau.conf
1 | sudo apt-get install vim |
输入i
切换到insert模式,添加如下内容:
1 | blacklist nouveau |
输入Esc
退出insert模式,再输入:wq
保存退出。
更新文件
1 | sudo update-initramfs -u |
重启系统,确认nouveau已被屏蔽
1 | lsmod | grep nouveau |
终端没有输出即已屏蔽nouveau。
下载官方驱动程序
首先去官网上查找适合你GPU的驱动(https://www.geforce.cn/drivers)。
在这个页面输入自己的显卡型号可以搜到历史版本的驱动,由于后面要装的cuda8.0适配的驱动型号是375.26,所以我们找到375.26版本的进行下载。
下载得到NVIDIA-Linux-x86_64-375.26.run
文件。
可以将其移动到你想保存的地方,默认保存位置是/home/XXXX/Downloads
。
安装驱动
按Ctrl + Alt + F1切换到tty1,登录。接下来的安装都在这里进行。
关闭图形界面X-window
1 | sudo service lightdm stop |
删除残留NVIDIA驱动文件
1 | sudo apt-get remove --purge nvidia-* |
切换到程序目录下并修改权限
1 | cd /home/XXXX/Downloads #这里切换到你的驱动程序的目录 |
安装,注意后面的参数
1 | sudo sh ./NVIDIA-Linux-x86_64-375.26.run –no-opengl-files |
安装过程除了开头协议需要选择accept
,其它按照默认选项即可。
测试是否成功
安装完成后重启系统
1 | reboot |
验证是否安装成功
1 | nvidia-smi #出现GPU驱动列表信息即成功 |
也可以查看图形界面信息
1 | nvidia-settings |
UEFI引导系统如果没关secure boot这里可能无法正常显示(但我在Ubuntu17.04下测试显示是正常的),而且会导致后面cuda安装出问题,这里注意一下。
1.2 apt-get方式
这个方式似乎只能安装到最新的驱动,我这里即使选择了旧版的也安装上了最新的。
禁用集成的nouveau驱动(同上)
添加三方ppa源,更新
1 | sudo add-apt-repository ppa:graphics-drivers/ppa |
新安装的ubuntu16.04在进行 sudo apt-get update
时可能会出现下面的错误:
1 | Reading package lists... Done |
解决方案:
1 | sudo pkill -KILL appstreamcli |
查找驱动版本并安装
1 | sudo apt-cache search nvidia-* #可以看到各个驱动版本 |
测试是否成功
1 | nvidia-smi #出现GPU驱动列表信息即成功 |
也可以查看图形界面信息
1 | nvidia-settings |
总结:使用较新的n卡驱动是可以安装cuda的,但是在测试cuda的samples时会发现,许多sample会由于nvidia显卡驱动版本的问题出现各种错误,这种情况需要自己改写这些文件的相关源码,这无疑是个艰难的工程。所以,应尽量保证驱动的版本与cuda相一致。
2 安装CUDA
cuda是nvidia的编程语言平台,想使用GPU就必须要使用cuda。
虽然cuda9.X已经发布,但很多类库还不支持,而且最关键的是caffe要求的cuda版本是8.0,所以这里安装的是cuda8.0。
到官网下载cuda8.0(https://developer.nvidia.com/cuda-80-ga2-download-archive )。
按照自己的平台选择runfile(local)
格式。
下载得到cuda_8.0.61_375.26_linux.run
。
终端切换到该目录下,执行如下语句安装
1 | sudo chmod 777 cuda_8.0.61_375.26_linux.run #修改执行权限 |
执行后会有一系列提示让你确认,注意,有个让你选择是否安装nvidia375驱动时,一定要选择否,因为这个驱动是会安装opengl的,有可能会导致无法进入桌面循环登录。
据说这里也可以用-no-opengl-files
命令避免该问题,但我不知道这命令该用到哪,所以并没有尝试。
其余的选项都直接默认或者选择是即可(我这里只把samples的目录改成了cuda的默认安装位置,不建议修改cuda默认安装位置,以免给自己挖坑)。
安装成功后终端会输出如下信息:
1 | =========== |
安装完毕后,再声明一下环境变量,并将其写入到 ~/.bashrc 的尾部:
1 | sudo vim ~/.bashrc #编辑 |
然后设置环境变量和动态链接库:
1 | sudo vim /etc/profile |
测试cuda的samples
1 | cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery #注意自己的samples目录装在了哪 |
如果显示的是如下图的一些关于GPU的信息,则说明安装成功了。
3 使用cudnn
cuDNN(CUDA Deep Neural Network)相比标准的cuda,它在一些常用的神经网络操作上进行了性能的优化,比如卷积,pooling,归一化,以及激活层等等。
cudnn目前(2018.1)已更新到了v7.0.5,针对cuda8.0有v5.1和v6.0两个版本可选,这里选择v5.1版本下载。
首先去官网(https://developer.nvidia.com/rdp/cudnn-download )下载cudnn,下载的时候需要注册账号,做一个问卷调查。
下载完cudnn5.1之后进行解压,cd进入该目录,复制文件:
1 | cd cuda/ #进入该解压目录 |
重新生成软链接
1 | cd /usr/local/cuda/lib64/ |
这里可以先ls
看一下自己的libcudnn.so.*.*.*
具体版本号
1 | sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件 |
4 安装opencv
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库。
在深度学习框架中提供图像处理等功能,目前已更新到了3.4.0版本,caffe对opencv版本无要求,这里选择了3.2.0版本安装。
首先去官网(https://opencv.org/releases.html )下载opencv,选择Sources
即可。
首先安装Ubuntu系统需要的依赖项:
1 | sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip |
这里注意一下,如果中途有问题中断,终端有提示update
的话,则输入sudo apt-get update
,之后再重复执行即可。反复几次,直到出现下图提示信息即安装完毕。
然后安装opencv需要的一些依赖项:
1 | sudo apt-get install build-essential cmake git |
这里同样可能会有和上面相同的问题,方法同上面一致。
解压之前下载好的opencv到你喜欢的位置,cd
到该文件夹下,然后:
1 | mkdir build #新建一个build文件夹,编译的工程都在这个文件夹里 |
cmake成功后,会出现如下结果,提示配置和生成成功:
1 | -- Configuring done |
然后使用make命令编译即可:
1 | make -j4 #-j后数字设置为cpu核数时可以加快编译速度 |
这里注意一下,在编译opencv时,ffmpeg或ippicv等第三方库可能会由于众所周知的原因下载不成功,一般解决方法是自己到github上下载,之后解压到相关路径。
但这种方式比较麻烦,容易出错,不推荐。
这里推荐挂梯子来下载。访问蓝灯github页面(https://github.com/getlantern/lantern ),下载ubuntu平台的安装包。
之后使用命令安装即可
1 | sudo dpkg -i lantern-installer-64-bit.deb |
使用时在终端输入lantern
,不用的时候Ctrl + C
即可。
另外一个可能出现的问题:
1 | fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory #include "LAPACKE_H_PATH-NOTFOUND/lapacke.h" |
解决方案:
1 | sudo apt-get install liblapacke-dev checkinstall |
opencv编译成功后进行安装,并有将设置写入到系统中:
1 | sudo make install |
5 安装caffe
Caffe (卷积神经网络框架)是一种应用广泛的深度学习框架,caffe团队在17年初推出了caffe2框架,号称对mobile端有更好的支持,但是目前还是处于初级阶段,这里选择caffe安装配置。
caffe官方网站(http://caffe.berkeleyvision.org/ )中也给出了全部安装依赖项。
安装依赖
1 | sudo apt-get update |
将终端cd
到你要安装caffe的位置,执行如下指令,clone caffe项目。
1 | git clone https://github.com/BVLC/caffe.git #从github上git caffe |
安装caffe项目中python相关的依赖库
1 | cat python/requirements.txt | xargs -L 1 sudo pip install |
增加符号链接
1 | sudo ln -s /usr/include/python2.7/ /usr/local/include/python2.7 |
修改配置文件
1 | sudo cp Makefile.config.example Makefile.config |
编辑Makefile.config文件
这里给出我的加了注释的Makefile.config文件供参考:
1 | ## Refer to http://caffe.berkeleyvision.org/installation.html |
修改相关文件避免gcc版本问题
- 修改makefile文件
1 | #181行位置 |
- 修改/usr/local/cuda/include/host_config.h,注释掉第119行
1 | #119行位置 |
编译caffe
在caffe目录下
1 | make all -j4 |
编译通过则说明安装正确。
使用MNIST手写数据集测试
mnist是一个手写数字库,训练样本为60000张,测试样本为10000张,每个样本为28x28大小的黑白图片,手写数字为0-9,因此分为10类。
1 | cd caffe #你的caffe安装目录 |
gpu+cuda情况下几分钟即可完成训练,训练完成后会生成caffemodel文件,这种训练好的模型也可以用在其它平台的caffe网络中。
链接python与caffe
1 | gedit ~/.bashrc #打开 |
测试是否链接成功
1 | python |
出现版本信息即成功。