本文主要笔记自己在ubuntu 14.04.4 LTS版本系统上搭建开源深度学习[Deep Learning]框架: Caffe的详细过程。其中主要包含了Nvidia CUDA 7.5、opencv 3.0、cuDNN的安装配置过程及所遇问题的解决方案。
安装的过程中遇到了很多问题,感谢开源社区、感谢Github大神们的分享,学会分享就是很大的善良。
¶情况说明
在搭建该框架前,本系统已经使用Ubuntu自带的"附件驱动"安装了开源驱动,看过网上的很多教程之后,还是毅然决然地卸载这些开源驱动,换回了自带默认的"Nouveau Display Driver"驱动以供基本显示使用(注意:此时安装的Nvidia推荐驱动还没有完全卸载,即尚未安装GPU)。
这些说明很重要!由于大神的通力劳作,使得现在按照官网安装最新版的Caffe,变得很简单了,下面我们开始一步步的安装吧。
¶Caffe 安装
根据我们前面的情况说明,我们现在机器上没有GPU,按照官网的Caffe官网安装教程,我们先一步步地进行,之后安装完GPU(CUDA)后再重新编译即可,不用担心。
(1). 安装依赖库(一)
1 | $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler |
(2). 安装BLAS
也可以安装OpenBLAS或者MKL,以加速CPU性能(有GPU的童鞋可以忽略),这里我按照官网装了BLAS,有兴趣的童鞋可以自己研究另外两种,只需在最后编译caffe的时候修改一下配置文件即可。
1 | $ sudo apt-get install libatlas-base-dev |
(3). Python安装
Ubuntu 14.04 自带Python 2.7 ,无需自行安装。可以自测:$ python
,进入python环境后会有版本提示;如果未出现请使用如下命令进行安装:
1 | $ sudo apt-get install python |
(4). Opencv3.0安装
安装方法详见: ubuntu14.04 LTS系统中Opencv 3.0开发环境的搭建 ,Opencv必须安装,且版本需要大于2.4。—[来自官网说明]
(5). 安装依赖库(二)
1 | $ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev |
(6). Caffe下载
使用git进行下载,直接从github上下载最新版本,下载前切换至home目录。注:git的使用方法可参看:我的vim配置(.vimrc:git+github管理) ,这篇文章内容进行安装配置。clone后在home中便可以找到Caffe的下载目录了。
1 | $ cd |
(7). 编译Caffe前准备
-
修改Makefile文件,最新版的Caffe已经帮我们修改好了,可以跳过;如果使用以前的版本则仍需要修改,这个可以自行Google。
-
修改caffe/examples/cpp_classification/classification.cpp文件,加入:
1 |
(8). 编译Caffe
1 | $ cd ~/caffe |
¶Nvidia显卡驱动及Cuda 7.5 的安装
如果你的机器还没有装GPU,请直接忽略这一步和cuDNN安装
(1). 验证你的gpu支持是否支持Cuda
打开支持Cuda运算的Gpu列表,只要你的GPU在里面找得到就没问题。
(2). 查看当前使用显卡
在终端输入以下命令,确认当前使用的是独立显卡,如果使用的是集显,则需要在开机时进入BIOS关闭集显。
1 | $ lspci | grep -i nvidia |
(3). 确认你的系统是X86架构,可通过下面的命令查询
1 | $ uname -m && cat /etc/*release # 显示X86_64和系统信息即可 |
(4). 安装gcc
Ubuntu 14.04已经自带gcc 4.8.5,无需自行下载,检查gcc版本可通过如下方法:
1 | $ gcc --version |
如果发现还没安装gcc,可以执行:$ sudo apt-get install gcc-版本号
(5). 下载Cuda
Cuda可以直接到Nvidia官网下载,下面官网的下载地址,有两种安装方式(.run 和 .deb),这里只介绍后者,因为比较简单易行。 这里选择下载信息如下图:
这里给出我的百度云盘下载地址: 链接:http://pan.baidu.com/s/1c7nR9G 密码:sp7z
(6). 验证Cuda安装包
1 | $ md5sum 你的filename |
如果下载没出错,那得到的MD5序列号和上图中是一致的,否则只能重新下载。
(7). 卸载旧版本Nvidia
根据官网介绍,之前安装的版本都会有冲突的嫌疑。卸载命令:
1 | $ sudo apt-get --purge remove nvidia* |
(8). 安装Cuda
cd切换至cuda安装包所在的目录,执行以下命令:
1 | $ sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb |
(9). 添加环境变量
1 | $ sudo vim /etc/profile # 在末尾添加(注意自己的Cuda版本): |
(10). 安装例程
例程本来在/usr/local/cuda-7.5/samples
路径下,但不可写,使用如下命令进行复制:
1 | $ cuda-install-samples-7.5.sh ~/cuda |
(11). 查看GPU驱动版本、Cuda版本:
正常安装的话,会出现版本信息,如果没出现说明安装出错,官网教程说的很清楚。
1 | $ cat /proc/driver/nvidia/version |
(12). 编译例程
cd进NVIDIA_CUDA-7.5_Samples中make:
1 | $ cd ~/cuda/NVIDIA_CUDA-7.5_Samples |
编译结果在 ~/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release中
(13). 执行编译结果,确认安装配置
1 | $ cd |
顺利的话如下图所示,若出错可参考此处
(14). bandwidthTest确认
1 | $ ./cuda/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release/bandwidthTest |
确认结果如下图所示则安装成功 :
¶安装cuDNN
(1). 下载cuDNN
可以从英伟达官网下载,一般注册第二天就通过。
注意,建议使用cudnn v3 或 cudnn v2版本,我试验的v5最新版一直报错。
这里给出我的百度云盘下载地址:
链接:http://pan.baidu.com/s/1c2p8NcO 密码:em3w
(2). 安装
解压下载好的文件,一般在文件所在的目录会出现一个cuda的新文件夹:
1 | $ tar -xzvf cudnn-7.5-linux-x64-v3.0-rc.tgz |
(3). 重新编译caffe
在~/caffe/Makefile.config中,去掉 USE_CUDNN := 1的注释,重新加上CPU_ONLY:= 1的注释然后重新编译caffe即可。
1 | $ make clean # 第一次编译不用这句,出错时也可使用这句。 |
¶注意
当进行 make all
操作时,可能会出现如下错误:
CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’
.build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’
原因就是opencv3.0.0把imread相关函数放到imgcodecs.lib中了,而非原来的imgproc.lib
解决办法:修改Makefile文件(不是Makefile.config):
在位置{ (LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs) }处添加opencv_imgcodecs
修复错误重新执行上述代码,成功后的截图如下所示:
¶配置pycaffe
(1). 安装依赖库
1 | $ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython |
(2). 编译
进入caffe目录,编译pycaffe
1 | $ cd ~/caffe |
(3). 修改环境变量
添加caffe目录下的python地址到$PYTHONPATH
1 | $ sudo gedit /etc/profile # 末尾添加: export PYTHONPATH = caffe目录下的python地址:$PYTHONPATH,用完整路径,不要用~ |
(4). 测试
在terminal进入python,import caffe 如果没错说明安装成功,效果如图:
¶使用MNIST数据集进行测试
切换至caffe目录下,下面的工作主要是:用于测试Caffe是否工作正常,不做详细评估。具体设置请参考官网:MNIST数据集在Caffe中的测试 。
- 数据预处理
1 | $ sh data/mnist/get_mnist.sh |
- 重建lmdb/leveldb文件。Caffe支持三种数据格式输入网络,包括Image(.jpg,
.png等),leveldb,lmdb,根据自己需要选择不同输入吧。
1 | $ sh examples/mnist/create_mnist.sh |
生成mnist-train-lmdb 和 mnist-train-lmdb文件夹,这里包含了lmdb格式的数据集
- 训练mnist
1 | $ sh examples/mnist/train_lenet.sh |
这时你会在终端窗口中看到caffe的训练过程
¶使用CIFAR-10数据集进行测试
CIFAR-10数据集: 含有6万个32*32的彩色图像,共分为10种类型,由 Alex Krizhevsky, Vinod Nair和 Geoffrey Hinton收集而来。包含50000张训练图片,10000张测试图片, 详细参考地址见: The CIFAR-10 dataset
- 首先切换至caffe目录下:
$ cd caffe
; - 准备数据集( 在caffe目录下执行):
$ ./data/cifar10/get_cifar10.sh
; - 执行:
./examples/cifar10/create_cifar10.sh
## 将图片库转成leveldb格式,并计算均值二进制文件; - 模型训练:
./examples/cifar10/train_quick.sh
结果如下图所示:
¶参考文献
(1): http://caffe.berkeleyvision.org/install_apt.html
(2): http://blog.csdn.net/mduanfire/article/details/50931989
(3): http://blog.csdn.net/mduanfire/article/details/50492939
(4): https://developer.nvidia.com/cuda-gpus
(5): https://developer.nvidia.com/cuda-toolkit
(6): http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html#running-binaries__valid-results-from-sample-cuda-devicequery-program
(7): https://developer.nvidia.com/cudnnhttp://caffe.berkeleyvision.org/install_apt.html
(8): https://developer.nvidia.com/cudnn
(9): http://blog.csdn.net/u013915633/article/details/49867947
(10): http://www.th7.cn/system/lin/201504/103304.shtml
(11): https://github.com/Zhangjd/graduation-project/issues/1
(12): https://github.com/BVLC/caffe/issues/2348
END