ubuntu16.04+cuda8.0+cudnn6+opencv3.1 搭建caffe与tensorflow

本文详细记录了在Ubuntu系统下安装Caffe的过程,包括安装NVIDIA驱动、CUDA、cuDNN、OpenCV等依赖环境,以及解决安装过程中遇到的各种问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

网上很多搭建caffe的教程都不适用,安装的过程中走了很多弯路,进了很多坑,所以做一个笔记。

 

一、ubuntu系统

1.Ubuntu单系统的安装

   参考http://blog.youkuaiyun.com/zuoyefeng1990/article/details/50255645。

2.unbuntu系统安装过程中的分区

   参考http://blog.youkuaiyun.com/arcsinsin/article/details/17143163

3.ubuntu安装后更换源(使用合适的源)、网络连接、输入法,安装vim。

 

二、caffe

1.安装NVIDIA驱动

  首先去官网(http://www.nvidia.cn/Download/index.aspx?lang=cn)查找适配自己电脑GPU的驱动。

  

          

                       

 

 

  执行如下语句安装NVIDIA驱动,其中,出现是否disable 的时候要选是,输入密码,重启,选择change state

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

    sudo apt-get update

              以自己电脑为例:

              sudo apt-get install nvidia-367 nvidia-settings nvidia-prime

    

2.安装CUDA9.0

  首先去官网下载CUDA 8.0,下载的是.run文件,根据自己的需要下载合适的.run文件。

  下载完CUDA 8.0之后执行如下语句,运行.run文件

    sudo sh cuda_8.0.176_384.81_linux.run

  单击回车,一路往下运行,直到提示“是否为NVIDIA安装驱动nvidia-384?”,选择否,因为已经安装好驱动程序了,其他的全都是默认,不过要记住安装位置,默认是安装在/usr/local/cuda文件夹下。

  配置环境变量,运行如下命令打开profile文件

    sudo gedit  /etc/profile

  打开文件后在文件末尾添加路径,也就是安装目录,命令如下:

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

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

   保存,然后重启电脑

    sudo reboot

3.测试CUDA的Samples例子

  cd  /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery

   sudo make

   ./deviceQuery

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

 

 

 

 

 

4.安装cudnn:

 

 

 

 

 

关键点是一定要安装cuda对应的cudnn包.

cudnn安装步骤:
从官网上下载cudnn的安装包,将安装包解压,将此安装包放在home路径下即可,并在当前路径下进行解压,解压后的文件夹名为cuda。 在终端上编辑如下代码:

$ cd cuda/include 
$ sudo cp *.h /usr/local/cuda/include/  (注意这里是你自己的cuda的安装地址,复制*.h文件) 

 

关闭终端并重新打开(也可以返回最开始的目录)

$ cd cuda/lib64 
$ sudo cp libcudnn* /usr/local/cuda/lib64/ 

 

终端运行:

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

 

 


5.安装opencv:

 

 

 

依赖包安装

 

打开shell终端,键入:

 

$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
$ sudo apt-get install ffmpeg

 

如果update出现问题,就在软件与更新中的软件将ppa相关的源删除即可。

命令参考编译安装方法

 

首先在myopencv目录下的opencv目录中建立build文件夹,

cd myopencv/opencv
mkdir build
  • 1
  • 2

假如不加入contrib模块

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 WITH_QT=OFF -D WITH_OPENGL=ON ..
  • 1

假如要加入contrib模块,那么:

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 WITH_QT=OFF -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=~/myopencv/opencv_contrib/modules/ ~/myopencv/opencv
  • 1

当上述cmake命令执行后,会自动下载编译所需的第三方包,等待即可,包括ippcv等。

生成可执行文件安装

采用make -j $(nproc)命令—-j后面跟的参数为参与编译的CPU核数

make -j4
sudo make install
  • 1
  • 2

 设置opencv位置

执行下面命令即可

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update
  • 1
  • 2
  • 3

 测试

以python为例,在python命令行中输入:

import cv2

出现问题:

(1)

 

/usr/bin/ld: cannot find -l****问题的解决办法

 

在ubuntu下编译C或cpp文件时,可能会出现找不到链接库的问题,其形式为:

cannot find -l**** 


这里的**一般是指的链接库, 


既然是lib文件链接有问题,简单了。这种情况分两种

在usr/lib目录下有这些库文件

直接修复以下链接即可,例如依次执行

ln -s lib***.so.6(某个数字) lib***.so
  • 1

即可

在usr/lib目录下没有这些文件

直接在系统根目录中依次搜索这些库文件,并使用

sudo cp 库文件名 /usr/lib
  • 1

命令将相应库文件拷贝到该目录中即可

(2)

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.


Please set them or make sure they are set and tested correctly in the CMake files:
 

CUDA_nppi_LIBRARY (ADVANCED)
 

linked by target "opencv_cudev" in directory D:/Cproject/opencv/opencv/sources/modules/cudev

 

原因解析:

cuda9不再支持2.0架构

 

 

解决方案如下:

1).找到FindCUDA.cmake文件

找到行

[cpp] view plain copy

  1. find_cuda_helper_libs(nppi)  

