caffe平台搭建~~sjtuicat 实验室倾情奉献!

Caffe+Ubuntu_16.04.3+CUDA_8.0_linux+Cudnn_5.1v

硬件配置:

双硬盘双系统,512G固态硬盘装了win10,2T机械硬盘装了Ubuntu16.04
双显卡:集显加独显(GTX 1080Ti)
先安装win10,再装Ubuntu16.04,都是用UltraISO制作了U盘引导盘安装,安装win10+Ubuntu双系统不做详述。

软件包:

SW_DVD9_Win_Pro_10_1511.1_64BIT_ChnSimp_MLF_X20-93912.ISO

Ubuntu_16.04.3_desktop_amd64.iso

caffe-master.zip

cuda_8.0.44_linux.run

cudnn-8.0-linux-x64-v5.1.tgz

NVIDIA-Linux-x86_64-375.82.run

matlab2014a_for_Linux

parallel_studio_xe_2017_update5

opencv-3.0.0.zip

ippicv_linux_20141027.tgz

opencv3_0_0.sh

dependencies.sh

参考博文:Ubuntu16.04 + cuda8.0 + GTX1080 + matlab14.04a + Opencv3.0 + caffe 安装教程

博文链接http://blog.****.net/lee_j_r/article/details/52693724

下载链接:http://pan.baidu.com/s/1o8Pzlrk

提取码:w5rr

参考bug: http://blog.****.net/tsb831211/article/details/78443576


一,安装Win10+Ubuntu双系统

1,Ubuntu安装时黑屏处理

问题描述:Ubuntu使用U盘安装时,出现语言选择,但是Enter安装时,显示器显示没有信息,进入黑屏状态

原因分析:Ubuntu对于显卡支持有问题,需要手动添加显卡驱动选项

解决办法:安装时,选择"install ubuntu"后,按"e"进入编辑模式,进入命令行模式, 然后去掉"--"后,依照不同显卡进行不同显卡驱动选项的添加(将 '---' 改为 'nomodeset')

1.Intel 82852/82855 或8系列显示晶片:i915.modeset=1或i915.modeset=0

2.Nvidia:nomodeset

3.其它厂牌(如ATI,技嘉):xforcevesa或radeon.modeset=0 xforcevesa

[DELL T3400显卡为Nvidia FX580,选择nomodeset]

回车安装(F10安装)

安装结束后,系统进入黑屏

1.开机,进入grub画面(如果硬碟没有别的OS,请开机时按住shift不放才会有grub画面)
2.按"e"进入编辑开机指令的模式, 同样找到"quite splash"并在后面加上对应的字。
3.按"Ctrl+X"启动系统.
4.进去系统之后编辑"/etc/default/grub"这个档案(要管理者权限sudo)。
Ubuntu>打开终端机,输入sudo gedit /etc/default/grub
5.找到这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
一样把对应的字输入进去. 例如nvidia的显卡:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
6.存档,并重新开机。

二,安装Nvidia显卡驱动

1.Nvidia官网查找显卡对应驱动型号

输入下列命令行

sudo apt-get update

sudo apt-get install nvidia-375

sudo apt-get install mesa-common-dev

sudo apt-get install freeglut3-dev

(注意:上述NVIDIA显卡驱动型号 nvidia-384换成对应型号nvidia-***)

重启系统让显卡驱动生效

输入一些命令测试显卡驱动

nvidia-smi

三,安装cuda-8.0

1、官网下载“cuda_8.0.27_linux.run”

(建议先在windows下载再拷过去),或者从我给的百度网盘里也有下载;
2、sudo sh cuda_8.0.27_linux.run
 

CUDA 也有好几种安装方法,但不推荐用deb方法,因为deb包里自带了一个旧的显卡驱动,不支持1080,安装完后需要重新安装367版本的显卡驱动。

有可能要加 --override 参数:

这个参数会覆盖原来的驱动,如果没出现问题可以不需要这个参数。

3、sh cuda_8.0.27_linux.run --override

启动安装程序,一直按空格到最后,输入accept接受条款 
输入n不安装nvidia图像驱动,之前已经安装过了 
输入y安装cuda 8.0工具 
回车确认cuda默认安装路径:/usr/local/cuda-8.0 
输入y用sudo权限运行安装,输入密码 
输入y或者n安装或者不安装指向/usr/local/cuda的符号链接 
输入y安装CUDA 8.0 Samples,以便后面测试 
回车确认CUDA 8.0 Samples默认安装路径:/home/pawn(pawn是我的用户名),该安装路径测试完可以删除

4、添加环境变量

sudo gedit ~/.bashrc  

export CUDA_HOME=/usr/local/cuda-8.0    

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH   

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

