Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.3.0+Caffe

本文参考文章链接:1. https://blog.csdn.net/balixiaxuetian/article/details/79154013

                              2.https://blog.csdn.net/jonms/article/details/79318566

第一步:安装依赖包


安装后续步骤或环境必需的依赖包,按ctrl+ALT+T进入终端,依次输入以下命令(可复制):
[plain]  view plain  copy
  1. sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler  
  2.   
  3. sudo apt-get install --no-install-recommends libboost-all-dev  
  4.   
  5. sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev  
  6.   
  7. sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev  
  8.   
  9. sudo apt-get install git cmake build-essential  

     有一定几率安装失败而导致后续步骤出现问题,所以要确保以上依赖包都已安装成功,验证方法就是重新运行安装命令,如验证 git cmake build-essential是否安装成功共则再次运行以下命令:
[plain]  view plain  copy
  1. sudo apt-get install git cmake build-essential   
界面提示如下则说明已成功安装依赖包,否则继续安装直到安装成功。
[plain]  view plain  copy
  1. Reading package lists... Done  
  2. Building dependency tree         
  3. Reading state information... Done  
  4. build-essential is already the newest version (12.1ubuntu2).  
  5. cmake is already the newest version (3.5.1-1ubuntu3).  
  6. git is already the newest version (1:2.7.4-0ubuntu1.3).  
  7. 0 upgraded, 0 newly installed, 0 to remove and 126 not upgraded.  

假如有安装包一直下载失败,可以使用:
[plain]  view plain  copy
  1. sudo apt-get update   
更新下载源,然后重新输入安装命令。

第二步:安装显卡驱动

1、检查自己的计算机是否具备CUDA安装条件 
1)检查GPU是否支持CUDA 
Windows下,可以通过NVIDIA GeForce Experience查看自己的GPU型号,或者通过百度、谷歌等搜索引擎来获取与自己PC相关的GPU信息。 
Linux下,可以在终端下键入

$ lspci | grep -i nvidia
  • 1

显示出你的NVIDIA GPU版本信息 
 
然后去CUDA的官网查看自己的GPU版本是否在CUDA的支持列表中 
2)验证自己的Linux版本是否支持 CUDA(Ubuntu 16.04和Ubuntu17.04都支持)

