Caffe on Ubuntu 15.04

来源:互联网 发布:淘宝中差评扣分 编辑:程序博客网 时间:2024/06/06 01:33

Caffe在Yangqing Jia创建的时候,搭建于Ubuntu系统上,虽然后来也出现了Windows的版本,但官方对Ubuntu平台的介绍为“the standard platform”,即标准平台,在很多库的使用和环境的配置方面,Windows系统无法于Ubuntu系统相比,性能也会受到一定影响。因此本文中Caffe安装配置在Ubuntu系统上。

    本章主要介绍了如何搭建自己的Caffe平台,包括如何安装Ubuntu系统,如何解决双系统引导问题,如何配置Caffe依赖项等。最后是本章小结。用结构图表示如下:

 

图3-1 章节结构

3.1 Ubuntu系统配置

Ubuntu系统是Linux系统的一种,它基于Debian发行版和GNOME桌面环境。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统,它可免费使用,并带有社团及专业的支持。

本文使用的电脑的操作系统为Window 2008服务器,配有GPU显卡用于并行计算。由于Windows系统下存储了资料并安装有软件,所以无法删除Windows系统,需要建立WindowsUbuntu的双系统。本文使用的是Ubuntu 15.04

 

3.1.1 压缩卷

计算机-右键管理-打开计算机管理。

图3-2 磁盘分配信息

 

从图中可以看出,该计算机一共有3块磁盘。安装caffe需要安装一系列配套的库和软件,例如nVidia CUDA,MatlabPythonMKLopencv等,因而需要给Ubuntu系统分配大约100 G的硬盘空间,以保证系统的正常运行。

因为之前的磁盘空间已经装有Windows操作系统,想要重新获得空间,就要利用硬盘未经使用的部分。Windows自带有解决这一问题的功能,即通过压缩卷的形式,来腾出未使用的空间。

在最后一个磁盘的最后一个分区(L:),右键压缩卷,得到100 G的未分配或可用空间。由于windows系统对分区系统存在保护措施,以及一些文件的移动是受到限制的,在压缩卷之前,需要进行以下操作:

1)计算机-属性-高级系统设置-系统保护-配置-关闭当前操作的(L:)分区的系统保护,并在操作完成后恢复;

2)计算机-属性-高级系统设置-高级-性能设置-高级-关闭当前操作的(L:)分区存在的虚拟内存;

3)计算机-右键管理-服务和应用程序-服务-关闭Cryptographic services服务。该服务会导致catdb文件无法进行转移,使得压缩磁盘操作被阻挡,在完成磁盘压缩卷后,重新打开该服务。

3.1.2 硬盘安装

在已经有Windows系统的情况下,使用硬盘安装Ubuntu系统是一种十分方便而快捷的方法。

除了在官网上下载Ubuntu 15.04版本对应的ubuntu-15.04-desktop-amd64.iso镜像文件,还要准备用于添加系统启动入口的EasyBCD软件。

将准备好的ubuntu-15.04-desktop-amd64.iso镜像文件用压缩软件或者虚拟光驱打开,找到casper文件夹,把里面的initrd.lzvmlinuz解压到分区(L:),然后将.disk文件夹解压到分区(L:),最后把ubuntu-15.04-desktop-amd64.iso文件复制到分区(L:)

下面通过使用EasyBCD软件来添加Ubuntu的安装入口。

 

 

图3-3 EasyBCD软件界面

 

 

选择左边第三条“添加新目录”- 右边选“NeoGrub”- 安装保存后,配置menu.lst文件,一个配置的例子如下:

 

menu.lst

配置文件

title Install Ubuntu 15.04

root (hd2,1)

kernel (hd2,1)/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-15.04-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8

initrd (hd2,1)/initrd.lz

 

Windows操作系统中,硬盘的序列从0开始,分别为hd0, hd1, hd2,…每个硬盘最多可设置4个主分区,其它为逻辑分区,主分区的序列标号从0开始。

上面代码根据每个电脑设置的不同,需要进行相应的修改。

1)(hd2,1) 中,hd2表示这是系统的第3块硬盘,1表示这是该硬盘的第2个主分区,即分区(L:)(hd2,1) 即指明了用于安装Ubuntu系统的文件存放的位置位于分区(L:)

2)实际使用的文件名。如果在ubuntu-15.04-desktop-amd64.iso镜像文件casper文件夹得到的是vmlinuz,那么后缀就需要去掉,以免识别出错。ubuntu-15.04-desktop-amd64.iso也需要根据安装Ubuntu系统的不同来进行更改。