保存退出后使其立刻生效

source ~/.bashrc


5、安装例程测试

(1)查看cuda版本

    nvcc --version

(2)最后进入cuda自带的例子中看cuda是否已正确配置

    cd ~/NVIDIA_CUDA-8.0_Samples/

    make -j16

这里可能出现gcc、g++版本过高的问题。

两种方法:

a、直接下载低版本的gcc、g++替换之

ubuntu16.04 默认安装的gcc版本为gcc-5.4,(可用gcc --version查看)有时可能需要低版本的,所以我们先安装gcc-4.8.5 

sudo apt-get install -y gcc-4.8 g++-4.8  
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20 
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20 
cd /usr/bin  
sudo cp gcc gcc_backup 

sudo cp g++ g++_backup 
sudo rm gcc g++ 
sudo ln -s gcc-4.8 gcc 
sudo ln -s g++-4.8 g++

这样再用gcc --version查看就是4.8.5了,如果想切换为系统默认的版本:

sudo rm gcc g++ 
sudo ln -s gcc-5 gcc 
sudo ln -s g++-5 g++

b、修改源码,使其支持更高版本的gcc和g++

cd /usr/local/cuda/include/ #进入到头文件目录 
sudo gedit host_config.h #编辑头文件

Ctrl + F 搜索GNUC,找到一段类似于  “if _GNUC_>5 || (_GNUC_ == 5 &&_GNUC_MINOR_> 3)”
,就是最大支持gcc-5.3,可自己取消该限制。建议改为使其支持gcc-5.4,或者直接把两个5改成6

(3)进入例程

       cd ~/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release

       ./deviceQuery

得到:

./deviceQuery Starting…CUDA Device Query (Runtime API) version.....................CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GeForce GTX 1080Result = PASS

说明cuda已安装成功!


四,安装opencv-3.0


1、执行安装脚本

sudo sh Ubuntu/3.0/opencv3_0_0.sh

等待安装完成即可。

期间可能会卡在ippcv的下载中,Ctrl+c中断后,可以自行从

http://sourceforge.net/projects/opencvlibrary/files/3rdparty/ippicv

这里下载,解压到opencv-master->3rdparty->ippicv->downloads->linux-xxxxxxxxx下面

再把选项-D WITH_IPP=OFF 添加到上面的cmake命令中,重新cmake即可。即:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_IPP=OFF ..

提醒一下,这时候要把opencv3_0_0.sh这个文件稍微修改一下啊,比如注释掉mkdir build 等,还可以把后面的make -j4改到make -j16

最后就只需要等待安装完就好,过程要挺久的,慢慢等!

问题1、 cuda8.0新出,opencv3.0.0或者2.4.10不支持。报错:

/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
     typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat
                                                      ^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type
         operator NppiGraphcutState*()
                  ^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState’ does not name a type
         NppiGraphcutState* pState;

解决方案:需要修改一处源码:

在OpenCV/opencv-3.0.0/modules/cudalegacy/src/graphcuts.cpp中做以下修改

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) 
改为
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

问题2、opencv可编译成功,但运行时始终遇到问题:

Invalid device function

这是因为编译的opencv计算能力与电脑显卡的实际计算能力不匹配导致的。一般而言直接添加一下2个cmake编译选项即可解决。

-D CUDA_ARCH_BIN=6.1 -D CUDA_ARCH_PTX=6.1
#Note:6.1为GTX1080的计算能力,不同显卡需要根据自己的计算能力进行修改
#查询显卡计算能力,可以通过运行cuda samples中的deviceQuery得知。
#(文件夹NVIDIA_CUDA-*_Samples下编译示例, *为版本号)

但如果运气不佳,添加编译选项并不能解决问题。这时候我们需要修改opencv中关于CUDA计算能力这部分的配置文件./cmake/OpenCVDetectCUDA.cmake。在 

set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")  

set(CUDA_ARCH_PTX ${__cuda_arch_ptx} CACHE STRING "Specify 'virtual' PTX architectures to build PTX intermediate code for")  

之前添加  

set(__cuda_arch_bin "6.1")  

set(__cuda_arch_ptx "6.1")

五、安装cudnn_v5.1

在NVIDIA官网下载 cudnn v5.1 (cudnn-8.0-linux-x64-v5.1.tgz),执行安装脚本,建立软链接。

tar xvzf cudnn-8.0-linux-x64-v5.0-ga.tgz 

