CAFFE环境拾建 调试成功+opencv3.4.2

转载:ubuntu16.04+cuda8.0+cudnn5.1+caffe 安装(基于独立主机&集成显卡&GTX1080Ti)

https://blog.****.net/xl928471061/article/details/77833112

https://blog.****.net/w5688414/article/details/79482482

https://blog.****.net/cocoaqin/article/details/78163171

 

最近开始配置自己的深度学习主机,由于之前只在笔记本上和单显卡主机上安装过,所以可以说是zero经验,以至于很多问题不了解都当成了bug,故为了方便以后的自己以及大众,特在此写下post一篇。(由于可能会有很多的问题我没有遇到但各位可能遇到,故在文末贴出其他的安装链接,请自取)

~~~~~~~~~~~~~~~~~~~~华丽丽分割线~~~~~~~~~~~~~~~~~~~~

一、ubuntu16.04安装

1.首先当然是系统盘的制作,这个不作赘言,一般使用 UltraISO,具体度娘会告诉你;

2.紧接着就是安装,如何安装,如何分区,度娘也会一一告知,此处就说几个不同之处:

1)首先,带有独立显卡的主机,通常有独显输出和集显输出两种端口,而独显是需要安装驱动才可以使用的,所以最初装系统的时候需要使用集显输出的端口,否则你可能完全进不去安装界面

2)其次,在BOOT界面选择启动项的时候,对U盘启动会出现两个选项,第一个带有前缀UEFI,另一个这没有。这是因为现在的主板驱动一般有 BIOS 和 UEFI 两种,虽说 UEFI 是BIOS 的继任者,但 BIOS 才用起来 更加顺手。更重要的是在用UEFI模式进行ubuntu16.04安装的时候,在安装后期会出现bug中断,具体什么不记得了,与grub有关,会导致系统无法启动,而这与UEFI有莫大的关系,所以安全起见,选后不带UEFI前缀的,也就是BIOS模式进行系统安装;

3)ubuntu16.04 安装好之后,启动可能会出现 grub rescue 故障,找不到 normal.mod,这可以通过我的另一篇 post 解决,附上解救指南:ubuntu系统下grub rescue故障恢复

3.至此,ubuntu16.04 算是安装完毕,第一次撒花o(∩_∩)o 

注:需要注意的是,目前我们也一直在使用集成显卡输出!且直到安装好nvidia驱动重启都要一直使用集成显卡输出!!!

 

二、各种依赖环境安装:

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
 
# (Python general)
sudo apt-get install -y python-pip
 
# (Python 2.7 development files)
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
 
# (or, Python 3.5 development files)
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-numpy python3-scipy
 
# (OpenCV 2.4)
sudo apt-get install -y libopencv-dev
 
(or, OpenCV 3.X - see other blogs in the end of the post)
 

 
  1. sudo apt-get update

  2.  
  3. sudo apt-get upgrade

  4.  
  5. sudo apt-get install -y build-essential cmake git pkg-config

  6.  
  7. sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler

  8.  
  9. sudo apt-get install -y libatlas-base-dev

  10.  
  11. sudo apt-get install -y --no-install-recommends libboost-all-dev

  12.  
  13. sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

  14.  
  15. # (Python general)

  16. sudo apt-get install -y python-pip

  17.  
  18. # (Python 2.7 development files)

  19. sudo apt-get install -y python-dev

  20. sudo apt-get install -y python-numpy python-scipy

  21.  
  22. # (or, Python 3.5 development files)

  23. sudo apt-get install -y python3-dev

  24. sudo apt-get install -y python3-numpy python3-scipy

  25.  
  26. # (OpenCV 2.4)

  27. sudo apt-get install -y libopencv-dev

  28.  
  29. (or, OpenCV 3.X - see other blogs in the end of the post)

以上是caffe官方安装指南的内容,亲测好用无疑,其实文末的caffe官方安装指南还是很不多错的指南,只是在nvidia驱动、cuda、cudnn、open3.x方面很不足(貌似这些都是重点内容,结果都被caffe官方文档屏蔽了,手动滑稽(*^__^*) )

注:在upgrade时,可能会提起缺少fireware,这个不是大问题,直接上网下载相应版本的固件安装即可

 

三、Nvidia驱动+cuda安装

写在安装前:

