caffe学习(三):caffe开发环境安装(Ubuntu)

以前我在Windows10下搭建了caffe环境(打开链接),但是caffe本身并不是Windows下开发的,而是在Linux下开发的。虽然大神将caffe移植到了Windows,但与之伴随有很多兼容性的问题,所以还是决定到Ubuntu下进行安装了。

严格意义上说,这篇文章不是教程,只是我个人安装caffe环境的经历总结。caffe的安装是出了名的麻烦,会遇到很多问题,甚至都有人收费来给人安装caffe。其实网上也有很多博客给出了安装教程,但是很多人都只是在自己的电脑上安装成功了而已,并没有考虑太多,很多问题就被忽视了,导致按照他们教程来的人要走不少弯路。我在Ubuntu下配置caffe环境前前后后花了3天,这里分享一下安装的经历和遇到的问题,希望能给其他人提供参考,少走弯路。

安装Ubuntu和win10双系统

Windows10+Ubuntu双系统安装
上面是文章链接,我是按照这篇文章进行安装的。只要按照步骤来是能成功的。

注意:

  • 按照文章中的步骤,对硬盘分卷进行管理,压缩出空余空间,一般60G的空闲空间足够了,如果还是怕不够,可以分出100G空间。

  • BIOS启动一般是F1、F2、F12、DEL、Esc等键。我的是F2,我使用的是华硕笔记本。如果不知道自己电脑的启动热键就百度,多试试,总会试出来。

  • 安装Ubuntu时是从U盘启动进行安装的,所以还需要自己准备一个U盘,根据那篇文章的教程使用UltraIso自己制作Ubuntu系统的U盘启动盘。一般制作完成后会占用1G多一点,使用2G的U盘就足够,我使用的是16G的U盘,只要容量够就行。

CUDA安装

ubuntu14.04+cuda7.5安装 官方步骤版
上面是文章链接,我主要参照这篇文章安装cuda。我使用的是nvidia官网上最新的cuda8.0版本,跟教程的cuda7.5版本没有区别,注意把7.5替换成8.0就行。

注意:

  • cuda的安装可以说是最蛋疼的了,有两种安装方式:run方式和deb方式。我最初是使用书上推荐的deb进行安装,很多网上的教程也是这么说的,但事实上,deb方式是很坑的,因为安装后重启会发现无法启动图形界面,一直黑屏。所以推荐run方式安装,虽然会比deb方式麻烦点,但也总比一直黑屏好吧(⊙﹏⊙)。按照这篇教程的步骤一步一步来,验证是OK的。

具体根源是 Deb 默认将 intel 集显的 openGL lib 给覆盖了,导致 GUI 出现问题。
详细理由请查看这篇博客:Ubuntu 14.04 安装 CUDA 问题及解决

  • 安装cuda驱动时需要禁用nouveau。nouveau是专门为NVIDIA建立的免费自由的开源驱动项目。安装时会与cuda产生冲突,所以必须禁用。前面给出的文章中给出了禁用nouveau的方法,这里不做赘述。

  • 一旦禁用了nouveau,Ubuntu的图形界面就不再可用。我们需要切换到命令行模式输入指令:alt+ctrl+f1即可。而alt+ctrl+f7则是切换到图形界面,当显卡驱动被禁止时,只能看到左上角有一个光标闪烁。

安装cuDNN

2015.08.17 Ubuntu 14.04+cuda 7.5+caffe安装配置
cuDNN的安装较为容易些,坑也少一些。我主要参考了这篇文章中的cuDNN的部分进行安装。

注意:

  • cuDNN需要到官网注册账号下载,如果嫌麻烦的话,可以自行百度搜索相关资源进行下载。我自己在网上找到的一个下载链接:cudnn-7.5-linux-x64-v5.0

安装BLAS(基本线性代数子库)