sudo cp cuda/include/cudnn.h /usr/local/cuda/include 
sudo cp cuda/lib64/*.* /usr/local/cuda/lib64  
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

建立软链接

cd /usr/local/cuda/lib64/ 

sudo rm -rf libcudnn.so libcudnn.so.5 
sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 
sudo ln -s libcudnn.so.5 libcudnn.so

最后,更新链接库

sudo ldconfig


六、安装matlab14.04a


1、预准备

将part1.rar压缩文件解压,如果无法解压,可以先安装unrar

sudo apt-get install unrar

将Mathworks.iso - 右键 - 使用磁盘映像挂载器打开”,进入装载的虚拟光盘,拷贝全部文件至home/Matlab 文件夹(想要安装的路径)(PS:取名不要有空格)

复制*****/install.jar至 home/Matlab/Java/jar/ 并覆盖源文件

sudo cp install.jar /home/Matlab/java/jar/  

#给安装路径及其子文件夹赋予执行权限  

chmod a+x Matlab -R


2、安装

#cd 到安装文件夹下 

sudo ./install

接着会出现一个类似window的安装窗口,按以下步骤操作

选项:不使用Internet安装 

***: 12345-67890-12345-67890 (随意20位数据)

默认路径:/usr/local/MATLAB/R2014a 

建议全选安装

勾选从默认启动路径创建符号链接(实现在任意位置运行matlab启动程序) 

**文件:*****/license_405329_R2014a.lic 

拷贝 *****/linux目录下的libmwservices.so 至 /usr/local/MATLAB/R2014a/bin/glnxa64

sudo cp libmwservices.so /usr/local/MATLAB/R2014a/bin/glnxa64/


3、解决编译器gcc/g++版本问题

因为Ubuntu 16.04的gcc/g++版本是5.4,而Matlab 2014a(2015a)的版本是4.7.x所以在使用matla调用mex文件的时候,基本上都会报错,根据报错信息,考虑如下两步解决方案。 

A. 降级安装gcc/g++版本为4.7.x

[plain] view plain copy

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

cd /usr/bin  

sudo mv gcc gcc-4.9.2  #备份  

sudo ln -s gcc-4.7 gcc  

sudo mv g++ g++-4.9.2  

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

B. 暴力引用新版本GLIBCXX_3.4.21

[plain] view plain copy

sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6.0.21  

cd /usr/local/MATLAB/R2014a/sys/os/glnxa64  

sudo mv libstdc++.so.6 libstdc++.so.6.backup  

sudo ln -s libstdc++.so.6.0.21 libstdc++.so.6  

sudo ldconfig -v  

通过命令“strings /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6 | grep GLIBCXX_” 可以看一下,是否已经成功包含了GLIBCXX_3.4.21,如果已经存在,基本上就成功了。

建议用方法B,试过方法A,4.7版本的gcc在make all 时都会出错,应该前面cuda编译时用的就是5.4的,除非重装系统,把cuda也用4.7编译。

4.建立桌面快捷方式

 在/usr/share/applications 中创建Matlab2014.desktop 文档,并输入以下内容

[plain] view plain copy

[Desktop Entry]  

Name  =Matlab2014  

GenericName = Matlab R2014a  

Comment = Matlab R2014a: The Language of the Techinical Computing  

Exec = sh /usr/local/MATLAB/R2014a/bin/matlab -desktop  

Icon = /usr/local/MATLAB/R2014a/toolbox/nnet/nnresource/icon16/matlab.png      

StartupNotify =true  

Terminal = false  

Type=Application  

#添加该命令后,快捷方式会出现在 Applications/Programming/中  

<p>Categories = Development;Matlab </p> 


七、安装caffe

1、安装基本依赖库

sudo apt-get update

sudo apt-get install -y build-essential cmake git pkg-config   

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler    

sudo apt-get install -y libatlas-base-dev     

sudo apt-get install -y --no-install-recommends libboost-all-dev   

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

sudo apt-get install -y python-pip python-dev python-numpy python-scipy # (Python general)   

sudo apt-get install -y libopencv-dev # (OpenCV 2.4) 


2、安装科学计算库BLAS(Basic Linear Algebra Subprograms 基本线性代数子程序)

常用的BLAS实现有:Intel MKL、atlas、OpenBLAS等。可以选择其中一种,其中atlas的安装最简单,而MKL最快,本人选择的是MKL。


1)安装atlas

sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran


2)安装MKL

a、下载与安装

首先下载并安装英特尔® 数学内核库 Linux* 版MKL(Intel(R) Parallel Studio XE Cluster Edition for Linux 2016),下载链接是:https://software.intel.com/en-us/qualify-for-free-software/student, 使用学生身份(邮件 + 学校)下载Student版,填好各种信息,可以直接下载,同时会给你一个邮件告知***。下载完之后,要把文件解压到home文件夹(注意任何一级文件夹不能包含空格,否则安装会失败)

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