1)其实在cuda的安装中会涉及到nvidia驱动的安装,但是屡次尝试,总是会出现kernel souce的error,所以,还是提前安装为好。

2)安装nvidia驱动需要在命令行模式下,但有时可能会出现无法进入命令行或者进入命令行黑屏及显示nouveau相关的error提示,这是可通过以下的改动进行修复,重启后可能会出现屏幕显示非常延迟卡顿的现象,这正常,因为我们把显示驱动修改了。不过建议把需要的nvidia驱动、cuda和cudnn都下载好后再进行处理,否则如此卡顿会很忧伤的o(∩_∩)o

 
  1. sudo gedit /etc/default/grub

  2.  
  3. # set GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash nomodeset"

  4.  
  5. sudo update-grub

  6.  
  7. sudo reboot

1.下载需要的nvidia驱动程序(下载最新的即可),附上飞行链接:NVIDIA驱动程序下载

2.下载需要的cuda程序,下载runfile版本的,同样附上飞行链接:CUDA下载

2.卸载之前安装的nvidia驱动程序,新安装的系统不需要的这一步,但依旧写在此以告后人,因为nvidia驱动重复安装会出现循环登录无法进入系统的问题,或者反过来说,循环登录无法进入系统一般都是由于显卡驱动出现问题导致的,卸载后重新安装即可(如何卸载重装

sudo apt-get remove –purge nvidia*

3.禁用nouveau,其实这一步可能并不需要,因为在厂商安装的原始系统中并没有相关文件,我想可能是因为我们的集成显卡和独立显卡分别有各自的输出端口,可以自主插拔选择显示使用的显卡,而在笔记本等上面,两种显卡是同时连接的,故需要进行禁用:

 
  1. sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

  2.  
  3. # add blacklist nouveau option nouveau modeset=0

  4.  
  5. sudo update-initramfs -u<span style="font-family:'Microsoft YaHei';font-size:14px;">

  6. </span>

再配置环境

 
  1. sudo gedit ~/.bashrc

  2.  
  3. # add the following two lines

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

  5. export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

  6.  
  7. source ~/.bashrc

4.开始正式安装驱动

1)进入命令行模式(Ctrl+Alt+F1),并关闭桌面

sudo service lightdm stop

2)  进入驱动文件所在目录,修改文件权限(可选),然后执行文件

 
  1. sudo chmod a+x NVIDIA-Linux-x86_64-375.26.run # optional

  2.  
  3. sudo bash ./NVIDIA-Linux-x86_64-375.26.run

3)安装过程中开始会提示一个预安装script安装失败,问你要continue 还是abort,点击 continue就行,不用管。

5.进入cuda安装文件的文件夹,安装cuda

sudo sh cuda_8.0.61_375.26_linux.run

1)在选择是否安装nvidia驱动时,选‘n’,因为我们已经安装好了

2)在选择安装cuda samples,选 ‘n’,因为不需要

3)其余选项选择‘y’,或默认就行了

4)安装成功后,关机(命令为 shutdown -h now),更换显示输出端口为独立显卡的输出端后再启动;此处如果直接重启(sudo reboot)的话,由于未更换显示输出端口,而原驱动被禁用等原因,会出现循环登录的情况,此时强行关机再更换显示输出端口即可。

6.启动后配置cuda环境变量

1)一般配置此步即可,但有时会出现问题,可以选择用root用户进行编辑,也可以尝试后两步

 
  1. gedit ~/.bashrc # if can't edit, add sudo before

  2.  
  3. # add the two lines following

  4. export PATH=/usr/local/cuda/bin:$PATH

  5. export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

  6.  
  7. # cuda can change as cuda-8.0 specifically

  8.  
  9. source ~/.bashrc # MUST source

2)

 
  1. sudo gedit /etc/ld.so.conf.d/cuda.conf

  2.  
  3. # add the two lines following

  4. /usr/local/cuda/lib64

  5. /lib

  6.  
  7. sudo ldconfig -v

3)

 
  1. sudo gedit /etc/profile

  2.  
  3. # add following two lines

  4. PATH=/usr/local/cuda/bin:$PATH # 不能有空格!!

  5. export PATH

  6.  
  7. source /etc/profile

7.验证是否安装成功:

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

  2.  
  3. sudo make

  4.  
  5. ./deviceQuery

 