Caffe支持三种AtLas:MKL、AtLas、OpenBlas。
MKL是限制公开的,AtLas和OpenBlas则是完全免费的。
我选择安装了AtLas,安装指令如下:

sudo apt-get install libatlas-base-dev

如果想安装OpenBlas,安装指令如下:

sudo apt-get install libopenblas-dev

安装OpenCV

Caffe编译也用到了OpenCV,实现配置好OpenCV环境。
OpenCV2.4.x的几个版本貌似都行,我用的是OpenCV2.4.9,其他的也没有尝试。如果用的是OpenCV3,需要修改Caffe的Makefile.config文件,这里先不管。
Ubuntu opencv 多版本管理
上面这篇文章介绍了安装OpenCV的过程和可能出现的问题。跟着走基本就OK了,遇到问题百度就行了,最后都有解决办法的,下面我列出我碰到的几个问题:

错误1:

nvcc fatal   : Unsupported gpu architecture 'compute_11'  
    CMake Error at cuda_compile_generated_matrix_operations.cu.o.cmake:206 (message):  
      Error generating  
    /home/smie/Documents/opencv2.4.11/build/modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_gene  

    rated_matrix_operations.cu.o  
    make[2]: ***  
    [modules/core/CMakeFiles/cuda_compile.dir/__/dynamicuda/src/cuda/./cuda_compile_generated_matrix_operations.cu.o] Error 1  
    make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs....  

解决办法:指明GPU的架构,一般的都为开普勒架构。也就是在cmake 命令添加:CUDA_GENERATION=Kepler。

错误2:

/home/ros05/opencv2.4.8/opencv/modules/gpu/src/nvidia/core/NCVPixelOperations.hpp(133): error: a storage class is not allowed in an explicit specialization

31 errors detected in the compilation of "/tmp/tmpxft_00005a7c_00000000-9_NCVPyramid.compute_35.cpp1.ii".
CMake Error at cuda_compile_generated_NCVPyramid.cu.o.cmake:266 (message):
  Error generating file
  /home/ros05/opencv2.4.8/release/modules/gpu/CMakeFiles/cuda_compile.dir/src/nvidia/core/./cuda_compile_generated_NCVPyramid.cu.o


make[2]: *** [modules/gpu/CMakeFiles/cuda_compile.dir/src/nvidia/core/./cuda_compile_generated_NCVPyramid.cu.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 71%] Built target opencv_perf_ocl
[ 74%] Built target opencv_test_ocl
make[1]: *** [modules/gpu/CMakeFiles/opencv_gpu.dir/all] Error 2
make: *** [all] Error 2

需要使用下载NCVPixelOperations.hpp(下载链接)替换掉opencv2.4.9内的文件, 重新build。
NCVPixelOperations.hpp所在目录为:

(编译OpenCV的路径)/modules/gpu/src/nvidia/core

错误3:
摘自:cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
他的是OpenCV3,我的是OpenCV2也碰到了这个问题,该解决方法可以通用。