关闭并保存menu.lst后,可以发现在C盘多了一个NeoGrub文件和一个NST文件夹。NST文件夹下面放有menu.lstNeoGrub.mbr两个文件。这些文件在系统启动时,会被自动搜索,用于引导Ubuntu安装启动项。

重启就会看到有2个启动菜单可以选择。我们选择 NeoGrub 导加载器这个选项,进入Ubuntu系统安装界面。

3.1.3 注意事项

    在点击安装之前,按Ctrl+Alt+T 打开终端,输入代码:sudo umount -l /isodevice这一命令取消掉对光盘所在驱动器的挂载,否则分区界面找不到分区。

如图2.4所示,在选择安装类型时,因为是在windows系统的基础上安装双系统,因而,选择“其他选项”,自定义安装路径。

 

图3-4 安装类型的选择

 

在分配Ubuntu系统时,给“/”分区,即根目录分区分配105034MB98GB的空间,再分配2048MB2GB的交换空间。由于选择的是逻辑分区,所以两个分区的标号从sdc5开始,分别为sdc5sdc6

 

图3-5 安装空间分配

安装中可能会遇到一系列的问题,经过多次试验,总结如下:

1)分区界面找不到分区。原因:没有使用sudo umount -l /isodevice这一命令取消掉对光盘所在驱动器的挂载。

2)安装进程卡在“正在scsi10,0,0)(sda)设备的第*分区上创建ext4文件系统”。原因主要有两个:一是之前的空间残存的内容系统没有删除干净,重启回到windows系统后,格式化用来建立Ubuntu系统的未分配空间或可用空间;二是建立的分区过多,超过了允许的数目,一个硬盘最多允许4个主分区,逻辑分区的数量也是有限制的。如果在安装Ubuntu系统时,划分了过多的分区,例如“/boot”分区,“/usr”分区,“/home”分区,也可能会导致分区创建的失败。这时候可以选择只建立“/”分区即根分区和交换分区。

3)正在复制已安装的软件包。原因:这一情况多发生在之前已经装过一遍Ubuntu系统,后来出现错误又删除了该系统,但没有清理干净硬盘数据,同样重启回到windows系统后,格式化用来建立Ubuntu系统的未分配空间或者可用空间,即可解决问题。

如果安装是正常的,只会出现如下所示的界面:

 

 

图3-6 正常安装界面

即显示正在完成文件复制。

3.1.4 双系统引导

    如果在安装Ubuntu分区的时候,如图3-5所示时,将安装启动引导器的设备的位置设置为第一块硬盘stda,这样会导致双系统的引导变成Ubuntu系统的grub引导,如果我们不小心删除了Ubuntu系统,或者Ubuntu系统出现错误,就会导致Windows系统下面的重要资料丢失或无法访问,因此,需要使用Windows系统的mbr引导方式。

当使用EasyBCD来在win7下配置引导时,选择“Add New Entry->选择“Linux/BSD->选择“GRUB2->自己取的Name->Device选择Ubuntu所在分区->Add Entry

这样在登入Ubuntu 15.04系统的时候,会进入到grub命令行界面,如下图所示,从而无法正常使用系统。

 

图3-7 异常进入grub命令界面

 

Grub有下面所示的用法:

1. help命令可以调出下面能够使用的指令。

2. ls可以显示下面有哪些文件,在此状态下,输入ls指令,会显示出C盘下的文件和文件夹,说明此时系统并没有进入到Ubuntu系统引导分区。

3. root (hd2,4)后,会显示(hd2,4)Ubuntu系统的“/”分区下面的内容。

4. boot reboot指令控制开机和重启。

