Caffe + Ubuntu 14.04 64bit + CUDA6.5 + 无GPU 配置
我的机器没有nvidia的显卡,因此只能使用CPU模式,网上很多是GPU模式下的配置,对于CPU模式往往一句话带过,对于初学者来说,往往会摸不着头脑。因为每个人的机器多少会有差异,因此跟着教程做的时候通过会遇到一些意外的问题,不用怕,google之,真心感觉google的强大,很多问题一搜便有结果。
建议大家在配置之前,认真阅读官网的教程,讲得很到位,会让你少走许多弯路。
安装Caffe前需要安装一些库:
一、安装build-essentials
安装开发所需要的一些基本包
sudo apt-get install build-essential
二、CUDA安装
这一步包括三个部分:
- nvidia驱动
- cuda-toolkit
- cuda-samples
在CPU模式下仅需要安装cuda-toolkit,接下来介绍如何安装cuda-toolkit
2.1 下载CUDA6.5
解压下载得到的.run文件,得到三个文件,我们只安装第一个,即cuda-toolkit包
-
- CUDA安装包: cuda-linux64-rel-6.5.14-18749181.run
- NVIDIA驱动: NVIDIA-Linux-x86_64-340.29.run
- SAMPLE包: cuda-samples-linux-6.5.14-18745345.run
cuda6.5.run --extract=extract_path
通过下列命令增加.run文件的执行权限
chmod +x *.run
2.2 安装cuda
安装CUDA需要在纯命令行下进行(非常重要),按 ctrl+alt+F1进入tty,登录后执行如下命令
sudo service lightdm stop
或者
sudo stop lightdm
执行下列命令安装CUDA,按照提示一步步安装,其中会让你选择安装目录,接受协议等,为方便选择默认路径,直接回车即可。
sudo ./cuda-linux64-rel-6.5.14-18749181.run
2.3 添加环境变量
安装完成后在/etc/profile中添加环境变量,在文件最后添加
PATH=/usr/local/cuda-6.5/bin:$PATH export PATH
保存后,执行下列命令,使环境变量立即生效
source /etc/profile
2.4 添加lib库路径
在/etc/ld.so.conf.d/目录下增加文件cuda.conf,内容如下
/usr/local/cuda-6.5/lib64
执行下列命令立刻生效
sudo ldconfig
注: 如果你没有使用默认路径,将上面的路径换成自己相应的路径即可
2.5 退出命令行
sudo service lightdm start
或者
sudo start lightdm
三、安装BLAS
BLAS有三个版本:ATLAS, MKL, OpenBLAS。MKL是收费的,也用student版本,不过需要使用你所在单位的邮箱来申请, 其它两种是免费的,这里使用OpenBlas。听说MKL效率上比其它两种好很多。。
- 去项目主页下载安装包
- 编译安装 (具体参考:http://my.oschina.net/u/274748/blog/101897)
-
- make
make PREFIX=/your/path install
3. 添加lib库路径: 在/etc/ld.so.conf.d/目录下增加文件OpenBlas.conf,内容如下
/usr/local/OpenBlas/lib
4. 执行下列命令立刻生效
sudo ldconfig
四、安装Opencv
- 从github上下载安装脚本:https://github.com/jayrambhia/Install-OpenCV
- 进行Ubuntu/2.4目录,对所有脚本增加可执行权限
sudo chmod +x *.sh
安装最新版本(当前为2.4.9),有人自己写了2.4.20版本的,有兴趣的可以去下:http://pan.baidu.com/s/1m3hQu
3. 安装依赖项
sudo ./dependencies.sh
4. 安装opencv 2.4.9
sudo sh ./opencv2_4_9.sh
这块儿时间比较长,保证网络连接,需要联网下载安装包,大概三十分钟,记不清了。。
注意:中途可能会报错:
opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp(51): error: a storage class is not allowed in an explicit specialization
解决方案: 下载NCVPixelOperations.hpp ,替换掉Ubuntu/2.4/Opencv/opencv2.4.9/moduels/gpu/src/nvidia/core目录中的NCPixelOperations.hpp文件,重新执行安装命令
sudo sh ./opencv2_4_9.sh
五、安装其它依赖项
Ubuntu14.04用户执行
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
其它版本参考官网说明
六、安装Caffe所需要的Python 环境
选择一个适合你的IDE运行环境,作者用的是Spyder,因为它内置了 iPython 环境,Caffe有不少的程序是基于 iPython 环境完成的。安装方法很简单,直接在Ubuntu软件中心搜索“spyder”即可安装。
七、安装Caffe所需要的matlab环境
- 下载:自己从网上找资源吧,百度云盘中有比较多的资源。注意:caffe只支持matlab12b以上的版本
- 安装具体流程参考:http://blog.csdn.net/aimatfuture/article/details/8058156
八、编译Caffe
- 下载:https://github.com/BVLC/caffe
- 进入caffe目录,复制一份Makefile.config
cp Makefile.config.example Makefile.config
- 根据自己环境修改相应内容
1 取消 CPU_ONLY := 1前面的注释
2. cuda 安装路径改为自己的路径 : CUDA_DIR := /usr/local/cuda-6.5
3. 配置路径:实现caffe对python和matlab接口的支持
PYTHON_INCLUDE := /usr/include/python2.7 \ /usr/lib/python2.7/dist-packages/numpy/core/include PYTHON_LIB := /usr/local/lib INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib MATLAB_DIR := /usr/local/MATLAB/R2014a
4. BLAS := open (根据自己选择的版本,分别设为atlas, mkl, open
- 编译caffe
sudo make all -j2
sudo make test
sudo make runtest
在一这步可能会碰到问题:undefined refrence to ' cudaGetDevice '
解决方法:
1. 修改Makefile.config, 修改CUSTOM_CXX := g++-4.6
2. 执行命令 sudo apt-get install gcc-4.6 g++-4.6 gcc-4.6-multilib g++-4.6-multilib
3. 修改以下两个文件
vi src/caffe/common.cpp
vi tools/caffe.cpp
使用google替代gflags
4. 重新make
如果在make的过程中提示:“error while loading shared libraries: xxx.so.x”,可能是cuda及OpenBLAS环境变量没有设置正确,检查相应步骤,可参考:http://blog.csdn.net/sahusoft/article/details/7388617
九、编译matlab wrapper
make matcaffe
十、编译python wrapper
make pycaffe
十一、使用MNIST数据集进行测试
这部分可参考caffe官网:http://caffe.berkeleyvision.org/gathered/examples/mnist.html,非常详细。
注:这一部分默认在caffe的目录下完成,不能去相应的子目录下执行脚本,因为脚本中的路径是相对于caffe目标的相对路径 。
- 获取数据: sudo sh data/mnist/get_mnist.sh
- 重建lmdb/ leveldb文件,caffe支持三种数据格式输入: images(.jpg,.png等),leveldb, lmdb
- 切换到CPU模式: 在lenet_solver.prototxt中修改 solover_mode = CPU , 在最后一行
- 训练minist: sudo sh examples/mnist/train_lenet.sh
没有错误的话,就可以看到一串串的输出信息啦。
十二、在CPU模式下,所以不安装CuDnn