/home/usrname/opencv-3.0.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState’ has not been declared
     typedef NppStatus (*init_func_t)(NppiSize oSize, NppiGraphcutState** ppStat
                                                      ^
/home/usrname/opencv-3.0.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState’ does not name a type
         operator NppiGraphcutState*()
                  ^
/home/usrname/opencv-3.0.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState’ does not name a type
         NppiGraphcutState* pState;

解决方案:需要修改一处源码:
在graphcuts.cpp中将

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

改为

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

——————————————- 2017.8.14日补充——————————————-
这次我重新编译了opencv3.0的源码,基本步骤和前面一样,也是下载源码然后解压编译。

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX= /usr/local/ -D WITH_IPP=OFF ../
make -j12
make install

基本跟安装opencv2的过程一样,但是这次我遇到了新的报错:

/usr/bin/cmake: /home/xhb/anaconda2/lib/libcurl.so.4: no version information available (required by /usr/bin/cmake)

这个只是节选的一句,编译时弹出了很多类似的报错信息,都是说anaconda的libcurl.so.4,这个库有冲突。查阅资料发现了原因:(参考博客)

我自己手动添加了anaconda的库进去

打开.bashrc,找到anaconda添加环境变量的地方:

# added by Anaconda2 4.4.0 installer
export PATH="/home/xhb/anaconda2/bin:$PATH"
# export LD_LIBRARY_PATH="/home/xhb/anaconda2/lib:$LD_LIBRARY_PATH" 

上面第一行是anaconda默认添加的,下面那行被注释的是我自己手动添加的。编译opencv时不能加入这个库,否则会产生冲突,有不可预料的后果,也许能编译下去也许会出错。
所以要将其注释掉。
由于安装其他软件时用到了anaconda的库,所以我添加了进去,而以前安装opencv时,也没注意。
只要注释了那行就行了,只使用anaconda默认添加的环境变量即可。


安装anaconda

关于Python环境的配置,安装anaconda是很快捷的解决办法。自带了各种python包,以及spyder等工具,十分方便。下面是配置anaconda的博客:
linux 下安装anaconda

注意:

  • anaconda2和3都行,我直接选择了anaconda2版本的。
  • anaconda可以到官网下载,但是网速巨慢;一个比较方便的下载方法是到清华开源镜像站下载,自行百度即可。

编译caffe源码

2015.08.17 Ubuntu 14.04+cuda 7.5+caffe安装配置
根据上面这篇文章中caffe安装的部分进行操作。
注意:

  • 我们需要去github下载caffe源码包,git的速度有点慢,所以等了挺久才下载完毕。
  • 按照教程中还需要另外安装python依赖库。
    进入caffe-master下的python目录,执行命令:
for req in $(cat requirements.txt); do pip install $req; done  
  • 安装开发所需的依赖包:
    Google Logging Library(glog)(下载地址)
tar zxvf glog-0.3.3.tar.gz
./configure
make
sudo make install
  • 其他依赖项,确保都成功
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
  • 配置好依赖包之后,按照教程来就行了。我在编译时遇到的几个错误:

错误1:

error while loading shared libraries: libcudart.so.5.5: cannot open shared object file: No such file or directory

根据自己电脑的操作系统是32位还是64位,输入如下指令:
32-bit:

sudo ldconfig /usr/local/cuda/lib

64-bit:

sudo ldconfig /usr/local/cuda/lib64

重新编译,应该就能通过了。

pycaffe配置

pycaffe安装与路径配置
上面这篇文章介绍了pycaffe的安装配置。根据教程,一般就行了。

另外pycaffe安装过程中我还遇到下面几个问题:
错误1:

Error: libcudart.so.7.5: cannot open shared object file: No such file or directory

解决方案:博客链接

错误2:

CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
python/caffe/_caffe.cpp:1:52: fatal error: Python.h: No suchfile or directory
 #include  //NOLINT(build/include_alpha)
                                            ^
compilation terminated.
make: *** [python/caffe/_caffe.so] Error 1

找不到python.h文件,其实是caffe的Makefile.config中anaconda路径不对,也就是Python路径。
我从这个网页中找到了解决方法:make pycaffe fatal error: ‘Python.h’ file not found

caffe学习(三):caffe开发环境安装(Ubuntu)_第1张图片
我在~/.bashrc的最后添加了python的路径:
因为我使用了anaconda2,所以指定的是anaconda2的python的路径。
还有一点,填入的路径可以自己cd进去看看有没有,如果是空的,指定了也没用。

export CPLUS_INCLUDE_PATH=/home/(填自己的用户名)/anaconda2/include/python2.7/:$CPLUS_INCLUDE_PATHort

如果你没有使用anaconda,就输入:

CPLUS_INCLUDE_PATH=/usr/include/python2.7:$CPLUS_INCLUDE_PATH

你可能感兴趣的:(caffe)