您的位置:首页 > Web前端

Ubuntu+CUDA6.5+Caffe安装配置汇总

2015-01-24 10:00 411 查看
此贴历经坎坷,一入DL深似海啊,配个caffe玩玩足足折腾了我半个多月,就在我想放弃之时,峰回路转,成功了,其中心酸只有自己知道啊。起初安装ubuntu因为引导问题折腾了一三天左右,然后各种方式安装及引导ubuntu手到擒来,半小时搞定。然后开始在笔记本安装cuda,出现各种问题不说,最终无法进入GUI折腾了近一个星期,其间重装了不下15次系统,最后才发现好像是optimus双显卡的问题,也罢,直接卸载也不愿在笔记本上折腾了。再然后在单显卡台机上安装cuda,非常顺利,接着开始安装各种依赖库及配置环境,遇到问题疯狂google(百度真心不行啊),这样折腾了有一个星期之久,最终遇到一个连google都搜不到的问题,思考半晌,考虑放弃这么高大上的东西了。在不忍删除辛苦安装的系统用再生龙备份之余,想想试试ubuntu12.04,结果虽然遇到不少问题,都曲折的解决了,最终一天终于搞定了,一把鼻涕一把泪啊!我想应该是属于比较倒霉的,跟着别人的教程按部就班,但是每一步都出现问题,本人又是linux新手,出现问题只能google,所以浪费了太长时间。现在回头想想,好像真的没什么地方很难解决的,理应一天时间搞完的,最多有一些版本之间的冲突,真心觉得时间花费的有点不值。总之,成功了,也是醉了。。。

简单介绍一下:Caffe,一种Convolutional Neural Network的工具包,和Alex的cuda-convnet功能类似,但各有特点。都是使用C++ CUDA进行底层编辑,Python进行实现,原作不属于Ubuntu 12,也有大神发布了Windows版,但其他相关资料较少,不适合新手使用,所以还是Ubuntu的比较适合新手。

本人为Linux新手,安装ubuntu和cuda折腾了一个多星期,起初是因为ubuntu安装导致引导失效,中途每次都需要手动引导进入系统,然后安装cuda失败后用ultraISO制作U盘启动重新安装才恢复正常。至于安装过程可以参考:http://blog.sciencenet.cn/home.php?mod=space&uid=1583812&do=blog&id=839793

一、CUDA Toolkit的安装和调试

这里其实可以参考nVidia 官方提供的CUDA安装手册,全英文的,我就是参考这个文档完成后面的配置和验证工作。https://developer.nvidia.com/rdp/cuda-65-rc-toolkit-download#linux。一般要输入你的用户名和密码,就是下载6.5的那个账号。

1、Verify You Have a CUDA-Capable GPU

执行下面的操作,然后验证硬件支持GPU CUDA,只要型号存在于https://developer.nvidia.com/cuda-gpus,就没问题了

$ lspci | grep -i nvidia

2、Verify You Have a Supported Version of Linux

