洋洋洒洒一大篇,就没截图了,这几天一直在折腾这个东西,实在没办法,不想用Linux但是,为了Caffe,只能如此了,安装这些东西,遇到很多问题,每个问题都要折磨很久,大概第一次就是这样的。想想,之后应用,应该还会遇到很多问题吧,不过没办法了,骑虎难下!!这里有个建议是,如果将来要做大数据集,最好事先给Linux留多点空间,比如Imagenet,估计500G都不为过。另外,请阅读完,至少一个部分再进行动手操作,避免多余的工作,写作能力有限,尽请见谅。
        这篇安装指南,适合零基础,新手操作,请高手勿要吐槽!  
        简单介绍一下:Caffe,一种Convolutional Neural Network的工具包,和Alex的cuda-convnet功能类似,但各有特点。都是使用C++ CUDA进行底层编辑,Python进行实现,原作不属于Ubuntu 12,也有大神发布了Windows版,但其他相关资料较少,不适合新手使用,所以还是Ubuntu的比较适合新手。(相对而言)

       本文主要包含5个部分,包括:
第一部分 Linux安装
第二部分 nVidia驱动和CUDA Toolkit的安装和调试
第三部分 Caffe的安装和测试
第四部分 Python安装和调试
第五部分 Matlab安装和调试     

  • 第一部分 Linux安装
     Linux的安装,如果不是Linux粉,只是必须,被迫要用它来作作科研什么的,建议安装成双系统,网上方法很多,这里我就不详细写了,安装还算是傻瓜式的,和windows的过程类似,至于语言,如果觉得难度还不够大的话,完全可以装E文版的,甚至日文,德文~~~,我是装的简体中文版,我总共用分出的100G的空间来安装Ubuntu 14.04,这个版本是最新的版本,有个好处是,可以直接访问Windows8.1的NTFS分区,不用做额外的操作,而且支持中文,例如:$ cd /media/yourname/分区名字/文件夹名,当然GUI就更方便了
我的分区设置如下:
根分区: \  50G,
Swap交换分区:16G ,这里,我设置和我的内存一样,据说小于16G的内存,就设置成内存的1.5-2倍
Home分区:剩余的34G
       装好之后,重启电脑,有的人会直接进Linux,有的会直接Windows,谷歌或者百度解决方法吧,因为我也说不清这个具体怎么搞定。
我的台式机,搞定了,可是笔记本,把Windows分区也给破坏了,最后只能重装Windows 8.1,但因为笔记本没有nVidia的GPU所以不想再折腾了。
PS: 其实到现在感觉空间可能小了, 想想Imagenet 137G的训练文件,觉得应该把Home设置成300-500G以上,会更合适吧。下次安装的时候,再改了,现在暂时不想动了。
PS:今天还是重新装了,把home分区扩大到500G。所以建议真的要大数据实验的小伙伴,也趁早考虑。
 

PS: Ubuntu下访问网页总是很慢,让我深感它和Windows的差距,可是为什么还是有那么多人向往它呢?下面的办法可以解决部分访问的问题,特别是国外的网站,但是遇到一些调用了被墙的网站的东西,比如google的字体,还是没办法,仍然会在哪里转圈圈。这里似乎是操作系统的机制引起,Windows的浏览器会忽略那些错误,而Ubuntu下的浏览器会不停尝试。废话少说,部分问题的解决办法:
$ sudo apt-get install dnsmasq

$ sudo gedit /etc/dnsmasq.conf

找到 # resolv-file=

修改为:resolv-file=/etc/resolv.dnsmasq.conf
$ sudo cp /etc/resolv.conf /etc/resolv.dnsmasq.conf 

sudo gedit /etc/resolv.conf
删除所有域名服务器,保留:nameserver 127.0.0.1


 

 
  • 第二部分:nVidia驱动和CUDA Toolkit的安装和调试
PS:这里其实可以参考nVidia 官方提供的CUDA安装手册,非常相近,32页的,不过是全英文的,我就是参考这个文档完成后面的配置和验证工作。https://developer.nvidia.com/rdp/cuda-65-rc-toolkit-download#linux。一般要输入你的用户名和密码,就是下载6.5的那个账号。
一、Verify You Have a CUDA-Capable GPU
执行下面的操作,然后验证硬件支持GPU CUDA,只要型号存在于https://developer.nvidia.com/cuda-gpus,就没问题了
$ lspci | grep -i nvidia

二、Verify You Have a Supported Version of Linux