chmod a+x parallel_studio_xe_2016 -R  

sh install_GUI.sh 

输入第三条命令后会打开图形安装界面,会有同意协议,输入***,选择安装库等,按照流程应该没问题。

PS: 安装的时候,建议使用root权限安装,过程中会要求输入Linux的root口令。(设置方法:命令行:$ sudo passwd)


b、MKL与CUDA的环境设置 


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

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

/opt/intel/lib/intel64  

/opt/intel/mkl/lib/intel64


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

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

/usr/local/cuda/lib64  

/lib  


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

$ sudo ldconfig -v

完成!


3、安装python的pip和easy_install,方便安装软件包 

[html] view plain copy

cd ~  

wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py   

sudo python ez_setup.py --insecure   

wget https://bootstrap.pypa.io/get-pip.py   

sudo python get-pip.py  

安装python依赖

[html] view plain copy

cd pyhon #里面有requirements.tx文件  

sudo apt-get install python-pip  

sudo su  

for req in $(cat "requirements.txt"); do pip install -i https://pypi.tuna.tsinghua.edu.cn/simple $req; done  

按Ctrl+D退出sudo su模式


4、 编译


1)下载caffe

去https://github.com/BVLC/caffe下载.zip安装包,放在某路径Caffe_Path下解压。


2)修改Makefile.config配置文件

进入caffe根目录:  

[html] view plain copy

cp Makefile.config.example Makefile.config   

gedit Makefile.config  

设置以下内容:  

[plain] view plain copy

USE_CUDNN := 1 #取消该句注释    

OPENCV_VERSION := 3 #取消该句注释  

PYTHON_INCLUDE := /usr/include/python2.7 \     

/usr/lib/python2.7/dist-packages/numpy/core/include    

WITH_PYTHON_LAYER := 1 #取消注释    

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

继续在Caffe-master文件夹目录下:

[html] view plain copy

make all -j4  

make test -j4  

make runtest -j4  

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

必须根据自己CPU情况选择4或8或16,选择过大的数字编译时会出错!!!

编译过程中可能还会有各种问题,大多数都是cudnn的问题,还可能是一些库没安装好,cudnn的问题就换不同版本的cudnn试试。

如果出现问题:

[html] view plain copy

.build_release/tools/extract_features.o:在函数‘std::string* google::MakeCheckOpString<int, int>(int const&, int const&, char const*)’中:  

extract_features.cpp:(.text._ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIiiEEPSsRKT_RKT0_PKc]+0x50):对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用  

可能是gcc版本问题,改回ubuntu16.04自带的gcc-5.4版本即可,居然方法请回去看“三、安装cuda-8.0”时的介绍。

如果是一些库的问题,那就手动编译,再在配置文件里加入库路径就好,有问题多百度谷歌,一步步排除,可以先注释cudnn,甚至是注释掉cuda,只是CPU_ONLY,一步步找出是在哪里出问题!

出错了就在原终端中输入make clean清除第一次编译结果 

再次输入make all -j4重新编译


4)编译python-caffe接口

[plain] view plain copy

make pycaffe  

编译完在终端输入python,再import caffe,如果没报错说明成功了

报错的话应该就是路径问题,只需要在~/.bashrc文件下export PYTHONPATH即可

[plain] view plain copy

sudo gedit ~/.bashrc  

#CAFFE_ROOT是caffe的安装路径  

export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH  

再尝试import caffe ,应该没问题。


5)编译matlab-caffe接口

打开Makefile.config文件,注释掉MATLAB_DIR,并将MATLAB_DIR换成自己的MATLAB安装路径

[plain] view plain copy

# This is required only if you will compile the matlab interface.  

# MATLAB directory should contain the mex binary in /bin.  

 MATLAB_DIR := /usr/local  

 MATLAB_DIR := /usr/local/MATLAB/R2014a # 该路径下应该有bin文件夹  

[plain] view plain copy

make matcaffe  

虽然会有警告说gcc版本不一致,但最后还是编译成功了。


八、mnist测试


1、下载mnist数据集,终端输入

cd /home/icat/caffe-master/data/mnist/   

./get_mnist.sh


2、minist数据格式转换

cd /home/icat/caffe-master/

./examples/mnist/create_mnist.sh


3、mnist数据训练测试

cd /home/pawn/caffe/   

./examples/mnist/train_lenet.sh


运行结果如下:

caffe平台搭建~~sjtuicat 实验室倾情奉献!


至此,历经九九八十一难,caffe平台终于搭建好了!让我们开启神秘的AI之旅吧!


(后续还可以参照“参考链接”进行ubnntu系统的备份,在此不再详述。)