$ uname -m && cat /etc/*release

重点是“x86_64”这一项,保证是x86架构,64bit系统

3、Verify the System Has gcc Installed

$ gcc --version

4、Download the NVIDIA CUDA Toolkit

下载地址:https://developer.nvidia.com/cuda-toolkit

在根目录下新建cuda_install文件夹,把run文件放进去

mkdir cuda_install

验证地址:https://developer.nvidia.com/rdp/cuda-rc-checksums

$ md5sum filename

例如:md5sum cuda_6.5.14_linux_64.run,然后与官网核对

5、安装必要的一些库和头文件文件

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

如果有依赖冲突的,建议分开安装。

6、Handle Conflicting Installation Methods

根据官网介绍,之前安装的版本都会有冲突的嫌疑

所以,之前安装的Toolkit和Drievers就得卸载,屏蔽,等等(因为我是新系统,没有安装过nvidia驱动,所以此步可以省略)

sudo apt-get --purge remove nvidia*

7、Graphical Interface Shutdown

退出GUI,也就是X-Win界面,操作方法是:同时按:CTRL+ALT+F1(F2-F6),切换到TTY1-6命令行模式。

关闭桌面服务:

$ sudo stop lightdm

8、Interaction with Nouveau

这是卡住本人将近一个星期的问题,我原来用的是笔记本,双显卡,装了不下二十次,不管按照何种方法,最终装完cuda之后图形界面就只剩下墙纸,只有鼠标可以动,进不了桌面还打不开终端,最后换了一个台式机,半天所有东西全部搞定。原来以为是nouveau过于顽固,怎么样都卸不掉,之后顿悟,可能是optimus显卡问题,默认3D渲染由nvidia独显完成,而2D渲染由intel集显完成,但是我的机子是华硕的,BIOS里面无法关闭集显(貌似thinkpad可以),所以没有进一步尝试,反正台式机环境搭好了。

如果遇到以上问题,可以移步:

http://wenku.baidu.com/link?url=hjEIoYx-spMxyrU-zy057bOBb4dtYUc7s6bj8CM-TTJ4-QPQTmc9KX3DQ0ZZCfhJpkar0To8y54Cc2gR8LwTOLRCQ8TS4iUUPXavaw7o2Eu

可能装了这个bumblebee显卡调节程序可能解决问题,也可以参考此贴:

http://www.cnblogs.com/bsker/archive/2011/10/03/2198423.html

还有一个之前没找到的帖子,白白浪费了那么长时间。。。用prime解决这个问题

/article/5109346.html

百度经验也有:

http://jingyan.baidu.com/article/046a7b3efe8c58f9c27fa98b.html

Nouveau是一个开源的显卡驱动,Ubuntu 14.04 默认安装了,但是它在nvidia驱动安装过程中会有冲突,所以要禁用它。

以下是欧新宇同学的过程,反正我按照这个没有成功,大家可以试试,因为在第三步中我的boot文件夹里没有initramfs,只有initrd,重新生成initrd貌似不起作用,这就是linux新手的悲哀,出了问题完全不知道原因。如果有高人指点一下,小弟感激不尽!

(1)将nouveau添加到黑名单,防止它启动

$ cd /etc/modprobe.d

$ sudo vi nvidia-graphics-drivers.conf

写入:blacklist nouveau

保存并退出: wq!

检查:$ cat nvidia-graphics-drivers.conf

(2)对于:/etc/default/grub,添加到末尾。

$ sudo vi /etc/default/grub

末尾写入:rdblacklist=nouveau nouveau.modeset=0

保存并退出: wq!

检查:$ cat /etc/default/grub

(3)官网提供的操作:(感觉上这一小步,可以略过,不执行,执行了也会报错)

sudomv/boot/initramfs−(uname
-r).img /boot/initramfs-$(uname -r)-nouveau.img

然后重新生成initrd文件

sudodracut/boot/initramfs−(uname
-r).img $(uname -r)

$ sudo update-initramfs -u

上面那条是nVidia官方提供的命令,不知道为什么在我这里会提示dracut是不存在的命令,也许是版本问题,或者少了什么包,不过无所谓,第二条命令也可以搞定,应该是一样的功能。

我试过在ubuntu12.04下安装,只要修改/etc/modprobe.d/blacklist.conf就可以解决问题,可是ubuntu14.04中这个文件是只读的,所以我就给它添加了写的权限,强制修改了。

sudo chmod +w /etc/modprobe.d/blacklist.conf

sudo vi /etc/modprobe.d/blacklist.conf

在里面加入:

blacklist nouveau

options nouveau modeset=0

由于试过很多种方法,最终是哪种方法成功禁用了nouveau,说实话我还真不记得了,大家可以互相交流。

测试nouveau是否被禁用成功很简单:

(1)重启之后明显感觉画质变差

(2)lsmod | grep nouveau,如果显示为空,那么就是卸载成功了。

9、Installation

默认情况下,可以跳过显卡驱动的安装,直接安装CUDA,因为它包含了Drivers,Toolkit和Sample三个部分,但是如果出现问题,可以尝试二次安装CUDA或者利用官方的显卡驱动,来进行处理。GTX显卡驱动的下载地址如下(Tesla版的驱动,请大家自己去nVidia的官网下载):

下载地址:http://www.geforce.cn/drivers

$ sudo sh ./NVIDIA-Linux-x86_64-340.24.run (Optional)

切换到cuda_6.5.14_linux_64.run 所在的目录,然后执行安装命令:

$sudo cd cuda_install

$ sudo sh cuda_6.5.11_rc_linux_64.run

再次提醒,安装前一定要执行 md5sum ,如果不一样会导致安装的Sumary里显示Driver成功,Toolkit和Samples失败,需要重新下载run文件。

这里会一路问你各种问题,基本上就是Accept-yes-Enter-yes-Enter-yes-Enter, 接受协议,安装的默认位置确认。

10、驱动装完了,可以回到GUI界面了

$ sudo start lightdm

(在这里又出现问题,开机重启后进不了GUI,估计是显卡版本有问题,本机配置Nvidia Quadro K600显卡,官网下载专用驱动,按以上步骤重新安装,在CUDA安装过程中的第一步提示是否安装显卡驱动选择no)

检查显卡是否安装成功可以用命令

sudo apt-get install mesa-utils

glxinfo | grep -i nvidia

11、POST-INSTALLATION ACTIONS

这一步就是验证一下安装是否正确,编译和完成以下CUDA自带的程序,建议做一下~

(1)Environment Setup

exportPATH=/usr/local/cuda−6.5/bin:PATH

exportLDLIBRARYPATH=/usr/local/cuda−6.5/lib64:LD_LIBRARY_PATH

环境变量配置完,使用nvcc -V命令检查cuda是否安装正确,这里开始使用普通用户操作,始终提示没有安装cuda toolkit,最后改到root用户下就显示成功了。

(2)(Optional) Install Writable Samples

$ cuda-install-samples-6.5.sh

安装到Home下,搞定了之后可以在GUI下调整一下,主要是前面的要求,会有一个Sample的文件夹 NVIDIA_CUDA-6.5_Samples在Home的根目录下就ok了。因为后面编译测试各方面什么的方便。其实如果之前安装CUDA驱动和Toolkit一切正常,这一步基本可以省略,应该会自动建立,但检查一下无妨。

(3)Verify the Installation

a. 验证驱动的版本,其实主要是保证驱动程序已经安装正常了

$ cat /proc/driver/nvidia/version

b. Compiling the Examples

$ nvcc -V

不出意外的话应该会提示,nvcc没有安装,其实就是,nvidia-cuda-toolkit的编译器没有安装完整,总之,根据提示继续就好了

$ sudo apt-get install nvidia-cuda-toolkit

这里安装完,就可以编译了,切换目录到~/NVIDIA_CUDA-6.5_Samples:

$ cd /home/username/NVIDIA_CUDA-6.5_Samples

$ make

c. Running the Binaries

运行编译好的文件,例如看看设备的基本信息和带宽信息:

$ cd /bin/x86_64/linux/release

$ ./deviceQuery

$ ./bandwidthTest

PS:如果测试的时候出现说运行版驱动和实际驱动不符,原因可能是因为后面安装的nvidia-cuda-toolkit更新了配置文件,所以和原始的Cuda-Samples的配置或者是驱动程序有变化,所以检测无法编译通过。考虑下面的解决方法:

(1)卸载现有驱动

$ sudo nvidia-installer --uninstall

(2)下载合适版本的驱动,并安装:

下载地址:http://www.geforce.cn/drivers

$ sudo sh ./NVIDIA-Linux-x86_64-340.24.run

(3)重装CUDA Toolkit

$ sudo sh cuda_6.5.11_rc_linux_64.run

Nvidia Cuda安装结束

二、Caffe的安装和测试

对于Caffe的安装严格遵照官网的要求来:http://caffe.berkeleyvision.org/installation.html

1、安装BLAS

这里可以选择(ATLAS,MKL或者OpenBLAS),我这里使用MKL,首先下载并安装英特尔® 数学内核库 Linux* 版MKL,下载链接是:https://software.intel.com/en-us/intel-education-offerings,可以下载Student版的,先申请,然后会立马收到一个邮件(里面有安装序列号),打开照着下载就行了。下载完之后,要把文件解压到home文件夹,或者其他的ext4的文件系统中。

接下来是安装过程,先授权,然后安装:

$ tar zxvf parallel_studio_xe_2015.tgz (如果你是直接拷贝压缩文件过来的)

$ chmod a+x /home/username/parallel_studio_xe_2015 -R

$cd parallel_studio_xe_2015

$ sudo ./install_GUI.sh

然后进入图形安装模式,跟windows差不多,其中序列号就是邮箱发过来的那个。这里使用root权限安装。

$ sudo passwd root

2、MKL与CUDA的环境设置

文件夹切换到/etc/ld.so.conf.d,并进行如下操作

(1)新建intel_mkl.conf, 并编辑之:

$ cd /etc/ld.so.conf.d

$ sudo vi intel_mkl.conf

加入:/opt/intel/lib/intel64

/opt/intel/mkl/lib/intel64

(2)新建cuda.conf,并编辑之:

$ sudo vi cuda.conf

加入:/usr/local/cuda/lib64

/lib

(3) 完成lib文件的链接操作,执行:

$ sudo ldconfig -v

(这里我按照这样的方法最终编译出现cblas找不到的问题,应该是MKL安装有问题,但是又没办法解决,最终我就按照官网的方法安装了ATLAS

sudo
apt-get install libatlas-base-dev

一句话就搞定,虽然性能可能比不上MKL,但是将就着能用就行。



3、安装OpenCV

(1)这里我用他的方法发现报错,所以按照依赖包以正常方式安装

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

这里libtiff4-dev出现依赖错误,于是分开安装就解决了。

(2)根据官网提示,还要安装python,于是:

sudo apt-get install python-pip

sudo apt-get install python-dev

sudo apt-get install python-numpy

(3)下载官网opencv压缩包,我下载的是opencv-3.0.0-alpha.zip,移动到主目录下,解压:

unzip opencv-3.0.0-alpha

然后执行以下命令:

cd opencv-3.0.0-alpha

mkdir release

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

(这里可能会遇到CMakeList.txt找不到的问题,把“..”换成CMakeList.txt的所在目录opencv-3.0.0-alpha就可以了)

make

sudo make install

这个过程时间比较久,耐心等待。。。

下面配置library,打开/etc/ld.so.conf.d/opencv.conf,加入/usr/local/lib:

sudo su

vi /etc/ld.so.conf.d/opencv.conf

sudo ldconfig -v

然后更改变量:

sudo gedit /etc/bash.bashrc

添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH

至此opencv安装配置完成,最后随便写个hello.cpp,包含#include <opencv2/core/core.hpp>进行测试,在命令行输入:

g++ hello.cpp -o hello `pkg-config --cflags --libs opencv`

编译不报错就说明配置正确,其中有个问题弄了半天要注意,这个命令中的单引号不是平常的单引号,而是键盘上tab键上面那个符号。

(在14.04下opencv安装还算顺利,但是后来转到12.04下安装opencv-3.0.0出现一堆错误,折腾了很长时间,最终换成opencv-2.4.9,很快解决

中途可能会遇到这个错误:

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中的即可。

如果遇到这个错误,参考http://www.foreverlee.net/

/usr/bin/ld: cannot find -lcufft

/usr/bin/ld: cannot find -lnpps

/usr/bin/ld: cannot find -lnppi

/usr/bin/ld: cannot find -lnppc

/usr/bin/ld: cannot find -lcudart

编译命令改为g++ -L /usr/local/cuda/lib64/ hello.cpp -o hello `pkg-config --cflags --libs opencv`



4、安装其他依赖项

(1) Google Logging Library(glog),下载地址:https://code.google.com/p/google-glog/,然后解压安装:

$ tar zxvf glog-0.3.3.tar.gz

$cd glog-0.3.3

$ ./configure

$ make

$ sudo make install

如过没有权限就chmod a+x glog-0.3.3 -R , 或者索性 chmod 777 glog-0.3.3 -R , 装完之后,这个文件夹就可以kill了。

(历经坎坷,最终ubuntu14.04由于不知名错误实在无法解决,投入到了ubuntu12.02的怀抱。

这里需要安装另外两个依赖项:gflags、lmdb。不装之后编译会出问题。

参考:http://www.shwley.com/index.php/archives/52/

# glog

wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz
tar zxvf glog-0.3.3.tar.gz

cd glog-0.3.3

./configure

make && make install

# gflags

wget https://github.com/schuhschuh/gflags/archive/master.zip
unzip master.zip

cd gflags-master

mkdir build && cd build

export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1

make

sudo make install

# lmdbgit

clone git://gitorious.org/mdb/mdb.git

cd mdb/libraries/liblmdb

make && make install



(2)其他依赖项,确保都成功

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev

如果安装过程中出现错误,E: Sub-process /usr/bin/dpkg returned an error code (1),可能是因为sudo apt-get install出现到意外,不用着急,可以试试这个解决办法:(我没有遇到这个问题)

$ cd /var/lib/dpkg

$ sudo mv info info.bak

$ sudo mkdir info

$ sudo apt-get --reinstall install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev

如果使用的是2014年9月之后的新版Caffe,对于ubuntu 14.04来说,需要安装以下依赖文件:

$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

5、安装Caffe并测试

1. 切换到Caffe的下载文件夹,然后执行:

$ cp Makefile.config.example Makefile.config

修改新生成的Makefile.config文件,修改“BLAS := mkl”(我这里装的就是ATLAS,所以不用改,使用默认配置就行)。

希望使用nVidia开发的cuDNN来加速Caffe模型运算的同学,在安装完cuDNN之后,确保Makefile.config文件中的USE_CUDNN := 1处于启用状态。幸运的是,新版的Caffe已经默认集成了cuDNN的库文件,不需要做额外的设置了。

cuDNN的安装方法如下:

cuDNN
Introdution and Download

下载cuDNN之后解压,进入解压后的文件夹:

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

$ sudo cp libcudnn.so /usr/local/lib

$ sudo cp libcudnn.so.6.5 /usr/local/lib

$ sudo cp libcudnn.so.6.5.18 /usr/local/lib

链接cuDNN的库文件

$ sudo ln -sf /usr/local/lib/libcudnn.so.6.5.18 /usr/local/lib/libcudnn.so.6.5

不做链接,可能会出现这个报错:“./build/tools/caffe: error while loading shared libraries: libcudnn.so.6.5: cannot open shared object file: No such file or directory”那是因为cuDNN没有链接成功,只能做一下硬链接。

下面可以编译caffe-master了!!!

$ make all

$ make test

$ make runtest

这里出现libcudnn.so.6.5:cannot open shared object file,查看LD_LIBRARY_PATH发现环境变量没问题,折腾了半天发现cuda的配置文件没有加进去,就是上面安装MKL时候的cuda.conf忘了写了。

错误Fixed:

1. 如果提示: make: protoc: 命令未找到,那是因为protoc没有安装,安装一下就好了。

$ sudo apt-get install protobuf-c-compiler protobuf-compiler

2. (该问题已经在9月以后的Caffe中得到作者修复)提示“src/caffe/util/math_functions.cu(140): error: calling a host function("std::signbit ") from a globalfunction("caffe::sgnbit_kernel ") is not allowed”

解决办法:

修改 ./include/caffe/util/math_functions.hpp 224行

删除(注释):using std::signbit;

修改:DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = signbit(x[i]));

为:DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = std::signbit(x[i]));

得到作者,大神Yangqing Jia的回复,解决方法如上,没有二致。

六、使用MNIST数据集进行测试

Caffe默认情况会安装在CAFFEROOT,就是解压到那个目录,例如: home/username/caffe-master,所以下面的工作,默认已经切换到了该工作目录。下面的工作主要是,用于测试Caffe是否工作正常,不做详细评估。具体设置请参考官网:http://caffe.berkeleyvision.org/gathered/examples/mnist.html

1. 数据预处理

可以用下载好的数据集,也可以重新下载,我网速快,这里就偷懒直接下载了,具体操作如下:

$ cd data/mnist

$ sudo sh ./get_mnist.sh

2. 重建LDB文件,就是处理二进制数据集为Caffe识别的数据集,以后所有的数据,包括jpe文件都要处理成这个格式

$ cd examples/mnist

$ sudo sh ./create_mnist.sh

生成mnist-train-leveldb/ 和 mnist-test-leveldb/文件夹,这里包含了LDB格式的数据集

PS: 这里可能会遇到一个报错信息:

Creating lmdb...

./create_mnist.sh: 16: ./create_mnist.sh: build/examples/mnist/convert_mnist_data.bin: not found

解决方法是,直接到Caffe-master的根目录执行,实际上新版的Caffe,基本上都得从根目录执行。

~/caffe-master$ sudo sh examples/mnist/create_mnist.sh

3. 训练mnist

$ sudo sh examples/mnist/train_lenet.sh

至此,Caffe安装的所有步骤完结,下面是一组简单的数据对比,实验来源于MNIST数据集,主要是考察一下不同系统下CPU和GPU的性能。可以看到明显的差别了,虽然MNIST数据集很简单,相信复杂得数据集,差别会更大,Ubuntu+GPU是唯一的选择了。

测试平台:i7-4770K/16G/GTX 770/CUDA 6.5

MNIST Windows8.1 on CPU:620s

MNIST Windows8.1 on GPU:190s

MNIST Ubuntu 14.04 on CPU:270s

MNIST Ubuntu 14.04 on GPU:160s

MNIST Ubuntu 14.04 on GPU with cuDNN:35s

Cifar10_full on GPU wihtout cuDNN:73m45s = 4428s (Iteration 70000)

Cifar10_full on GPU with cuDNN:20m7s = 1207s (Iteration 70000)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: