感谢欧新宇的分享,此配置贴大部分参考他的博客。

http://ouxinyu.github.io/Blogs/20140723001.html

此贴历经坎坷,一入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可以),所以没有进一步尝试,反正台式机环境搭好了。
如果遇到以上问题,可以移步:
可能装了这个bumblebee显卡调节程序可能解决问题,也可以参考此贴:
还有一个之前没找到的帖子,白白浪费了那么长时间。。。用prime解决这个问题
百度经验也有:
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)官网提供的操作:(感觉上这一小步,可以略过,不执行,执行了也会报错)
$ sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
然后重新生成initrd文件
$ sudo dracut /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
$ export PATH=/usr/local/cuda-6.5/bin:$PATH

$ export LD_LIBRARY_PATH=/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之后解压,进入解压后的文件夹:
$ 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默认情况会安装在$CAFFE_ROOT,就是解压到那个目录,例如:$ 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)