zoukankan      html  css  js  c++  java
  • Ubuntu16.04 安装配置Caffe

    Caffe已经是第三次安装配置了,为什么是第三次呢?因为我实在是低估了深度学习对于硬件的要求。第一次我在自己笔记本上配置的单核,CPU only ...  结果是,样例数据跑了4小时,这还怎么玩?第二次在台式机上,因为台式机比较low,I5处理器4核,没有NVIDIA的GPU。我把别人训练好的模型下载下来,然后自己测试,发现真的成功了,心里小激动~ 然而,当我自己训练模型时,我训练7天.....  关键是7天了还在跑..... 

    心想,我这个穷逼难道要自己掏钱买个服务器?那怎么可能。还好,老师人非常好,给我找了个服务器~  现在终于是劳资大显身手的时候了。

    整个配置过程很长啊,坑多,没有linux基础的就别来了,你会崩溃的。我参考了好几个帖子,基本上每个帖子都有或多或少的问题,文章结尾的时候,我会留下前辈们的文章地址,算是对他们的尊敬和对我帮助的感谢。好,下面切入正题!

    电脑配置:

    系统:Ubuntu16.04   GPU:NVIDIA Corporation GM107GL [Quadro K620] (提示:在linux下可以通过 lspci | grep -i vga 查看)

    安装过程

    1.安装相关依赖项

    1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
    2 sudo apt-get install --no-install-recommends libboost-all-dev
    3 sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
    4 sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

    2.安装NVIDIA驱动

    (1)查询NVIDIA驱动

    首先去官网 http://www.nvidia.com/Download/index.aspx?lang=en-us 查看适合自己显卡的驱动并下载:

    驱动文件后缀名应当是以.run结尾的。我们要把这个文件移动到家目录下,原因是下面我们要切换到文字界面下,如果放到~/下载 下面,我们没有办法进入下载这个目录(没有中文输入法,且中文全部是乱码)

                     

                            图1 输入显卡型号                                                                                                                                     图2  显卡驱动搜索结果

    我的显卡型号是Quadro K620,系统是linux 64位,按照要求选择后点击search. 图2是搜索结果,点击下载就好了。

    我下载后的驱动文件是:NVIDIA-Linux-x86_64-375.20.run

    (2)安装驱动

    在终端下输入: sudo gedit /etc/modprobe.d/blacklist.conf  

    输入密码后在最后一行加上 blacklist nouveau .  这里是将Ubuntu自带的显卡驱动加入黑名单。

    在终端输入: sudo update-initramfs -u  

    重启电脑~
    这里要尤其注意,安装显卡驱动要先切换到文字界面,(按Ctrl+Alt+F1~F6).所以,启动电脑后,先进入文字界面。

    然后,输入命令 sudo service lightdm stop 

    现在可以安装驱动了,先进入家目录 cd ~ ,然后: sudo ./NVIDIA-Linux-x86_64-375.20.run,按照提示一步步来~ 

    完成后,再次重启电脑。

    安装完成之后输入以下指令进行验证: sudo nvidia-smi ,若列出了GPU的信息列表则表示驱动安装成功。如下图:

    3.安装CUDA

    CUDA是NVIDIA的编程语言平台,想使用GPU就必须要使用cuda。
    (1)下载CUDA
    首先在官网上(https://developer.nvidia.com/cuda-downloads)下载CUDA:

     (2) 下载完成后执行以下命令:

    1 sudo chmod 777 cuda_8.0.44_linux.run
    2 sudo  ./cuda_8.0.44_linux.run

    注意:执行后会有一系列提示让你确认,但是注意,有个让你选择是否安装nvidia367驱动时,一定要选择否:
    Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 367.48?
    因为前面我们已经安装了更加新的nvidia367,所以这里不要选择安装。其余的都直接默认或者选择是即可。

    (3)环境变量配置

    打开~/.bashrc文件: sudo gedit ~/.bashrc 
    将以下内容写入到~/.bashrc尾部:

    1 export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
    2 export LD_LIBRARY_PATH=/usr/local/cuda8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

    (4)测试CUDA的samples

    1 cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
    2 make
    3 sudo ./deviceQuery

    如果显示一些关于GPU的信息,则说明安装成功。

     4.配置cuDNN
    cuDNN是GPU加速计算深层神经网络的库。
    首先去官网 https://developer.nvidia.com/rdp/cudnn-download 下载cuDNN,需要注册一个账号才能下载。下载版本号如下图:

    下载cuDNN5.1之后进行解压:

    sudo tar -zxvf ./cudnn-8.0-linux-x64-v5.1.tgz 

    进入cuDNN5.1解压之后的include目录,在命令行进行如下操作:

    cd cuda/include
    sudo cp cudnn.h /usr/local/cuda/include  #复制头文件

    再将进入lib64目录下的动态文件进行复制和链接:

    cd ..
    cd lib64
    sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
    cd /usr/local/cuda/lib64/
    sudo rm -rf libcudnn.so libcudnn.so.5 #删除原有动态文件 sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5 #生成软衔接 sudo ln -s libcudnn.so.5 libcudnn.so #生成软链接

     5.安装opencv3.1
    从官网(http://opencv.org/downloads.html)下载Opencv,并将其解压到你要安装的位置,假设解压到了/home/opencv。

    1 unzip opencv-3.1.0.zip
    2 sudo cp ./opencv-3.1.0 /home
    3 sudo mv opencv-3.1.0 opencv

    安装前准备,创建编译文件夹:

    cd ~/opencv
    mkdir build
    cd build

    配置:

    1 sudo apt install cmake
    2 sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

    编译:

    sudo make -j8 

    -j8表示并行计算,根据自己电脑的配置进行设置,配置比较低的电脑可以将数字改小或不使用,直接输make。

    可能出现问题:

    这是因为opecv3.0与cuda8.0不兼容导致的。解决办法:修改 ~/opencv/modules/cudalegacy/src/graphcuts.cpp文件内容,如图:

    其中, #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000) 是我们修改的。
    以上只是将opencv编译成功,还没将opencv安装,需要运行下面指令进行安装:

    sudo make install

    6.配置caffe

    (1)使用Git直接下载Caffe非常简单,或者去https://github.com/BVLC/caffe下载。由于我习惯去github上找代码,所以就直接去下载的源码。

    下载完成后,会在家目录下的下载里找到caffe-master.zip,用unzip命令解压到家目录下,然后重命名为caffe.

    (2)因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config: sudo cp Makefile.config.example Makefile.config 

    (3) 打开并修改配置文件:
     sudo gedit Makefile.config #打开Makefile.config文件 根据个人情况修改文件:
    a.若使用cudnn,则

    #USE_CUDNN := 1
    修改成:
    USE_CUDNN := 1
    b.若使用的opencv版本是3的,则

    #OPENCV_VERSION := 3
    修改为:
    OPENCV_VERSION := 3
    c.若要使用python来编写layer,则
    将       #WITH_PYTHON_LAYER := 1  
    修改为 WITH_PYTHON_LAYER := 1 
    d.重要的一项 :
    将 # Whatever else you find you need goes here. 下面的

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

    修改为:

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

    这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径.

    (4)修改makefile文件
    打开makefile文件,做如下修改:
    将:

    NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)

    替换为:

    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

    (5)编辑/usr/local/cuda/include/host_config.h
    将其中的第115行注释掉:

    #error-- unsupported GNU version! gcc versions later than 4.9 are not supported!
    改为
    //#error-- unsupported GNU version! gcc versions later than 4.9 are not supported!

    (6)编译
    make all -j8 #-j根据自己电脑配置决定
    编译过程中可能会出现如下错误:
    错误内容1:
    "fatal error: hdf5.h: 没有那个文件或目录"
    解决办法:
    step1:在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。
    将:
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
    替换为:
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
    stept2:在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。
    将:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
    改为:
    LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
    错误内容2:
    "libcudnn.so.5 cannot open shared object file: No such file or directory"
    解决办法是将一些文件复制到/usr/local/lib文件夹下:
    #注意自己CUDA的版本号!

    1 sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
    2 sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
    3 sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
    4 sudo cp /usr/local/cuda-8.0/lib64/libcudnn.so.5 /usr/local/lib/libcudnn.so.5 && sudo ldconfig

     (8)测试

    sudo make runtest

    如果运行之后出现下图,说明caffe配置成功。

     到此caffe配置完毕!

     MNIST数据集测试
    配置caffe完成后,我们可以利用MNIST数据集对caffe进行测试,过程如下:
     
    1.将终端定位到Caffe根目录
    cd ~/caffe
     
    2.下载MNIST数据库并解压缩
    ./data/mnist/get_mnist.sh
     
    3.将其转换成Lmdb数据库格式
    ./examples/mnist/create_mnist.sh
     
    4.训练网络
    ./examples/mnist/train_lenet.sh
    训练的时候可以看到损失与精度数值,如下图:

    可以看到最终训练精度是0.9914。

  • 相关阅读:
    git fetch, merge, pull, push需要注意的地方
    记录一次数据库驱动配置引发的惨案
    IntelliJ Idea 常用快捷键列表
    数据库设计范式
    windows下mysql服务常用操作
    开源协议知多少
    Error creating bean
    Validation failed for query for method
    Not supported for DML operations
    404
  • 原文地址:https://www.cnblogs.com/xuanxufeng/p/6150593.html
Copyright © 2011-2022 走看看