系统是Ubuntu14.04 desktop 64位,目标是搭建caffe环境用于训练深度学习模型。因为是在GPU下,所以需安装cuda。在2015年1月5日,最新的cuda版本是6.5,caffe推荐使用最新的cuda库。
注:文章主要参考普兒的blog。
目录
编译过程
0.安装Anaconda
因为个人比较喜欢Anaconda,所以一步系统安装之后,紧接着就会安装Anaconda,
bash Anaconda-2.1.0-Linux-x86_64.sh
1.安装build-essentials
安装开发所需要的一些基本包
sudo apt-get install build-essential
2.安装NVIDIA驱动
进入Ubuntu, 按 ctrl+alt+F1
进入tty, 登录tty后输入如下命令
sudo service lightdm stop
该命令会关闭lightdm。如果你使用 gdm或者其他的desktop manager, 请在安装NVIDIA驱动前关闭他。接下来,输入下列命令添加驱动源
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
安装340版驱动 (CUDA 6.5.14目前最高仅支持340版驱动, 343, 346版驱动暂不支持)
sudo apt-get install nvidia-340
安装完成后, 继续安装下列包 (否则在运行sample时会报错)
sudo apt-get install nvidia-340-uvm
安装完成后 reboot.
3.安装CUDA
通过下列命令安装CUDA, 按照说明一步一步安装至完成.这里注意之前已经安装了340版驱动,但cuda_6.5.14_linux_64中包含CUDA安装包、NVIDIA驱动和SAMPLE包,所以安装过程中,遇到是否安装驱动包,选择no
sudo ./cuda_6.5.14_linux_64.run
安装完cuda和samp之后,添加环境变量。需要在/etc/profile中添加环境变量, 在文件最后添加:
PATH=/usr/local/cuda-6.5/bin:$PATH
export PATH
保存后, 执行下列命令, 使环境变量立即生效
source /etc/profile
之后还需要添加lib库路径
在 /etc/ld.so.conf.d/加入文件 cuda.conf, 内容如下
/usr/local/cuda-6.5/lib64
执行下列命令使之立刻生效
sudo ldconfig
4.安装CUDA SAMPLE
在上一步中,我们已经安装了Cuda Sample,这里需要安装一些依赖库,命令如下:
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa-dev
完成后编译Sample文件, 整个过程大概10分钟左右(也可能半个小时!)
cd /usr/local/cuda-6.5/samples
sudo make
全部编译完成后, 进入 samples/bin/x86_64/linux/release, sudo下运行deviceQuery
sudo ./deviceQuery 如果出现显卡信息, 则驱动及显卡安装成功:(以下是部分信息)
./deviceQuery Starting…
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: “GeForce GTX 670” CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 3.0 Total amount of global memory: 4095 MByt
5.安装ATLAS
这个是可选的,有几个选择(Intel MKL、OpenBLAS等),而我直接使用了开源的Atlas, 安装命令如下:
sudo apt-get install libatlas-base-dev
6.安装OpenCV
这个尽量不要手动安装, Github上有人已经写好了完整的安装脚本:https://github.com/jayrambhia/Install-OpenCV
下载该脚本,进入Ubuntu/2.4 目录, 给所有shell脚本加上可执行权限
chmod +x *.sh
然后安装最新版本 (当前为2.4.9)
sudo ./opencv2_4_9.sh
脚本会自动安装依赖项,下载安装包,编译并安装OpenCV。整个过程大概半小时左右。
注意,中途可能会报错
opencv-2.4.9/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp(51): error: a storage class is not allowed in an explicit specialization
解决方法在此:http://code.opencv.org/issues/3814 下载 NCVPixelOperations.hpp 替换掉opencv2.4.9内的文件, 重新build。
sudo make
sudo make install
这里需要验证opencv是否安装成功。即在某个目录下建立一个test.cpp文件
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char* argv[])
{
Mat image;
image = imread(argv[1], 1);
if (argc != 2 || !image.data)
{
printf("No image data\n");
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
imshow("Display Image", image);
waitKey(0);
return 0;
}
再写一个cmake的makefile,也叫CMakeLists.txt
project(test)
find_package(OpenCV REQUIRED)
add_executable(test test)
target_link_libraries(test ${OpenCV_LIBS})
cmake_minimum_required(VERSION 2.8)
之后编译+运行
cmake .
make
得到可执行文件test。随便弄个jpg图片做个测试,注意要和上面那个可执行文件放在同一目录下面,我这里名字取的是test.jpg。执行 ` ./test test.jpg` ;如果能看到照片,那就表示成功了。
7.安装其他依赖项
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
其他版本用户参考官方说明:http://caffe.berkeleyvision.org/installation.html
8.编译Caffe
终于完成了所有环境的配置,可以愉快的编译Caffe了! 进入caffe根目录, 首先复制一份Makefile.config
cp Makefile.config.example Makefile.config
然后修改里面的内容,主要需要修改的参数包括:CPU_ONLY 是否只使用CPU模式,没有GPU没安装CUDA的同学可以打开这个选项;BLAS (使用intel mkl还是OpenBLAS); MATLAB_DIR 如果需要使用MATLAB wrapper的同学需要指定matlab的安装路径;DEBUG 是否使用debug模式,打开此选项则可以在eclipse或者NSight中debug程序;
完成设置后, 开始编译
sudo sh make all -j4
sudo sh make test
sudo sh make runtest
注意:-j4 是指使用几个线程来同时编译, 可以加快速度, j后面的数字可以根据CPU core的个数来决定, 我的CPU使4核, 所以-j4.
9.编译Python wrapper
注意,之前安装了Anaconda,不过还有一些库需要安装。 在caffe下面的python文件夹下有requirements.txt,这里是必须安装的一些库。 在命令行中输入
for req in $(cat requirements.txt); do pip install $req; done
export PYTHONPATH=/home/chrispher/Downloads/caffe-master/python:$PYTHONPATH
也可以添加环境变量。需要在/etc/profile中添加环境变量, 在文件最后添加:
export PYTHONPATH=/home/chrispher/Downloads/caffe-master/python:$PYTHONPATH
export PATH
保存后, 执行下列命令, 使环境变量立即生效
source /etc/profile
输入python,之后import caffe
完事!
之后编译的话,就是下面的:
sudo make pycaffe
然后基本就全部安装完了,之后就可以跑demo了。
###测试过程 我们根据下载的caffe-master中的examples做一些测试,以cifar10为例。examples下cifar10里,有readme.md,可以根据这里的说明进行测试。注意这里的$CAFFE_ROOT就是caffe-master解压后路径。以下均是在该目录下操作:
sudo ./data/cifar10/get_cifar10.sh
(下载数据集)
sudo ./examples/cifar10/create_cifar10.sh
sudo ./examples/cifar10/train_quick.sh
(测试用例)
接着会看到如下等信息:
I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1 I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- data I0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1 I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800) I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation.
最终得到结果:
I0317 22:12:19.666914 2008298256 solver.cpp:87] Iteration 5000, Testing net I0317 22:12:25.580330 2008298256 solver.cpp:114] Test score #0: 0.7533 I0317 22:12:25.580379 2008298256 solver.cpp:114] Test score #1: 0.739837 I0317 22:12:25.587262 2008298256 solver.cpp:130] Snapshotting to cifar10_quick_iter_5000 I0317 22:12:25.590215 2008298256 solver.cpp:137] Snapshotting solver state to cifar10_quick_iter_5000.solverstate I0317 22:12:25.592813 2008298256 solver.cpp:81] Optimization Done.