5. 当输入“Cat (hd0,”这段不全的指令时,按tab键可以自动补全。一方面可以看到一共有哪些分区,是什么类型的磁盘文件;另一方面可以方便地补齐文件名,避免手动输入的繁琐和错误。

了解指令使用方法后,我们再尝试进入Ubuntu系统:

 

 

 

尝试配置指令

会产生Kernel Panic的错误

root (hd2,4)

kernel (hd2,4)/vmlinuz-3.19.0-15-generic root=/dev/sdc5

initrd (hd2,4)/initrd.img-3.19.0-15-generic

 

    上面的指令中,因为windows下面是从(hd2,0)开始算起的,而ubuntu下面是从sdc1算起的,所以(hd2,4)对应sdc5

    这个时候会产生如下的错误:

 

图3-8 Kernel Panic异常

 

Kernel panic - not syncing: Attempted to kill init!错误

因此,必须查看Ubuntu系统自身用来引导的代码,来修改此处的引导文件。

Ubuntu系统中实际在/boot/grub/grub.cfg中对整个引导过程给出了具体的代码。由于重启后Windows系统无法访问Linux的文件,所以需要下载一个名为Linux Reader的软件来查看Ubuntu/boot/grub下面的grub.cfg文件。文件中和引导相关部分如下图所示:

 

图3-9 grub.cfg文件部分内容

 

最终,我们可以使用下面的指令正确地进入Ubuntu的图形界面。

 

正确配置指令

成功进入系统

root (hd2,4)

kernel (hd2,4)/boot/vmlinuz-3.19.0-15-generic root=UUID=3982a167-4a7e-4a20-a6ca-7db8ea784b10 ro quiet splash $vt_handoff

initrd (hd2,4)/boot/initrd.img-3.19.0-15-generic

 

    可以看出,主要的区别在于添加了UUIDUUID的含义是通用唯一识别码(Universerlly Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation, OSF)的组织应用在分布式计算环境领域的一部分。

通过使用UUIDUbuntu系统就可以准确地找到启动文件所在的磁盘分区的位置,在vmlinuz-3.19.0-15-genericinitrd.img-3.19.0-15-generic两个文件的引导下进入图形操作界面。

但是,如果我们每次都需要用手动输入这些命令,才能进入系统,就显得过于繁琐,因而需要找到更为方便的方法。NeoGrub正好具有这样强大的功能。

在用于引导进入Ubuntu安装界面的menu.lst中的内容和刚刚我们用来进入Ubuntu图像操作界面的代码具有惊人的相似性。都先使用root命令来进入对应的磁盘分区,再用kernel命令和initrd命令实现了内核的引导。

所以我们可以考虑把它们放在一起使用,因而我们得到下面的代码:

 

menu.lst

双系统引导

default=0

timeout=10

 

title Ubuntu 15.04

root (hd2,4)

kernel (hd2,4)/boot/vmlinuz-3.19.0-15-generic root=UUID=3982a167-4a7e-4a20-a6ca-7db8ea784b10 ro quiet splash $vt_handoff

initrd (hd2,4)/boot/initrd.img-3.19.0-15-generic

 

title Install Ubuntu 15.04

root (hd2,1)

kernel (hd2,1)/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-15.04-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8

initrd (hd2,1)/initrd.lz

 

这里面default0意思是说默认Ubuntu15.04在前,timeout是给用户选择的时间长度。下面的两端就是各自的引导代码了。

再使用EasyBCD的“编辑引导菜单”,将“NeoGrub命令提示符”改成实际需要的Ubuntu 15.04,即完成了双系统引导的全部配置工作。

下面是进入系统的界面。先选择“Ubuntu 15.04”,再选择“Ubuntu 15.04”即可。

 

图3-10 Windows启动管理器

 

 

图3-11 NeoGrub引导界面

 

l  其他配置和Ubuntu的卸载

     在使用Ubuntu系统的时候,由于习惯了Windows的方便与便捷,很多时候一些基本的联网和命令执行也会遇到问题,下面是本文在使用过程中碰到的几个重要的例子:

1)连接有线网,在校园网中心下载rjsupplicant.sh文件后,使用如下的代码连接网络:sudo ./rjsupplicant.sh -a 1 -d 1 -n eth0 -s internet -u账号-p密码。

2)执行任意的shell script文件即.sh文件时报错Syntax error。代码对于标准bash而言没有错,但因为Ubuntu为了加快开机速度,用dash代替了传统的bash,解决方法是取消dash,打开终端,输入sudo dpkg-reconfigure dash,在选择项中选No即可。

3)使用系统提供的中文输入法的同时,将Ubuntu主文件夹里的中文文件夹名称改成英文。在终端中输入命令:

    export LANG=en_US      

    xdg-user-dirs-gtk-update

    跳出对话框询问是否将目录转化为英文路径,同意并关闭。再输入命令:     

    export LANG=zh_CN

关闭终端重启,下次进入系统,系统会提示是否把转化好的目录改回中文。选择不再提示,并取消修改,主目录的中文转英文就完成了。

4)卸载Ubuntu:因为设置的引导是Windowsmbr引导,所以可以很方便地直接删除Ubuntu系统,在Win7下,在计算机(Computer)上点右键->管理(Manage)->磁盘管理(DiskManagement):有2个没有卷标名称(卷标名称就是驱动器号,如C:,D:,E:,)的主分区(PrimaryPartition)就是Ubuntu的分区,分别在这2个分区上点右键,选择删除卷(DeleteVolume),删除卷之后,分区窗口颜色会变为绿色,并合并为一个窗口。

3.2 Caffe的配置

Caffe的官网[19]中给出了必须的依赖项:

