网上很多搭建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
- find_cuda_helper_libs(nppi)
改为
[cpp] view plain copy
- find_cuda_helper_libs(nppial)
- find_cuda_helper_libs(nppicc)
- find_cuda_helper_libs(nppicom)
- find_cuda_helper_libs(nppidei)
- find_cuda_helper_libs(nppif)
- find_cuda_helper_libs(nppig)
- find_cuda_helper_libs(nppim)
- find_cuda_helper_libs(nppist)
- find_cuda_helper_libs(nppisu)
- find_cuda_helper_libs(nppitc)
2).找到行
[cpp] view plain copy
- set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
改为
[cpp] view plain copy
- set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};
- ${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};
- ${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
3).找到行
[cpp] view plain copy
- unset(CUDA_nppi_LIBRARY CACHE)
改为
[cpp] view plain copy
- unset(CUDA_nppial_LIBRARY CACHE)
- unset(CUDA_nppicc_LIBRARY CACHE)
- unset(CUDA_nppicom_LIBRARY CACHE)
- unset(CUDA_nppidei_LIBRARY CACHE)
- unset(CUDA_nppif_LIBRARY CACHE)
- unset(CUDA_nppig_LIBRARY CACHE)
- unset(CUDA_nppim_LIBRARY CACHE)
- unset(CUDA_nppist_LIBRARY CACHE)
- unset(CUDA_nppisu_LIBRARY CACHE)
- unset(CUDA_nppitc_LIBRARY CACHE)
4).找到文件OpenCVDetectCUDA.cmake
修改以下几行
[cpp] view plain copy
- ...
- set(__cuda_arch_ptx "")
- if(CUDA_GENERATION STREQUAL "Fermi")
- set(__cuda_arch_bin "2.0")
- elseif(CUDA_GENERATION STREQUAL "Kepler")
- set(__cuda_arch_bin "3.0 3.5 3.7")
- ...
改为
[cpp] view plain copy
- ...
- set(__cuda_arch_ptx "")
- if(CUDA_GENERATION STREQUAL "Kepler")
- set(__cuda_arch_bin "3.0 3.5 3.7")
- elseif(CUDA_GENERATION STREQUAL "Maxwell")
- set(__cuda_arch_bin "5.0 5.2")
- ...
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