Ubuntu16.04+Cuda+Caffe安装

电脑配置:Ubuntu16.04+NVIDIA TITAN XP+CUDA8.0+cudnn_v6+OpenCV3.2

在给服务器配置cuda时,使用ppa安装驱动,出现了循环登录(输入密码之后返回登录界面)问题。之后使用run文件安装并且加入不安装OpenGL的flag之后,可以避免该问题。

一、安装依赖项

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

二、安装CUDA

推荐安装7+或者最新的驱动版本,Ubuntu16.04只能安装CUDA 8。

1 驱动安装的两种方法

ppa安装有时会出现循环登陆的问题,而run文件安装,nvidia-settings中不会显示显卡信息,大家权衡安装。

1.1、安装驱动之通过ppa安装(可能会循环登录)

首先卸载安装过的驱动版本:

sudo apt-get remove --purge nvidia*

若电脑是集成显卡,则需要禁用lightdm(ubuntu默认的显示管理工具):

sudo service lightdm stop

使用命令行安装驱动:

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-375 #此处对应自己安装的的驱动版本

安装完成后,注销,重新登录,执行以下指令:

sudo nvidia-smi

若显示GPU的信息列表,说明驱动安装成功。

或执行

nvidia-settings

可以看到本机GPU的详细信息,同样说明安装成功。

1.2 驱动安装之通过run文件安装

通过ppa安装的驱动有时会出现循环登陆的情况,这时就需要使用run文件进行安装。

到官网查询并下载本机GPU所对应的驱动,对于GeForce系列显卡,其地址为GeForce Driver。输入显卡信息,便会显示相应的驱动版本。


为了保险起见,选择375的驱动进行安装(之前使用384的驱动,通过runtest,但在train_lenet.sh时遇到错误)。

为下载的文件添加执行权限:

$sudo chmod a+x NVIDIA*.run #其中NVIDIA*为对应驱动文件的名称

由于需要禁用X-server,所以按下Ctrl+Alt+F1(F1~F6均可)进入到tty1,执行:

sudo /etc/init.d/lightdm stop #禁用lightdm服务
sudo ./NVIDIA-Linux-x86_64-384.69.run -no-x-check -no-nouveau-check -no-opengl-files#非常重要!!!

其中,
–no-x-check 安装驱动时关闭X服务,
–no-nouveau-check 安装驱动时禁用nouveau,
–no-opengl-files 只安装驱动文件,不安装OpenGL文件

重启,没有出现循环登陆,命令行中输入nvidia-smi,就可以看到对应的显卡信息。

但是这种方法安装的驱动,使用nvidia-settings不会显示相应的显卡,而且系统不会检测到安装了显卡驱动,所以在其他相关的程序(如nvidia-opencl)需要安装nvidia驱动时,系统会再次安装nvidia驱动,从而造成重新登录的问题,需要谨慎。

如果发生上述情况,使用sudo apt-get purge nvidia*删除所有nvidia文件,之后再次用run文件安装即可。

2、安装CUDA

在英伟达官网下载安装文件,如下图所示:

选择runfile(local)文件进行安装,这是因为deb包安装不能选择安装选项。

首先为runfile增加执行权限:

sudo chmod a+x cuda_***.run

使用run文件进行安装:

sudo ./cuda_***.run

首先会出现安装协议,按q直接跳到末尾(而非一直按空格),输入accept。
在选择显卡驱动的一项一定选择n。
其他默认即可。

不推荐】使用local deb包进行安装,下载完成后,在下载文件所在目录执行以下指令进行安装:

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda

若提示某些依赖项不存在,使用apt-get install -f进行修复。

此处不需要对gcc进行降级。

3、配置环境变量

打开bashrc文件:

sudo gedit ~/.bashrc

在文件末尾加入以下代码,保存

export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

设置环境变量和动态链接库,输入

sudo gedit /etc/profile 

在文件末尾添加如下语句,注意等号两侧不可出现空格,否则会有语法错误。

export PATH=/usr/local/cuda/bin:$PATH

保存,创建链接文件

sudo gedit /etc/ld.so.conf.d/cuda.conf