$ uname -m && cat /etc/*release
  • 1

 
3)验证是否安装了gcc

$ gcc --version
  • 1

 
如果没有,可以在终端键入

$ sudo apt-get install gcc
  • 1

4)验证系统是否安装了kernel header和 package development

$ uname -r
$ sudo apt-get install linux-headers-$(uname -r)
  • 1
  • 2

满足要求后,便可进行下面的正式安装过程。

2、CUDA提供两种安装方式:package manager安装和runfile安装。 
这里我选择runfile安装,采用runfile安装,CUDA自带的驱动可能无法定位内核信息,所以我们先安装NVIIDA驱动。

3、安装NVIDIA驱动程序(如果事先有装但失败的,先卸载)

$ sudo apt remove --purge nvidia*
  • 1

1)禁用nouveau驱动 
终端中运行:

$ lsmod | grep nouveau
  • 1

如果有输出,则代表nouveau正在运行, 需要我们手动禁掉nouveau。

在Ubuntu16.04中,我们可以通过以下操作禁用nouveau:

a.在/etc/modprobe.d中创建文件blacklist-nouveau.conf

$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf
  • 1

在文件中输入以下内容: 
blacklist nouveau 
options nouveau modeset=0

b.执行

$ sudo update-initramfs -u
  • 1

c.查看nouveau是否已经成功禁用

$ lsmod | grep nouveau
  • 1

若无内容输出,则禁用成功,若仍有内容输出,请检查上述操作,并重复。 
操作无误但仍有输出,则可重启,进入用户登录界面时(不要登录进桌面),按Ctrl+Alt+F1进入字符终端界面,输入用户名和密码进行登录,登录成功后,再次查看

$ lsmod | grep nouveau
  • 1

这时,我们已经成功禁用了nouveau,无输出 
2)关闭图形化界面

$ sudo service lightdm stop
  • 1

3)安装驱动 
NVIDIA驱动安装也有多种方式,runfile文件形式的安装和apt安装

apt安装:

a.添加Graphic Drivers PPA

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
  • 1
  • 2

b.寻找合适的驱动版本

$ ubuntu-drivers devices
  • 1

 
如上图,显示GTX 960M显卡建议的驱动版本是390

c.安装nvidia driver

$ sudo apt-get install nvidia-390
  • 1

d.安装完成后,重启

$ sudo reboot
  • 1

e.这时,执行下面的命令,查看驱动的安装状态

$ sudo nvidia-smi
$ sudo nvidia-settings
  • 1
  • 2

 

runfile文件安装:

runfile文件的安装先要安装gcc-multilib

$ sudo apt install gcc-multilib
  • 1

接着,以NVIDIA-Linux-x86_64-390.25.run为例

$ sudo sh NVIDIA-Linux-x86_64-390.25.run
  • 1

刚开始运行时,会有报错(预处理脚本错误,会问继续还是退出),不管错误继续,然后就是一路安装,重启即可。测试是否安装成功如上图所示

特别注意!!!!!!!!!!!!!!


虽然CUDA 9.1 安装包里说需要安装384.00版本之后的驱动,但是亲测384.98和384.111都是不支持CUDA 9.1的,这也在NVIDIA官方论坛里得到了NVIDIA工程师的肯定,巨坑!所以假如亲们无法安装CUDA 9.1安装包里自带的387版本的驱动,那么就放弃CUDA 9.1,转而下载安装CUDA 9.0。CUDA 9.0是支持384.xx版本的驱动的,配置方法完全相同,此博客同样适用,只是路径中若出现cuda-9.1的地方改成cuda-9.0即可。CUDA 9.0的下载见“10、补充”。



     执行此命令约1分钟后会出现安装协议要你看,刚开始是0%,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后是否安装显卡驱动选择no,因为前面已经装过了,我实际安装先装的cuda,后装的nvidia驱动,其实先后顺序应该无关
[html]  view plain  copy
  1. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?  
  2. (y)es/(n)o/(q)uit:n  

    之后会问你是否安装 nvidia-xconfig,选择no。

[html]  view plain  copy
  1. do you want to run nvidia-xconfig?  
  2. (y)es/(n)o/(q)uit: n  

     是否安装 CUDN 9.1 都选择no。也就是我们这次只安装一个显卡驱动,目的是先保证显卡驱动安装成功,否则安装CUDA 9.1很容易失败。

[html]  view plain  copy
  1. Install the CUDA 9.1 Samples?  
  2. (y)es/(n)o/(q)uit: n  
[html]  view plain  copy
  1. Install the CUDA 9.1 Toolkit?  
  2. (y)es/(n)o/(q)uit: n  
安装完成后重启系统:
[html]  view plain  copy
  1. reboot  
     重启系统后看看桌面显示的分辨率正不正常。如果应用图标很大,像素很渣,说明显卡驱动没有安装成功,有可能是因为禁用 nouveau没有生效,也有可能是驱动不匹配, 这时候可以使用我提供的方法二。安装完成后通过以下命令查看显卡信息:
[html]  view plain  copy
  1. nvidia-settings  

我的电脑显示如下信息:



方法二:直接在线安装(此方法需要联网),适用于CUDA 9.0


注意:再次提醒此方法暂时不适用于CUDA 9.1

首先仍旧是关闭桌面服务并卸载之前的显卡驱动(这两步见方法一),随后加入官方ppa源:

[html]  view plain  copy
  1. sudo add-apt-repository ppa:graphics-drivers/ppa  
之后刷新软件库并安装显卡驱动:

[html]  view plain  copy
  1. sudo apt-get update  
  2.   
  3. sudo apt-get install nvidia-384 nvidia-settings nvidia-prime  
      我用此命令会自动安装 384.111版本的驱动(我使用 nvidia-367 安装的也是384.111版本的驱动)。安装完成后输入reboot重启系统,假如桌面分辨率没什么问题应该安装成功了。之后通过下面命令查看显卡信息:
[html]  view plain  copy
  1. nvidia-settings  


第三步:配置环境变量


使用 gedit 命令打开配置文件:
[html]  view plain  copy
  1. sudo gedit ~/.bashrc  
打开后在文件最后加入以下两行内容:

[python]  view plain  copy
  1. export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH  
  2.   
  3. export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH   
保存并退出。


第四步:安装 CUDA 9.1


安装完显卡驱动后,CUDA toolkit和samples可单独安装,直接在终端运行安装,无需进入文本模式:

[html]  view plain  copy
  1. sudo sh cuda_9.1.85_387.26_linux.run --no-opengl-libs  
 执行此命令约1分钟后会出现安装协议要你看,刚开始是0%,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,是否安装显卡驱动选择no:

[html]  view plain  copy
  1. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?  
  2. (y)es/(n)o/(q)uit: n  

其他的都选择yes或者默认,等待安装完成:

[plain]  view plain  copy
  1. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?  
  2. (y)es/(n)o/(q)uit: n  
  3.   
  4. Install the CUDA 9.1 Toolkit?  
  5. (y)es/(n)o/(q)uit: y  
  6.   
  7. Enter Toolkit Location  
  8.  [ default is /usr/local/cuda-9.1 ]:   
  9.   
  10. Do you want to install a symbolic link at /usr/local/cuda?  
  11. (y)es/(n)o/(q)uit: y  
  12.   
  13. Install the CUDA 9.1 Samples?  
  14. (y)es/(n)o/(q)uit: y  
  15.   
  16. Enter CUDA Samples Location  
  17.  [ default is /home/ccem ]:   
  18.   
  19. Installing the CUDA Toolkit in /usr/local/cuda-9.1 ...  
  20. Installing the CUDA Samples in /home/ccem ...  
  21. Copying samples to /home/ccem/NVIDIA_CUDA-9.1_Samples now...  
  22. Finished copying samples.  
  23.   
  24. ===========  
  25. = Summary =  
  26. ===========  
  27.   
  28. Driver:   Not Selected  
  29. Toolkit:  Installed in /usr/local/cuda-9.1  
  30. Samples:  Installed in /home/ccem  
  31.   
  32. Please make sure that  
  33.  -   PATH includes /usr/local/cuda-9.1/bin  
  34.  -   LD_LIBRARY_PATH includes /usr/local/cuda-9.1/lib64, or, add /usr/local/cuda-9.1/lib64 to /etc/ld.so.conf and run ldconfig as root  
  35.   
  36. To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.1/bin  
  37.   
  38. Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.1/doc/pdf for detailed information on setting up CUDA.  
  39.   
  40. ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.1 functionality to work.  
  41. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:  
  42.  sudo <CudaInstaller>.run -silent -driver  
  43.   
  44. Logfile is /tmp/cuda_install_36731.log  

假如出现:

[plain]  view plain  copy
  1. Installing the CUDA Toolkit in /usr/local/cuda-9.1 …   
  2. Missing recommended library: libGLU.so   
  3. Missing recommended library: libX11.so   
  4. Missing recommended library: libXi.so   
  5. Missing recommended library: libXmu.so  
原因是缺少相关的依赖库,安装相应库就解决了,安装库完成后重装一下CUDA Toolkit即可:

[plain]  view plain  copy
  1. sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev   

安装完成后配置CUDA环境变量,使用 gedit 命令打开配置文件:

[html]  view plain  copy
  1. sudo gedit ~/.bashrc  
在该文件最后加入以下两行并保存:
[html]  view plain  copy
  1. export PATH=/usr/local/cuda/bin:$PATH     #/usr/local/cuda和/usr/local/cuda-9.1是同一个文件夹,前者是后者的镜像  
  2.   
  3. export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH  
使该配置生效:
[html]  view plain  copy
  1. source ~/.bashrc  

检验CUDA 是否安装成功,输入:

[plain]  view plain  copy
  1. cd /usr/local/cuda-9.1/samples/1_Utilities/deviceQuery  
  2.   
  3. sudo make  
  4.   
  5. ./deviceQuery  

会出现你的显卡的详细信息。假如出现:

[plain]  view plain  copy
  1. ./deviceQuery Starting...  
  2.   
  3.  CUDA Device Query (Runtime API) version (CUDART static linking)  
  4.   
  5. cudaGetDeviceCount returned 35  
  6. -> CUDA driver version is insufficient for CUDA runtime version  
  7. Result = FAIL  
那说明显卡驱动版本和CUDA 9.1不适配,目前 384.xx版本的驱动是不支持CUDA 9.1 的,这时候就尝试安装更加新的驱动。若还是不行就放弃 CUDA 9.1,安装CUDA 9.0吧,趁还来得及。此博客同样适用于安装CUDA 9.0,只需将配置文件中出现cuda-9.1的地方改成cuda-9.0即可。

卸载CUDA 9.1 的方法:

[plain]  view plain  copy
  1. cd /usr/local/cuda/bin  
  2. sudo ./uninstall_cuda_9.1.pl  

卸载完成后如果显示:Not removing directory, it is not empty: /usr/local/cuda-9.1 ,假如需要重装CUDA 9.0的话就把这个文件夹删除。在/usr/local/路劲下输入:

[plain]  view plain  copy
  1. sudo rm -r cuda-9.1  
或者查看

同时按住Alt + ctrl +F7,返回到图形化登录界面,输入密码登录。 
如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了 

重启电脑,检查Device Node Verification

注意:如果遇到循环登陆进不了系统,不要慌,在文本系统开启ctrl+alt+f1,具体可百度,比较容易https://blog.csdn.net/ssmixi/article/details/73483795


$ sudo reboot
$ ls /dev/nvidia*
  • 1
  • 2

 
a、若结果显示

/dev/nvidia0    /dev/nvidiactl    /dev/nvidia-uvm
  • 1
  • 2

或显示出类似的信息,应该有三个(包含一个类似/dev/nvidia-nvm的),则安装成功。 
b、大多数结果可能会是这样

ls: cannot access/dev/nvidia*: No such file or directory
  • 1
  • 2

或是这样的,只出现

/dev/nvidia0    /dev/nvidiactl
  • 1
  • 2

a中的一个或两个,但没有/dev/nvidia-num,即文件显示不全。



第五步:安装cuDNN v7


我提供的百度云文件解压后的cudnn文件以“.solitairetheme8”结尾,将其重命名为“.tgz”结尾的文件,然后解压到当前文件夹,得到一个cudn 文件夹,该文件夹下有include 和 lib64 两个文件夹,命令行进入其中的include 文件夹路径下,然后进行以下操作:
[html]  view plain  copy
  1. sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件  
然后命令行进入 cudn/lib64 文件夹路径下,运行以下命令(CUDA 9.0也是一样的命令):
[html]  view plain  copy
  1. sudo cp lib* /usr/local/cuda/lib64/ #复制动态链接库  
  2. cd /usr/local/cuda/lib64/   
  3. sudo rm -rf libcudnn.so libcudnn.so.7  #删除原有动态文件  
  4. sudo ln -s libcudnn.so.7.0.5 libcudnn.so.7  #生成软衔接  
  5. sudo ln -s libcudnn.so.7 libcudnn.so  #生成软链接  

注意:第四个要看清自己cudn/lib64文件里那三个文件几点几,这里第三步7.0.5,我的是7.1.2后来才发现,这步没有修改所带来的问题非常严重,我随后会写解决办法。

然后需要将路径/usr/local/cuda/lib64 添加到动态库,分两步:

      1)安装vim。输入:

[html]  view plain  copy
  1. sudo apt-get install vim-gtk  
      2)输入:
[html]  view plain  copy
  1. sudo vim /etc/ld.so.conf.d/cuda.conf  
          键盘按i进入编辑状态,添加文字:                 
[html]  view plain  copy
  1. /usr/local/cuda/lib64  
         然后按esc,输入:(注意有冒号)
[html]  view plain  copy
  1. :wq  #保存退出  

       终端下接着输入 sudo ldconfig 命令使链接生效。

      软链接后可以用sudo ldconfig -v 命令查看是否链接成功:是否有/usr/local/cuda/lib64文件夹,看清到底有没有,没有就错了。ldconfig命令的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。


     安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

[html]  view plain  copy
  1. nvcc: NVIDIA (R) Cuda compiler driver  
  2. Copyright (c) 2005-2017 NVIDIA Corporation  
  3. Built on Fri_Nov__3_21:07:56_CDT_2017  
  4. Cuda compilation tools, release 9.1, V9.1.85  

第六步:安装 OpenCV 3.3.0 

  
   进入官网 : http://opencv.org/releases.html , 选择 3.3.0 版本的 sources , 下载 opencv-3.3.0.zip 。随后解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.3.0 目录下,执行:
[plain]  view plain  copy
  1. mkdir build # 创建编译的文件目录  
  2.   
  3. cd build  
  4.   
  5. cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..  
  6.   
  7. make -j8  #编译  
注意:在处理cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 会卡住,网上有很多解决方案,最后我发现2.几版本和3.几版本,ippicv包不一样,3.几可能会在隐藏.cache中,ctrl+H可以看到,解决方案很杂,最后我也使用了发现不好用,最后发现是网速问题,连接手机热点完美解决,还有一定不要在虚拟机安装opencv,问题很多,在纯净linux里安装
在98%的时候会等很久很久,属于正常现象。编译过程很顺利,编译成功后安装:
[html]  view plain  copy
  1. sudo make install #安装  
安装完成后通过查看 opencv 版本验证是否安装成功:
[html]  view plain  copy
  1. pkg-config --modversion opencv  

卸载OpenCV的方法:进入OpenCV解压文件夹中的buid 文件夹:

[plain]  view plain  copy
  1. cd /home/ccem/opencv-3.4.0/build  
运行:

[plain]  view plain  copy
  1. sudo make uninstall  
然后把整个opencv-3.3.0文件夹都删掉。随后再运行:

[plain]  view plain  copy
  1. sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv  
把一些残余的动态链接文件和空文件夹删掉。有些文件夹已经被删掉了所以会找不到路径。

第七步:安装 Caffe


首先cd 到你要安装的路径下运行:
[html]  view plain  copy
  1. git clone https://github.com/BVLC/caffe.git  
这时候会出现一个caffe文件夹。命令行进入此文件夹,运行:
[html]  view plain  copy
  1. sudo cp Makefile.config.example Makefile.config  
    此命令是将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
[html]  view plain  copy
  1. sudo gedit Makefile.config  

修改 Makefile.config 文件内容:


1.应用 cudnn
[plain]  view plain  copy
  1. 将:  
  2. #USE_CUDNN := 1  
  3. 修改为:   
  4. USE_CUDNN := 1  

2.应用 opencv 3 版本
[plain]  view plain  copy
  1. 将:  
  2. #OPENCV_VERSION := 3   
  3. 修改为:   
  4. OPENCV_VERSION := 3  

3.使用 python 接口
[plain]  view plain  copy
  1. 将:  
  2. #WITH_PYTHON_LAYER := 1   
  3. 修改为   
  4. WITH_PYTHON_LAYER := 1  

4.修改 python 路径
[plain]  view plain  copy
  1. 将:  
  2. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include  
  3. LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib   
  4. 修改为:   
  5. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial  
  6. LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial    

此python路径为系统自带python的路径,假如想使用Anaconda的python的话需要在其他地方修改。

5.去掉compute_20

[plain]  view plain  copy
  1. 找到  
  2. # CUDA architecture setting: going with all of them.  
  3. # For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.  
  4. # For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.  
  5. # For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.  
  6. CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \  
  7.             -gencode arch=compute_20,code=sm_21 \  
  8.             -gencode arch=compute_30,code=sm_30 \  
  9.             -gencode arch=compute_35,code=sm_35 \  
  10.             -gencode arch=compute_50,code=sm_50 \  
  11.             -gencode arch=compute_52,code=sm_52 \  
  12.             -gencode arch=compute_60,code=sm_60 \  
  13.             -gencode arch=compute_61,code=sm_61 \  
  14.             -gencode arch=compute_61,code=compute_61  
  15.   
  16. 直接把标红去掉,注意-gencode arch=compute_30,code=sm_30 \  前面是用两个tab敲进去的,原文用的空格,我最后才发现,走了好多弯路。所以我采取直接删除方式


由于CUDA 9.x +并不支持compute_20,此处不修改的话编译caffe时会报错:

[html]  view plain  copy
  1. nvcc fatal   : Unsupported gpu architecture 'compute_20'  


然后修改 caffe 目录下的 Makefile 文件(修改的地方找起来比较困难的话可以复制到word里查找):

[plain]  view plain  copy
  1. 将:  
  2. NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)  
  3. 替换为:  
  4. NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)  
[plain]  view plain  copy
  1. 将:  
  2. LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5  
  3. 改为:  
  4. LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial  


     至此caffe配置文件修改完毕,可以开始编译了 。假如显卡不是feimi架构的可以输入如下命令防止出现 Unsupported gpu architecture 'compute_20' 的问题

[plain]  view plain  copy
  1. cmake -D CMAKE_BUILD_TYPE=RELEASE  -D CUDA_GENERATION=Kepler ..  
在 caffe 目录下执行 :
[plain]  view plain  copy
  1. make all -j8  
       这时如果之前的配置或安装出错,那么编译就会出现各种各样的问题,所以前面的步骤一定要细心。假如编译失败可对照出现的问题Google解决方案,再次编译之前使用 sudo make clean 命令清除之前的编译,报错:nothing to be done for all 就说明没有清除之前的编译。编译成功后可运行测试:
错误解决https://blog.csdn.net/qq_27748767/article/details/79206881

安装到 

make all -j16  

make test -j16 

make runtest -j16  

时出现问题

Q1 make all -j16  时 报错

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so.1.0.0
/usr/bin/ld: 找不到 -lcudnn
collect2: error: ld returned 1 exit status
Makefile:573: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed
make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1


感觉主要是 /usr/bin/ld: 找不到 -lcudnn  这句话的问题

于是百度 

https://stackoverflow.com/questions/43996484/ubuntu-caffe-installation-error-usr-bin-ld-cannot-find-lcudnn

找到解决方案

使用sudo cp的指令将cudnn里提取的文件复制到usr/local/cuda/lib64/ 文件和/usr/local/cuda/include

但是cp时会出现一个 无法通过符号链接'/usr/local/cuda-8.0/lib64/libcudnn.so.6' 进行操作  的问题尚未解决

但是make all 可以通过了


补充解决方案

安装CUDNN

1、删除原来的cudnn系统路径下的一些文件

 

sudo rm -rf /usr/local/cuda/include/cudnn.h

sudo rm -rf /usr/local/cuda/lib64/libcudnn*   #这里*是通配符,

libcudnn*指的是名字中带有libcudnn的所有文件

 

2、安装刚才解压的cudnn版本,在终端cd到刚解压的cuda文件夹,然后继续输入下面两个指令,这两个指令相当于把解压后的cuda文件夹下的一些文件拷到系统路径下面

 

sudo cp include/cudnn.h /usr/local/cuda/include/

sudo cp lib64/lib* /usr/local/cuda/lib64/       #这里*是通配符,lib*指的是名字中带有lib的所有文件

 

3、在系统路径下建立软链接(解压出来的lib64下面有3个so文件。分别是

libcudnn.so 和 libcudnn.so.5以及 libcudnn.so.5.1.3文件。 并且这3个点so文件大小都一样。其实都是软连接!libcudnn.so链接到libcudnn.so.5,而

libcudnn.so.5.又链接到libcudnn.so.5.1.3。 真正的文件只有

libcudnn.so.5.1.3)

 

cd /usr/local/cuda/lib64

sudo chmod +r libcudnn.so.5.1.10

sudo ln -sf libcudnn.so.5.1.10 libcudnn.so.5

sudo ln -sf libcudnn.so.5 libcudnn.so

这里面指令要根据自己版本修改数字



Q2 make runtest 的时候一直报错

.build_release/tools/caffe: 

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

Makefile:533: recipe for target 'runtest' failed
make: *** [runtest] Error 127


看错误日志是说没有找到文件,这个文件也是Q1中无法通过符号链接的文件ibcudnn.so.6

于是考虑建立新的链接 参考

http://blog.csdn.net/u013059662/article/details/51854072 的博客

后发现再次make runtest依旧报错

于是再次搜索到

https://stackoverflow.com/questions/43515617/caffe-error-while-loading-shared-libraries-libcudnn-so-5-cannot-open-shared-o

stackoverflow上的提问,虽然没有回答,但是照着作者已经做过的两次尝试反而成功了.(心疼作者)

解决方案,作者失败原因是没有开启root权限
[plain]  view plain  copy
  1. sudo make runtest -j8  
运行结果如下:


可以看到2123个tests中只有一个失败了:
[html]  view plain  copy
  1. BatchReindexLayerTest/3.TestGradient, where TypeParam = caffe::GPUDevice<double>  
Google了一下,貌似使用CUDA 9.1加双显卡的都有这个错误,暂且不管它,目前不影响使用。使用mnist测试程序是可以运行的。CUDA 9.0则测试全部通过。

第八步:用 mnist 手写数据集验证


mnist测试方法如下(以下命令都在caffe目录下运行):
1)进入caffe文件夹,看看此文件夹里是否有一个build文件夹,没有的话运行:
[html]  view plain  copy
  1. make all -j8  
2)下载mnist数据库,在caffe目录下运行:
[html]  view plain  copy
  1. sudo ./data/mnist/get_mnist.sh  
3) 将二进制数据库文件转换成lmdb数据库格式:
[html]  view plain  copy
  1. sudo ./examples/mnist/create_mnist.sh  
4)训练lenet网络:
[html]  view plain  copy
  1. sudo ./examples/mnist/train_lenet.sh  
结果如下:


       
      可以看到测试的识别准确率为 99.08%。至此整个caffe已经配置完毕。

猜你喜欢

转载自blog.csdn.net/flowrush/article/details/79943575