$ uname -m && cat /etc/*release
重点是“x86_64”这一项,保证是x86架构,64bit系统

三、Verify the System Has gcc Installed

$ gcc --version
没有的话就先安装吧,这个是必须的用来编译CUDA Toolkit,不过Ubuntu 14.04是默认有的

四、Download the NVIDIA CUDA Toolkit

$ md5sum <filename>
例如:md5sum cuda_6.5.11_rc_linux_64.run ,这个文件的正确 md5 = a47b0be83dea0323fab24ca642346351
这个感觉蛮重要,我第一次安装的时候md5就没通过,强制安装,结果就有问题,后面重新下载了再安装了一次

五、Handle Conflicting Installation Methods

根据官网介绍,之前安装的版本都会有冲突的嫌疑
所以,之前安装的Toolkit和Drievers就得卸载,屏蔽,等等

六、Graphical Interface Shutdown

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

七、Interaction with Nouveau

Nouveau是一个开源的显卡驱动,Ubuntu 14.04 默认安装了,但是它会影响nVidia驱动的安装,所以只有请他回老家了,sorry!


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是不存在的命令,也许是版本问题,或者少了什么包,不过无所谓,第二条命令也可以搞定,应该是一样的功能。(如果我理解错误,欢迎小朋友们指教,我会改正)
PS:其实,这一连串的工作,有点没搞懂,因为有的命令和文件不存在。原理理解了,但是步骤还是有点模糊,不过,我是照上面的操作完成了,后面的也没出问题,应该应付过去了吧。

八、Installation
鉴于安装过程中遇到的一些问题和启示,建议先安装官方最新版的显卡驱动,然后再安装CUDA,这里可能是CUDA内置的驱动不太完整,或者适应性差了一点。GTX显卡驱动的下载地址如下(Tesla版的驱动,请大家自己去nVidia的官网下载):
下载地址:http://www.geforce.cn/drivers
$ sudo sh ./NVIDIA-Linux-x86_64-340.24.run

 

切换到cuda_6.5.11_rc_linux_64.run 所在的目录,然后执行安装命令:
$ sudo sh cuda_6.5.11_rc_linux_64.run
再次提醒,安装前一定要执行 md5sum ,我第一次安装就是执行了,发现不一样,然后没有理它直接安装,导致安装的Sumary里显示Driver成功,Toolkit和Samples失败,第二次在装就好了。

至于如果发现md5检测不一致,怎么办?别逗了,去nVidia重新下载就行了,地球人都知道,别无限循环就好^_^!

这里会一路问你各种问题,基本上就是Accept-yes-Enter-yes-Enter-yes-Enter,  其实就是让你接受协议,然后安装的默认位置确认等等,recruit就别自定义安装位置了,默认才是天堂。
安装完会提示丢失了四个库:libGLU.so, libx11.so, libxmu.so, libxi.so 这个木有关系,下一步就是解决这个问题的。
 
九、Extra Libraries
安装一些必要的库文件,譬如:OpenGL (e.g., Mesa), GLU, GLUT, and X11 (including Xi, Xmu, and GLX).
$ sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
这个可以切换到GUI界面在操作,要不然那些提示信息,都是乱码,什么都看不懂,不过如果你的系统是E文的,这句话忽略。
这里,保证网络不要中断就行了,吐槽一下:该死的锐捷认证,这Ubuntu都出到14.04了,你12版本的客户端还没出来,害我之前折腾了1整天网络,现在被迫沦落到蹭网族,有点想吐的感觉!!!!

十、驱动装完了,可以回到GUI界面了,也可以继续留这里玩文本。。。

$ sudo start lightdm
 

十一、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

2. (Optional) Install Writable Samples

$ cuda-install-samples-6.5.sh <dir>
安装到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
我这里还差接近400MB的文件要下载,它是全自动的,所以只要保证网络畅通,一杯咖啡在手,然后就可以XXX了。可悲的是,我这里天色已晚,隔壁的Wifi也断了,笔记本的360随身Wifi连上一会也断了,只有收东西回宿舍,明天再继续了。看看表,靠,00:03,今天打卡时间又错过了。

次日,这里安装完,就可以编译了,切换目录到~/NVIDIA_CUDA-6.5_Samples,记性没问题的话,应该还记得它是安装在Home文件夹的,穿越过去就好了,然后执行:

$ 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的安装和测试


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


一、安装BLAS,这里可以选择(ATLAS,MKL或者OpenBLAS),我这里使用MKL,首先下载并安装英特尔® 数学内核库 Linux* 版MKL,下载链接是:https://software.intel.com/en-us/intel-education-offerings,可以下载Student版的,先申请,然后会立马收到一个邮件(里面有安装序列号),打开照着下载就行了。下载完之后,要把文件解压到home文件夹(或直接把tar.gz文件拷贝到home文件夹,为了节省空间,安装完记得把压缩文件给删除喔~),或者其他的ext4的文件系统中。
接下来是安装过程,先授权,然后安装:
$ tar zxvf cpp_studio_xe_2013_sp1_update3.tar.gz  (如果你是直接拷贝压缩文件过来的)
$ chmod a+x /home/username/cpp_studio_xe_2013_sp1_update3 -R
$ sudo ./install_GUI.sh
PS: 这里安装的时候,我遇到一些插曲,先在这里特别提醒大家一下,避免在犯错,这些都是我安装的时候,遇到的"little bug"。
1. 一个很2的问题,在启动linux的时候,手贱点了一下系统自动更新,可能正好更新到某个关键组件,授权的时候,始终无效,这个大概解决就是记得更新完,重启,然后关机,我弄的时候,重启也没用。
2. 记得把解压后的studio_xe软件包丢到home下,或者干脆直接在home里解压,注意这里它是保存在home/username, 这里的username是你的用户名。这一步主要是,让安装程序处于linux的文件系统中,为了修改权限做保证。
3. 使用chmod对文件夹及其子文件进行授权,安装程序是install_GUI.sh,它调用了install.sh,接下来又调用了一连串的文件,这些文件都必须具有可执行的权限,所以,你懂了~照着上面的步骤就好了
4. 安装的时候,可以安装到root权限下,或者sudo权限,我是装在root权限下,避免麻烦,这时就必须确保已经为root设置过密码了,然后会让你输入你申请的时候发给你的序列号。没设置的话,执行:

$ sudo passwd root

5. Everything is OK!
PS2:我不会告诉你,我第一次安装的时候,不仅仅装了Studio XE,还装了MKL,也装了OpenBLAS,为了装OpenBLAS还装来gFortran编译器,因为一直编译Caffe不通过,其实这都是白费功夫,都是没有认真读官网的说明导致的。至于这集中库的性能,应该是MKL>OpenBLAS>ATLAS,官网的介绍也提到。在装完MKL,需要做的一件事是:SET BLAS := open in Makefile.config,这个我在后面安装Caffe到时候会写。

二、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

三、安装OpenCV

1. 下载地址:https://github.com/jayrambhia/Install-OpenCV,如果觉得难度不够的话,可以选择官网的安装包:http://opencv.org/,我这里是根据大神编译过的版本进行安装的。

2. 切换到文件保存的文件夹,然后安装依赖项:

sudo ./dependencies.sh

3. 安装openCV,因为不知道有什么区别,所以就安装最新版opencv2_4_8吧,有偏好可以根据自己的要求进行设置: 

sudo ./opencv2_4_8.sh
保证网络畅通,因为软件需要联网这里时间较长,请耐心等待。。。,所以就安四、安装其他依赖项
 
1. Google Logging Library(glog),下载地址:https://code.google.com/p/google-glog/,然后解压安装:
$ tar zxvf glog-0.3.3.tar.gz
$ ./ configure


$ make
$ sudo 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

五、安装Caffe并测试

1. 切换到Caffe的下载文件夹,然后执行:
$ cp Makefile.config.example Makefile.config
修改新生成的Makefile.config文件,修改“BLAS := mkl”,这个非常重要。


$ make all
$ make test

$ make runtest 
错误Fixed:
1. 如果提示: make: protoc: 命令未找到,那是因为protoc没有安装,安装一下就好了。
$ sudo apt-get install protobuf-c-compiler protobuf-compiler

2. 提示“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]));
这个方法感谢网友:嗆熱DJ$998。
得到作者,大神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格式的数据集

3. 训练mnist

$ cd examples/mnist
sudo sh ./train_lenet.sh

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

测试平台:i7-4770K/16G/GTX 770/CUDA 6.5
Windows8.1 on CPU:620s
Windows8.1 on GPU:190s
Ubuntu 14.04 on CPU:270s 
Ubuntu 14.04 on GPU:160s
 
  • 第四部分 Python安装和调试


1. 安装caffe必须的一些依赖项:

$ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython 

 
2. 配置路径,编辑Makefile.config
PYTHON_INCLUDE := /usr/include/python2.7 \
                                    /usr/lib/python2.7/dist-packages/numpy/core/include
PYTHON_LIB := /usr/local/lib


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

3. 这里非常重要的是,为了确保支持Caffe Notebook里的程序,需要使用到IDE环境,并且支持iPython输出。 

 
  • 第五部分 Matlab安装和调试
1.下载
由于该软件为商业软件,请大家自行寻找,安装学习,并确保不使用做商业目的,下载24小时删除......
 

2. 预准备


 选择Mathworks.Matlab.R2014a.Unix.iso - 右键 - 使用磁盘映像挂载器打开” 

进入装载的虚拟光盘,拷贝全部文件至home/Matlab 文件夹 
(PS:我的原则是能GUI就GUI,喜欢CMD的可以参照执行) 

复制Crack/install.jar至 home/Matlab/java/jar/ 并覆盖源文件
 
3. 授权安装文件夹
$ chmod a+x Matlab -R

4. 安装


$ sudo ./instal

选项:不使用Internet安装
序列号: 12345-67890-12345-67890  
默认路径:/usr/local/MATLAB/R2014a 

激活文件:license_405329_R2014a.lic
拷贝 libmwservices.so 至 /usr/local/MATLAB/R2014a/bin/glnxa64 

安装完毕,程序默认启动路径:

$ sudo MATLAB/R2014a/bin/matlab  

5.创建快捷方式

1. 软件中心搜索matlab 
2. 选择安装目录:/usr/local/MATLAB/R2014a

6.配置Caffe
修改文件:Makefile.config
MATLAB_DIR := /usr/local/MATLAB/R2014a

7.编译Matlab用到的caffe文件
$ make matcaffe