改为

[cpp] view plain copy

  1. find_cuda_helper_libs(nppial)  
  2. find_cuda_helper_libs(nppicc)  
  3. find_cuda_helper_libs(nppicom)  
  4. find_cuda_helper_libs(nppidei)  
  5. find_cuda_helper_libs(nppif)  
  6. find_cuda_helper_libs(nppig)  
  7. find_cuda_helper_libs(nppim)  
  8. find_cuda_helper_libs(nppist)  
  9. find_cuda_helper_libs(nppisu)  
  10. find_cuda_helper_libs(nppitc)  

2).找到行

 

 

[cpp] view plain copy

  1. set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")  

改为

 

 

[cpp] view plain copy

  1. set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};
  2. ${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};
  3. ${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")  

3).找到行

 

 

[cpp] view plain copy

  1. unset(CUDA_nppi_LIBRARY CACHE)  

改为

 

 

[cpp] view plain copy

  1. unset(CUDA_nppial_LIBRARY CACHE)  
  2. unset(CUDA_nppicc_LIBRARY CACHE)  
  3. unset(CUDA_nppicom_LIBRARY CACHE)  
  4. unset(CUDA_nppidei_LIBRARY CACHE)  
  5. unset(CUDA_nppif_LIBRARY CACHE)  
  6. unset(CUDA_nppig_LIBRARY CACHE)  
  7. unset(CUDA_nppim_LIBRARY CACHE)  
  8. unset(CUDA_nppist_LIBRARY CACHE)  
  9. unset(CUDA_nppisu_LIBRARY CACHE)  
  10. unset(CUDA_nppitc_LIBRARY CACHE)  


4).找到文件OpenCVDetectCUDA.cmake

 

修改以下几行

 

[cpp] view plain copy

  1. ...  
  2.  set(__cuda_arch_ptx "")  
  3.  if(CUDA_GENERATION STREQUAL "Fermi")  
  4.    set(__cuda_arch_bin "2.0")  
  5.  elseif(CUDA_GENERATION STREQUAL "Kepler")  
  6.    set(__cuda_arch_bin "3.0 3.5 3.7")  
  7.  ...  

改为

 

 

[cpp] view plain copy

  1. ...  
  2. set(__cuda_arch_ptx "")  
  3. if(CUDA_GENERATION STREQUAL "Kepler")  
  4.   set(__cuda_arch_bin "3.0 3.5 3.7")  
  5. elseif(CUDA_GENERATION STREQUAL "Maxwell")  
  6.   set(__cuda_arch_bin "5.0 5.2")  
  7. ...  

 

5).cuda9中有一个单独的halffloat(cuda_fp16.h)头文件,也应该被包括在opencv的目录里

 

将头文件cuda_fp16.h添加至 opencv\modules\cudev\include\opencv2\cudev\common.hpp

 

即在common.hpp中添加

 

#include <cuda_fp16.h>

重新生成即可

 

(3)

‘NppiGraphcutState‘ has not been declared

 

解决方案:

进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:

#include "precomp.hpp"

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

改为

#include "precomp.hpp"

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

然后make编译就可以了

 

6、安装caffe

 

 

sudo apt-get update

sudo apt-get upgrade

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

sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy

sudo apt-get install -y libopencv-dev

 

 

 

 

 

(1)https://github.com/BVLC/caffe下载caffe

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

(2)复制Makefileconfig

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  

 

 

make all -j4
make test
make runtest
make pycaffe

 

这时候cd 到caffe 下的 python 目录,试试caffe 的 python wrapper安装好没有:

python
import caffe

如果不报错,那就说明安装好了。

 

 

 

 

 

出现问题:

(1)opencv使用cmake链接库函数出现usr/bin/ld: cannot find -lopencv_终极解决方案

在计算机目录搜索找不到的opencv动态链接库文件,将它拷贝到usr/lib文件夹

(2)Unsupported gpu architecture 'compute_*'2017解决方法

 

makefile.config中有cuda版本限制,设置的参数有可能cuda不支持。

如下:

# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 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

 

解决方法:

看上面红色的备注,把可能不兼容的行的注释掉就可以了。

 

(3)"libcudart.so.9.0 cannot open shared object file: Nosuch file or directory"

 

解决办法是将一些文件复制到/usr/local/lib文件夹下:

#注意自己CUDA的版本号!
sudo cp /usr/local/cuda-9.0/lib64/libcudart.so.9.0 /usr/local/lib/libcudart.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcublas.so.9.0 /usr/local/lib/libcublas.so.9.0 && sudo ldconfig
sudo cp /usr/local/cuda-9.0/lib64/libcurand.so.9.0 /usr/local/lib/libcurand.so.9.0 && sudo ldconfig
 

 

 

 

(4)找不到arrayobject.h

 sudo apt-get install python-numpy

如果装了还是不行,就在计算机目录搜索arrayobject.h

找到它的位置,然后打开报错的cpp文件

将出错的行改为

#include<arrayobject.h所在的路径>

 

 

 

 

7  tensorflow

sudo pip install tensorflow-gpu==1.10
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值