ubuntu16.0 caffe安装

一、安装深度学习所须要的依赖python

  执行下面的命令linux

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

 二、配置环境变量git

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

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

二、显卡驱动程序安装,bash

  因为新版本Ubuntus(> = 14.04)已内置驱动管理程序,能够经过驱动管理程序来安装显卡驱动:“系统设置” - >“软件和更新“ - >”附加驱动“。若是列表中没有相关的选项,请添加源后重试:app

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

  打开驱动管理,以下,选择version 410.78....安装学习

  

 

三、安装cuda测试

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

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

 

四、安装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"

 

五、opencv安装

  因为装了ros系统,自动装了oepncv不须要编译安装。

六、安装OpenBLAS

  一、先下载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

  二、添加lib库的变量路径

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

 

七、安装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

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

sudo make runtest -j4

表示编译安装成功

 

八、安装 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。

 

九、安装过程遇到的坑

  8.一、编译时,提示以下错误

  

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

解决方法:

sudo echo export PYTHONPATH="~/caffe-master/python" >> ~/.zshrc
 
source ~/.zshrc

  在python2中导入caffe

 

  8.4 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)