四、安装cudnn

1.下载对应cuda版本的cudnn,可以去官网下载,需要注册;不想注册的可以从网盘下载,网盘有5.1和6.0,建议下载cudnn 6.0(tensorflow要求6.0);也可以用下面的命令行下载:

 

wget http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz

 

2.下载后解压,得到cuda文件夹,里面有include和lib64两个子文件夹

3.进入include子文件夹

sudo cp cudnn.h /usr/local/cuda/include/  # 复制头文件到之前安装的cuda目录

4.进入lib64子文件夹,可以图形界面进入看清楚版本号,方便后期修改

sudo cp lib* /usr/local/cuda/lib64/  # 复制动态链接库到之前安装的cuda目录,注意查看

5.重新生成软链接

 
  1. cd /usr/local/cuda/lib64/sudo rm -rf libcudnn.so libcudnn.so.x # 删除原有动态文件,版本号注意变化,可在cudnn的lib64文件夹中查看

  2.  
  3. sudo ln -s libcudnn.so.x.x.x libcudnn.so.x # 生成软衔接,具体看cudnn的lib64中为什么版本,注意变化

  4.  
  5. sudo ln -s libcudnn.so.x libcudnn.so # 生成软链接

  6.  
  7. sudo ldconfig -v

6.验证安装cudnn后cuda是否依旧可用

nvcc --version  # or nvcc -V

 

五、安装caffe

1.下载caffe,此处下载caffe-master源码,并解压至任何地方即可;

2.进入caffe根目录,进行配置,文件中对每项设置都有注释,看看基本能懂

sudo cp Makefile.config.example Makefile.config

sudo gedit ./Makefile.config

配置好后,Makefile.config会包含以下有效内容

 
  1. USE_CUDNN := 1

  2. CUDA_DIR := /usr/local/cuda # or cuda-8.0

  3. CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \

  4. -gencode arch=compute_20,code=sm_21 \

  5. -gencode arch=compute_30,code=sm_30 \

  6. -gencode arch=compute_35,code=sm_35 \

  7. -gencode arch=compute_50,code=sm_50 \

  8. -gencode arch=compute_52,code=sm_52 \

  9. -gencode arch=compute_60,code=sm_60 \

  10. -gencode arch=compute_61,code=sm_61 \

  11. -gencode arch=compute_61,code=compute_61

  12. BLAS := atlas

  13. PYTHON_INCLUDE := /usr/include/python2.7 \

  14. /usr/lib/python2.7/dist-packages/numpy/core/include \

  15. /usr/local/lib/python2.7/dist-packages/numpy/core/include

  16. PYTHON_LIB := /usr/lib

  17. WITH_PYTHON_LAYER := 1

  18. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

  19. LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial/

  20. BUILD_DIR := build

  21. DISTRIBUTE_DIR := distribute

  22. TEST_GPUID := 0

  23. Q ?= @

3.进一步更改配置

 
  1. sudo gedit ./Makefile

  2.  
  3. # replace this line

  4. NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

  5. # with the following line

  6. NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

并打开CMakelists.txt添加一下内容

 
  1. # ---[ Includes

  2. set(${CMAKE_CXX_FLAGS} "-D_FORCE_INLINES ${CMAKE_CXX_FLAGS}")

4.为hdf5添加软连接,ubuntu16.04的某些升级之后,此步不再需要,但安全起见依然进行

 
  1. cd /usr/lib/x86_64-linux-gnu

  2.  
  3. sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so # 源文件的版本可能有所不同,可进入文件夹进行查看后再确定

  4.  
  5. sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so

5.安装需要的python模块,先进入caffe根目录(可以以root用户运行,避免出现一些权限问题)

 
  1. cd python

  2.  
  3. for req in $(cat requirements.txt); do pip install $req; done

如果有任何问题,可以再次执行以下命令

for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done

6.开始正式编译caffe

make all -j8

7.编译成功后,进行验证,没有错误即安装成功,大大地撒花o(∩_∩)o 

make runtest -j8

注:有的时候可能会出现找不到cuda相关的文件,可以直接进入cuda安装目录进行确认,一般都是存在的,可能是环境没有配置好,可以使用root用户重新配置环境并用root用户运行runtest,或者重启,一般都不会有大问题

 

六、编译其他结构

可以编译caffe的matlab和python接口,此处我们只编译python接口