1)使用GPU模式的时候,必须安装CUDA,官网推荐CUDA使用7以上的版本,CUDA 6.*的版本同样可以适用,但5.55.0的版本不推荐使用。这里也体现出了Caffe的一个特性,即他是可以在GPUCPU模式下进行切换的,即使没有GPU,仍然可以使用Caffe

2)BLAS (Basic Linear Algebra Subprograms),即基础线性代数子程序库,里面拥有大量已经编写好的关于线性代数运算的程序,从而可以提高Caffe架构的整体计算速度。BLAS3种选择ATLAS, MKL, or OpenBLAS

3)Boost的版本 >= 1.55Boost是一个可移植的C++源码库(portable C++ source libraries ),它与C++标准库兼容。

4)protobuf, glog, gflags, hdf5Protocol Buffer(简称Protobuf), gloggflags都是Google公司开发的,它们分别是Google内部的混合语言数据标准,基于程序级记录日志信息的c++库和命令行参数处理的开源库。HDF是美国国家超级计算应用中心(NCSA)创建的,用于存储和分发科学数据的一种自我描述、多对象文件格式。

以及一些其他的可选的依赖项:

1)OpenCV 的版本,需要至少2.4以上的版本,包括3.0

2)IO 库:例如lmdb, leveldb。需要注意的是,leveldb需要snappy

3)cuDNN,用来做GPU加速。

下面介绍具体的安装配置过程。

3.2.1 基本依赖项

基本依赖项

安装指令

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

 

 

 

 

 

 

l CUDA的安装