在文件末尾添加

/usr/local/cuda/lib64

保存、退出,执行命令

sudo ldconfig

4、测试CUDA是否安装成功

选择samples文件夹下的示例进行测试

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery  #根据自己CUDA安装目录进行修改
make
sudo ./deviceQuery

若显示出本GPU的相关信息,则说明安装成功。sample中的大量示例可供学习参考。

四、安装cuDNN

cuDNN是一个CUDA的深度神经网络的加速库,到官网cuDNN Download页面注册账号后,可以免费下载。

此处选择cuDNN v6.0 Library for Linux版本。

下载完成后,解压,进入include目录,执行:

sudo cp cudnn.h /usr/local/cuda/include/

之后进入lib64目录下:

sudo cp lib* /usr/local/cuda/lib64/      #复制动态链接库
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.6    #删除原有动态文件
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6  #生成软衔接(注意这里要和自己下载的cudnn版本对应,其他版本可以在/usr/local/cuda/lib64下查看自己libcudnn的版本,进行相应调整)
sudo ln -s libcudnn.so.6 libcudnn.so      #生成软链接

五、安装OpenCV

opencv版本需高于2.4,可以使用3.0,此处使用OpenCV3.2 。

1、安装依赖项:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev  libtiff4-dev  libswscale-dev libjasper-dev cmake  pkg-config 

2、在OpenCV官网下载安装包,解压,进入其目录:

mkdir build
cd build/
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

编译:

make -j8 #其中8指的是编译时的并行线程数,最好的选择是机器的内核数。

安装:

sudo make install

3、使用OpenCV中sample进行测试:

cd path_to_opencv/opencv-3.2.0/samples/cpp/example_cmake
cmake .
make
./opencv_example

可以看到一张写有”Hello OpenCV”的黑色背景图片,说明OpenCV配置成功(具体结果视opencv_example的功能而定)。

六、配置Caffe

1、下载Caffe源文件:

git clone https://github.com/BVLC/caffe.git

2、复制、打开Makefile.config文件

sudo cp Makefile.config.example Makefile.config
sudo gedit Makefile.config

对Makefile.config进行修改:
(1)若使用cudnn,则去掉USE_CUDNN := 1之前的#(#即注释)
(2)若OpenCV版本为3.0,则去掉OPENCV_VERSION := 3之前的#
(3)若许使用Python编写layer,则去掉WITH_PYTHON_LAYER := 1之前的#
(4)找到# Whatever else you find you need goes here.下面的:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 

修改为:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

3、对Caffe目录下的Makefile文件进行修改:
将:

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

替换为:

NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

4、编辑/usr/local/cuda/include/host_config.h

#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

改为

//#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

5、编译

make all -j8                    #8的含义同上
make pycaffe                    #编译python layer
make runtest

若显示通过所有测试样例,则说明安装成功。

6、使用MNIST样例进行测试

MNIST是一个手写数字的数据集,共包含数字0~9十个类,训练集、测试集分别含有60000、10000张图片。使用含有两个卷积层的LeNet模型,就可以取得很好的分类结果。

获取数据集、装换为lmdb格式,网络训练过程如下:

cd path_to_caffe/caffe          #进入caffe目录中
./data/mnist/get_mnist.sh       #下载mnist数据集
./examples/mnist/create_mnist.sh#将mnist数据集转为lmdb格式
./examples/mnist/train_lenet.sh #训练lenet网络

训练结果如下,经过10000次迭代,可以达到99.06%的训练准确率。

参考资料

  1. Caffe Ubuntu安装教程
  2. Training LeNet on MNIST with Caffe
  3. Ubuntu16.04+CUDA8.0+caffe配置
  4. Ubuntu16.04+cuda8.0+caffe安装教程
  5. Ubuntu安装NVIDIA驱动后桌面循环登录问题
  6. 问题汇总ubuntu16.04+cuda8.0+cudnn+opencv3.2+caffe+tensorflow
  7. NVIDIA驱动挂掉后Ubuntu 16.04循环登陆

你可能感兴趣的:(caffe)