1.直接进入caffe根目录,编译pycaffe

make pycaffe -j8

2.配置环境

 
  1. sudo gedit ~/.bashrc

  2.  
  3. # add the following line

  4. export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH

  5.  
  6. source ~/.bashrc

3.测试pycaffe

 
  1. python

  2.  
  3. >>> import caffe # 不报错即安装成功

注:如果提示找不到caffe,可以尝试用root用户配置环境,并用root用户执行;或者今后在写代码的时候,每次都直接将caffe的路径加入即可,只要caffe安装成功了,其他都是小问题

 
  1. import sys

  2.  
  3. sys.path.append('/path/to/caffe-master/python')

  4.  
  5. import caffe

4.最后,可以安装jupyter神器

 
  1. sudo pip install jupyter

  2.  
  3. # 命令终端输入以下语句即可使用

  4. jupyter notebook



~~~~~~~~~~~~~~~~~~~~~~华丽丽分割线~~~~~~~~~~~~~~~~~~~~

 

参考:

1.Ubuntu 16.04 or 15.10 Installation Guide:https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide#the-gpu-support-prerequisites

2.Install caffe-GPU on Ubuntu-16.04:http://gear.github.io/2017-03-30-caffe-gpu-installation/
3.Ubuntu16.04 Caffe 安装步骤记录(超详尽)http://blog.****.net/yhaolpz/article/details/71375762

4.Ubuntu16.04+CUDA8.0+cudnn7.5+Caffe安装过程:http://blog.****.net/u010159842/article/details/54291930

PS: 编译caffe-python接口时报错:

//home/idc/anaconda3/lib/libpng16.so.16: undefined reference to `[email protected]_1.2.9'

安装caffe真是历尽千幸万苦,我的错误信息为:

//home/idc/anaconda3/lib/libpng16.so.16: undefined reference to `[email protected]_1.2.9'

后面还有几行,主要是这个。

我的解决方法是在Makefile.config加入下列信息:

LINKFLAGS := -Wl,-rpath,$(HOME)/anaconda3/lib

这可能是我装了anaconda的原因。

 

OK

 

OPENCV

1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工。
下载链接http://opencv.org/releases.html,选择sources版本

2.解压下载下来的zip包

unzip opencv-3.4.1.zip
  • 1

3.进入到解压后的文件包中

4.安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限,再sudo apt-get update,然后在执行下面命令

sudo apt-get install cmake  
  • 1
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev  
  • 1

5.安装完cmake之后执行命令 ,创建编译文件夹,不创建的会提示(如下图)
In-source builds are not allowed.

mkdir my_build_dir
cd my_build_dir
  • 1
  • 2

CAFFE环境拾建 调试成功+opencv3.4.2

6.cmake一下

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
  • 1

注意:如果已经在新的文件夹中编译,但是还会出现之前的报错,把cmakecache.txt删了再编译就可

期间可能会下载一个东西,等待一会儿就OK
CAFFE环境拾建 调试成功+opencv3.4.2

7.执行命令,漫长的编译过程

sudo make
  • 1

CAFFE环境拾建 调试成功+opencv3.4.2

8.执行命令

sudo make install
  • 1

CAFFE环境拾建 调试成功+opencv3.4.2

9.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到

sudo gedit /etc/ld.so.conf.d/opencv.conf 
  • 1

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib  
  • 1

CAFFE环境拾建 调试成功+opencv3.4.2

10.执行如下命令使得刚才的配置路径生效

sudo ldconfig  
  • 1

这个时候可能会提示错误如下图所示(上部分)
CAFFE环境拾建 调试成功+opencv3.4.2
sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符号连接
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符号连接
出现这个错误可能是由于系统BUG所致

只需要分别输入上面图下部分的四行命令就可解决
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

11.配置bash

sudo gedit /etc/bash.bashrc  
  • 1

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  • 1
  • 2

保存,执行如下命令使得配置生效

source /etc/bash.bashrc  
  • 1

更新

sudo updatedb  
  • 1

12.至此所有的配置都已经完成
下面用一个小程序测试一下

找到
cd到opencv-3.4.1/samples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行

cmake .
make
./opencv_example
  • 1
  • 2
  • 3

即可看到打开了摄像头,在左上角有一个hello opencv
即表示配置成功