CUDA的安装包可以直接在NVIDA官网(https://developer.nvidia.com/cuda-downloads)上下载。推荐使用*.deb的方法,即下载好离线版的deb文件再安装。该方法较为简单,不需要切换到tty模式。这里以CUDA 7.5为例。

CUDA 7.5

安装指令

sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb

sudo apt-get update

sudo apt-get install cuda

 

 

 

 

 

l BLAS的安装

 

BLAS一共有ATLASOpenBLASMKL三种选择和Caffe的官网上给出了安装ATLAS的方法,即

sudo apt-get install libatlas-base-dev

在ATLAS,OpenBLASMKL三者中,MKLCPU性能最好,OpenBLAS其次,ATLAS最差。本文中使用的是Intel公司的MKL库。

首先下载并安装学生版本的英特尔® 数学内核库 (MKL) [23],即Intel(R) Parallel Studio XE Cluster Edition。下载完之后,或直接把tar.gz文件拷贝到home文件夹。

MKL

安装指令

tar zxvf parallel_studio_xe_2016_update2.tgz

chmod a+x parallel_studio_xe_2016_update2 -R

sh install_GUI.sh

 

 

 

 

 

 

安装的时候需要使用root权限。此外指令中的压缩包名称需要具体的根据自己的版本进行修改。若文件不可执行,使用“chmod a+x”命令使文件可执行。

 

l Protobuf, Glog, Gflags的安装

Ubuntu 15.04版本中,所有依赖项都已经打包好,可以直接使用下面的命令安装:

protobuf, glog, gflags

Ubuntu 14.04以上版本安装指令

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

 

 

 

 

如果是Ubuntu12.04的版本,则需要

protobuf, glog, gflags

Ubuntu 12.04版本安装指令

# 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 && make install

# lmdb

git clone https://github.com/LMDB/lmdb

cd lmdb/libraries/liblmdb

make && make install

 

 

 

     

 

 

 

 

 

 

 

 

 

 

 

 

 

    需要注意的是,此时glog和最新的gflags 2.1的版本不匹配,要先安装glog

 

3.2.2 扩展依赖项

l OpenCV 3.0.0的安装

    1. 下载并编译OpenCV [24]

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

sudo sh Ubuntu/dependencies.sh

 

      

    3. 切换目录Ubuntu\3.0\安装OpenCV 3.0.0:    

sudo sh opencv3_0_0.sh

 

 

  保证网络畅通,因为软件需要联网,这里时间较长。

l Matlab的安装

   本文中使用的是Matlab R2015b版本。首先下载R2015b_glnxa64.iso安装文件和相关的破解文件。具体的安装步骤如下:

   1. 挂载ISO镜像文件

sudo mount -o loop R2015b_glnxa64.iso /mnt

       

 

      使用df -h查看磁盘情况,发现mnt分区使用率为100%则正常挂载。

      出现mount: /dev/loop0 is write-protected, mounting read-only提示,忽视即可。

   2. 执行安装过程,选择不联网安装,序列号在~/crack/readme.txt文件中。   

cd /mnt

sudo ./install

 

 

 

   3. 安装完毕,采用不联网激活,找到相应的激活文件*.lic,并且将~/crack/bin/中的文件复制到~/MATLAB/R2015b/bin中。

     转到bin目录,终端切换到此目录执行sudo ./matlab,因为用的是不联网安装,选择crack文件夹下面的license_standalone.lic

     本文中使用的指令如下:

sudo cp /home/panfengli/Documents/Matlab_add/Matlab_2015b_Linux64_Crack/R2015b/bin/glnxa64/* /usr/local/MATLAB/R2015b/bin/glnxa64

 

    

 

   4. 解挂ISO镜像。

sudo umount /mnt

     

    如果出现umount: /mnt: target is busy的情况,可以先关掉终端,再运行查看是否解挂,df -h查看磁盘情况。

 

l GCC/G++版本问题的解决

   因为Ubuntu 15.04gcc/g++版本是4.9.2,而Matlab R2014a/R2015a/R2015b的版本是4.7.x所以在使用matla调用mex文件的时候,基本上都会报错。

   选择降级安装gcc/g++版本至4.7.x

   1. 下载gcc/g++ 4.7.x

sudo apt-get install -y gcc-4.7

sudo apt-get install -y g++-4.7

 

 

 

   2. 链接gcc/g++实现降级

cd /usr/bin

sudo rm gcc

sudo ln -s gcc-4.7 gcc

sudo rm g++

sudo ln -s g++-4.7 g++

     

 

 

 

 

 

3.2.3 Caffe-Master的安装和测试

   Caffe-Master可以在官网提供的Github链接上 [25]下载。或者使用git clone命令保存在本地(git clonehttps://github.com/BVLC/caffe ~/caffe-master)

   1. MKLCUDA的环境设置

     a) 新建intel_mkl.conf, 用gedit编辑:   

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

 

 

        其中内容如下

/opt/intel/lib/intel64

/opt/intel/mkl/lib/intel64

  

 

   

      b) 新建cuda.conf,用gedit编辑:    

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

 

 

        其中内容如下

/usr/local/cuda/lib64

/lib

 

 

 

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

sudo ldconfig -v

    

 

    2. 安装pycaffe必须的一些依赖项

Pycaffe依赖项

安装指令

sudo apt-get install -y 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

    

 

 

 

 

 

 

    3. 安装配置nVidia cuDNN 加速Caffe模型运算

   a)安装前请去先官网 [26]下载最新的cuDNN

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

sudo cp lib64/libcudnn.* /usr/local/lib

 

       

   

       b)链接cuDNN的库文件

sudo ln -sf /usr/local/lib/libcudnn.so.4.0.7 /usr/local/lib/libcudnn.so.4

sudo ln -sf /usr/local/lib/libcudnn.so.4 /usr/local/lib/libcudnn.so

sudo ldconfig -v

 

 

 

 

    4. 切换到Caffe-master的文件夹,生成Makefile.config配置文件,执行:

cp Makefile.config.example Makefile.config

 

 

    5. 配置Makefile.config文件(仅列出修改部分)

        a) 启用CUDNN,去掉"#"

USE_CUDNN := 1

 

 

        b) 配置一些引用文件(解决新版本下,HDF5的路径问题)

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

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

  

 

 

     

    

       c) 启用Intel Parallel Studio XE 2016

BLAS := mkl

 

 

       d) 配置路径,实现caffePythonMatlab接口的支持

PYTHON_LIB := /usr/local/lib

MATLAB_DIR := /usr/local/MATLAB/R2014a

 

 

             e). 启用OpenCV 3.0,去掉"#"

OPENCV_VERSION =3

 

 

    6. 编译caffe-master

     "-j16"是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。

make all -j16

make test -j16

make runtest -j16

 

 

  

       编译PythonMatlab用到的caffe文件  

make pycaffe -j16

make matcaffe -j16

 

 

 

    需要注意的是,执行前要在终端中输入

 export MKL_CBWR=AUTO

 

 

    否则会因为MKL库不是自动调用的,产生下面的错误

[ FAILED] AdaGradSolverTest/0.TestSnapshotShare, where TypeParam = caf  fe::CPUDevice<float> (126 ms)

 

 

 

如果Caffe安装正确,make runtest -j16执行完成后,会提示如下信息:一共通过了2003个测试。

 

图3-12 runtest运行正确提示信息

3.3 本章小结

    本章十分具体而详尽地讲述了如何安装Ubuntu系统,解决双系统引导问题,配置Caffe的依赖项。本章的亮点在于给出了全面的的注意事项,这些注意事项是在实际操作中遇到的,对于后来的借鉴参考具有重要的意义,避免了后来者犯重复的错误而造成时间的浪费和效率的低下。


0 0