zoukankan      html  css  js  c++  java
  • ubuntu16.0 caffe安装

    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
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install git cmake build-essential
    sudo apt-get install -y libatlas-base-dev

     2、配置环境变量

      同样使用 gedit 命令打开配置文件:

    sudo gedit ~/.bashrc

      打开后在文件最后加入以下两行内容: 

    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

    2、显卡驱动程序安装,

      由于新版本Ubuntus(> = 14.04)已内置驱动管理程序,可以通过驱动管理程序来安装显卡驱动:“系统设置” - >“软件和更新“ - >”附加驱动“。如果列表中没有相关的选项,请添加源后重试:

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update

      打开驱动管理,如下,选择version 410.78....安装

      

    3、安装cuda

      从英伟达官网下载cuda10.0, 安装过程中注意不要选择安装CUDA中集成的显卡驱动和OpenGL! (当询问时选择 ”N“ ):

    chmod +x cuda_10.0.130_410.48_linux.run
    sudo ./cuda_10.0.130_410.48_linux.run

      当安装完成后,请不要忘记在 “.bashrc” 或者 “.zshrc”(在“~/”目录下,您需要使用Ctrl+H来查看隐藏文件)中配置系统环境变量:

    export PATH=/usr/local/cuda-10.0/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH

    使该配置生效:

    source ~/.bashrc

     安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

    ✗ nvcc -V   
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2018 NVIDIA Corporation
    Built on Sat_Aug_25_21:08:01_CDT_2018
    Cuda compilation tools, release 10.0, V10.0.130

    4、安装cuDNN

      4.1 使用deb包安装

    sudo dpkg -i ./libcudnn7_7.5.1.10-1+cuda10.0_amd64.deb
    sudo dpkg -i ./libcudnn7-dev_7.5.1.10-1+cuda10.0_amd64.deb
    sudo dpkg -i ./libcudnn7-doc_7.5.1.10-1+cuda10.0_amd64.deb

      4.2 压缩包安装:cudnn-10.0-linux-x64-v7.5.1.10.tgz

      解压该压缩包,得到一个 cudnn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:

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

      然后命令行进入 cudn/lib64 路径下,运行以下命令:

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

      在终端输入命令: 

    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

      如果出现下图所示版本信息,说明安装成功。  

    #define CUDNN_MAJOR 7
    #define CUDNN_MINOR 5
    #define CUDNN_PATCHLEVEL 1
    --
    #define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
    
    #include "driver_types.h"

    5、opencv安装

      由于装了ros系统,自动装了oepncv不需要编译安装。

    6、安装OpenBLAS

      1、先下载git,然后安装OpenBLAS

    mkdir ~/git
    cd ~/git
    git clone https://github.com/xianyi/OpenBLAS.git
    cd OpenBLAS 
    sudo apt-get install gfortran
    make FC=gfortran -j $(($(nproc) + 1))
    sudo make PREFIX=/usr/local install

      2、添加lib库的变量路径

    echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc

    7、安装caffe

      安装的路径下 clone caffe代码 :

    git clone https://github.com/BVLC/caffe.git

      完成后进入caffe-master,进入 caffe ,将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,执行下列命令完成复制操作 :

    sudo cp Makefile.config.example Makefile.config

      复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

      然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:

    sudo gedit Makefile.config

      修改 Makefile.config 文件内容:

      7.1 应用 cudnn

    将
    #USE_CUDNN := 1
    修改成: 
    USE_CUDNN := 1

      7.2 应用 opencv 版本

    将
    #OPENCV_VERSION := 3 
    修改为: 
    OPENCV_VERSION := 3

      7.3 使用 python 接口

    将
    #WITH_PYTHON_LAYER := 1 
    修改为 
    WITH_PYTHON_LAYER := 1

      7.4 修改 python 路径

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
    修改为: 
    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       

      7.5 如果安装了OpenBLAS,修改BLAS参数

    sed -i 's/BLAS := atlas/BLAS := open/' Makefile.config

      7.6 修改 caffe 目录下的 Makefile 文件

    将:
    NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
    替换为:
    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

      再修改

    将:
    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

      7.7 编译

      在 caffe 目录下执行 :

    sudo make all -j4
    sudo make distribute  (安装caffe编译生成的库到caffe/distribute,可用于开发)

           7.8 编译成功后可运行测试:

    sudo make runtest -j4

    表示编译安装成功

    8、安装 pycaffe notebook 接口环境

     成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只不过需要在命令行下通过 caffe 命令进行操作,而这一步 pycaffe 的安装以及 notebook 环境配置只是为了更方便的去使用 caffe ,实际上大多数都是通过 python 来操作 caffe 的,而 notebook 使用浏览器作为界面,可以更方便的编写和执行 python 代码。

    首先编译 pycaffe :

    cd caffe
     
    sudo make pycaffe -j4

    配置notebook环境

    首先要安装python接口依赖库,在caffe根目录的python文件夹下,有一个requirements.txt的清单文件,上面列出了需要的依赖库,按照这个清单安装就可以了。

    在安装scipy库的时候,需要fortran编译器(gfortran),如果没有这个编译器就会报错,因此,我们可以先安装一下。

    首先进入 caffe

    /python 目录下,执行安装代码:

    sudo apt-get install gfortran
    for req in $(cat requirements.txt); do sudo pip install $req; done

    安装完成以后执行:

    sudo pip install -r requirements.txt

    就会看到,安装成功的,都会显示Requirement already satisfied, 没有安装成功的,会继续安装。

    然后安装 jupyter :

    sudo pip install jupyter

    安装完成后运行 notebook :

     jupyter notebook
     
    或
    
    ipython notebook

    就会在浏览器中打开notebook。

    
    

    9、安装过程遇到的坑

      8.1、编译时,提示如下错误

      

    nvcc fatal : Unsupported gpu architecture 'compute_20'
    nvcc fatal : Unsupported gpu architecture 'compute_20'
    Makefile:605: recipe for target '.build_release/cuda/src/caffe/util/math_functions.o' failed

      原因是cuda版本不兼容,在Makefile.config 中 CUDA_ARCH 设置没有去掉不兼容的arch,根据提示:

    # CUDA architecture setting: going with all of them.  
    # For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.  
    # For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.  
    # For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.  
    CUDA_ARCH := -gencode arch=compute_20,code=sm_20   
                    -gencode arch=compute_20,code=sm_21   
                    -gencode arch=compute_30,code=sm_30   
                    -gencode arch=compute_35,code=sm_35   
                    -gencode arch=compute_50,code=sm_50   
                    -gencode arch=compute_52,code=sm_52   
                    -gencode arch=compute_60,code=sm_60   
                    -gencode arch=compute_61,code=sm_61   
                    -gencode arch=compute_61,code=compute_61 

      脑cuda为10.0,所以需要删除

    -gencode arch=compute_20,code=sm_20   
    -gencode arch=compute_20,code=sm_21  
      之后编译成功
    
    

      8.2、cuda库找不到

    .build_release/tools/caffe
    .build_release/tools/caffe: error while loading shared libraries: libcudart.so.10.0: cannot open shared object file: No such file or directory
    Makefile:543: recipe for target 'runtest' failed
    make: *** [runtest] Error 127

      解决方法:

      将相应的库文件复制到/usr/lib,终端运行如下命令:

    sudo cp /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 && sudo ldconfig
    
    sudo cp /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 && sudo ldconfig
    
    sudo cp /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 && sudo ldconfig

      ps. ldconfig命令是一个动态链接库管理命令,是为了让动态链接库为系统共享

      

      8.4 编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录

    python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: 没有那个文件或目录

      python2已经安装了numpy,但还是报这个错误

      进入python2

    import numpy as np
    np.get_include()

      得到:

    /usr/local/lib/python2.7/dist-packages/numpy/core/include
    
    在Makefile.config找到PYTHON_INCLUDE,发现有点不同:
    
    PYTHON_INCLUDE := /usr/include/python2.7 
            /usr/lib/python2.7/dist-packages/numpy/core/include
    
    要加一个local,变成: 
    
    PYTHON_INCLUDE := /usr/include/python2.7 
            /usr/local/lib/python2.7/dist-packages/numpy/core/include
    
    再make pycaffe就ok了 

     8.5 import caffe时
    ImportError:No module named skimage.io

    解决办法:

    可能是我们没有安装所谓的skimage.io模块,所以可以用以下的命令来安装:

    pip install scikit-image

    关掉终端,重新进入再编译

    或者:

    sudo pip install scikit-image

    另一种方法:

    sudo apt-get install python-skimage

      8.6 导入 caffe 时出现错误:

    File "<stdin>", line 1, in <module>   ImportError: No module named caffe

    解决方法:

    zsh则

    sudo echo export PYTHON=/home/.../caffe/python:$PYTHONPATH >> ~/.zshrc
    source ~/.zshrc

      在python2中导入caffe

      8.7 python3使用caffe

    raceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/wyl/caffe/python/caffe/__init__.py", line 1, in <module>
        from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
      File "/home/wyl/caffe/python/caffe/pycaffe.py", line 13, in <module>
        from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, 
    ImportError: dynamic module does not define module export function (PyInit__caffe)

     报这个错,说明当前我的python版本太高,可以看到我用的是3.6版本,降低python版本。

    具体降低python版本,用python虚拟环境搭建中的虚拟python环境方法。

    命令是:mkvirtualenv -p /usr/bin/python2 环境名称

    export PYTHON=/home/.../caffe/python:$PYTHONPATH

    8.8 编译是找不到opencv库

    connot find -lopencv_imgcodecs .......

    或者

    .build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
    .build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)' ....

    解决方法

    先修改Makefile.config文件中

    1、修改USE_OPENCV := 1

    # uncomment to disable IO dependencies and corresponding data layers
    USE_OPENCV := 1

    2、OPENCV_VERSION := 3 注释掉(实际测试中不注释掉也能编译)

    # Uncomment if you're using OpenCV 3
    OPENCV_VERSION := 3

    3、打开USE_PKG_CONFIG

    # Uncomment to use `pkg-config` to specify OpenCV library paths.
    # (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
    USE_PKG_CONFIG := 1

    然后在caffe根目录下,找到Makefile文件,打开文件

    因为lib文件opencv_imgcodecsMakefile文件中未添加,修改如下:

    LIBRARIES += glog gflags protobuf leveldb snappy 
        lmdb boost_system hdf5_hl hdf5 m 
        opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

    此外,还有一些Makefile文件这么写,也是可行的:

    ifeq ($(USE_OPENCV), 1)
        LIBRARIES += opencv_core opencv_highgui opencv_imgproc 
    
        ifeq ($(OPENCV_VERSION), 3)
            LIBRARIES += opencv_imgcodecs
        endif
    
    endif

    再在caffe目录下,sudo make all -j8一下,问题解决

  • 相关阅读:
    shell 中"${b2}" and "${b:2}"
    关于 libpcap的安装
    ubuntu adsl 上网
    2011.1.18 运算符优先级
    Tail Queues
    fd_set struct
    读取和修改操作array 配置文件的方法
    smarty调试方法
    一个CURL例子
    cakephp数据库事务transactions
  • 原文地址:https://www.cnblogs.com/Glucklichste/p/11063095.html
Copyright © 2011-2022 走看看