Ubuntu14.04下cuda6.5+caffe编译

系统是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.

本文总阅读量