Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.4.0+Caffe+PyCharm 完全安装指南,国内最全!(适用CUDA 9.0)

   原创博客,转载请说明出处!   (本人第一篇博客,用心之作,有用求赞)


    首先得感谢一篇博客的作者yhao:点击打开链接 (http://blog.csdn.net/yhaolpz/article/details/71375762) 他提供了很详细的基于CUDA 8.0 的安装过程。由于我需要安装的是CUDA 9.1+cuDNN v7+OpenCV 3.4.0,照搬CUDA 8.0的安装过程会有很多错误出现,通过我的不断探索也已一一解决(官方安装文档+stackover+Nvidia官方论坛+各种搜和问),而且给出了很多可能出现问题的解决方法。我还添加了很多配置过程的说明,让大家知其然也知其所以然。

我的安装硬件是两块 TITAN Xp 显卡。

安装过程分为以下八步:

1、安装依赖包

2、安装显卡驱动

3、配置环境变量

4、安装 CUDA 9.1

5、安装 cuDNN v7

6、安装 OpenCV 3.4.0

7、安装 caffe

8、用 mnist 手写数据集验证

9、在PyCharm上运行caffe

10、补充(持续更新)

第一步:安装依赖包


这一步和yhao的博客基本相同,安装后续步骤或环境必需的依赖包,按ctrl+ALT+T进入终端,依次输入以下命令(可复制):
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler

sudo apt-get install --no-install-recommends libboost-all-dev

sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

sudo apt-get install git cmake build-essential

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

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

第二步:安装显卡驱动


Ubuntu 16.04 自带  nouveau显卡驱动,这个自带的驱动是不能用于CUDA的,需要卸载重装。假如你以重装过显卡驱动则可跳过这一步。没有重装过的就跟着我的步骤往下走。

     首先得禁用Ubuntu自带的显卡驱动nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
打开后发现该文件中没有任何内容,写入:
blacklist nouveau
options nouveau modeset=0

保存时命令窗口可能会出现以下提示:
** (gedit:4243): WARNING **: Set document metadata failed: 不支持设置属性 metadata::gedit-position
无视此提示~,保存后关闭文件,注意此时还需执行以下命令使禁用 nouveau 真正生效:
sudo update-initramfs -u
然后测试一下,假如输入以下命令什么都没显示那么说明禁用nouveau生效了
lsmod | grep nouveau

接下来就可以开始重装显卡驱动了。

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


虽然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、补充”。

重装显卡驱动提供两种方法:(方法二不适用于 CUDA 9.1,但是适用于CUDA 9.0)

方法一:使用 CUDA 9.1 安装包里自带的驱动

CUDA 9.1安装包里自带的显卡驱动为:linux-x86_64 387.26,可以适配新出的很多显卡。(特别说明:我的电脑安装完387.26版本的驱动后成功配置了caffe,但在某次异常断电重启后显卡驱动失效,感觉此驱动不稳定。求稳的朋友可以安装CUDA 9.0,配置方法此博客同样适用。)

CUDA 9.1 和cuDNN安装包没下的同志可以从我自己上传的百度云下载:链接:https://pan.baidu.com/s/1c4m5aiG 密码:ckj4

      下载完成后,把解压出来的 CUDA 安装文件(cuda_9.1.85_387.26_linux.run)移动到 HOME 路径下,方便安装过程的文件检索。然后通过 Ctrl + Alt + F1 进入文本模式,输入帐号密码登录,通过 Ctrl + Alt + F7 可返回图形化模式,在文本模式登录后首先关闭桌面服务:

sudo service lightdm stop
     这里会要求你输入账户的密码。然后通过 Ctrl + Alt + F7 发现已无法成功返回图形化模式,说明桌面服务已成功关闭,注意此步对接下来的 nvidia 驱动安装尤为重要,必需确保桌面服务已关闭。按Ctrl + Alt + F1 再次进入文本模式,先卸载之前的显卡驱动:
sudo apt-get purge nvidia*
然后运行 CUDA 安装文件安装驱动,之前我们已经把 CUDA 安装文件移动至 HOME文件夹,直接通过 sh 命令运行安装文件即可:
sudo sh cuda_9.1.85_387.26_linux.run --no-opengl-libs    #run文件的文件名根据自己下的文件名修改,默认是我提供的文件
     执行此命令约1分钟后会出现安装协议要你看,刚开始是0%,此时长按回车键让此百分比增长,直到100%,然后按照提示操作即可,先输入 accept ,然后是否安装显卡驱动选择yes
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: y

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

do you want to run nvidia-xconfig?
(y)es/(n)o/(q)uit: n

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

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

我的电脑显示如下信息:

Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.4.0+Caffe+PyCharm 完全安装指南,国内最全!(适用CUDA 9.0)_第1张图片


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


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

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

sudo add-apt-repository ppa:graphics-drivers/ppa
之后刷新软件库并安装显卡驱动:

sudo apt-get update

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


第三步:配置环境变量


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

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

export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH 
保存并退出。


第四步:安装 CUDA 9.1


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

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

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: n

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

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: n

Install the CUDA 9.1 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-9.1 ]: 

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y

Install the CUDA 9.1 Samples?
(y)es/(n)o/(q)uit: y

Enter CUDA Samples Location
 [ default is /home/ccem ]: 

Installing the CUDA Toolkit in /usr/local/cuda-9.1 ...
Installing the CUDA Samples in /home/ccem ...
Copying samples to /home/ccem/NVIDIA_CUDA-9.1_Samples now...
Finished copying samples.

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-9.1
Samples:  Installed in /home/ccem

Please make sure that
 -   PATH includes /usr/local/cuda-9.1/bin
 -   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

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.1/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.1/doc/pdf for detailed information on setting up CUDA.

***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.
To install the driver using this installer, run the following command, replacing  with the name of this run file:
 sudo .run -silent -driver

Logfile is /tmp/cuda_install_36731.log

假如出现:

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

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev 

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

sudo gedit ~/.bashrc
在该文件最后加入以下两行并保存:
export PATH=/usr/local/cuda/bin:$PATH     #/usr/local/cuda和/usr/local/cuda-9.1是同一个文件夹,前者是后者的镜像

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
使该配置生效:
source ~/.bashrc

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

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

sudo make

./deviceQuery

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

./deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
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 的方法:

cd /usr/local/cuda/bin
sudo ./uninstall_cuda_9.1.pl

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

sudo rm -r cuda-9.1


第五步:安装cuDNN v7


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

      1)安装vim。输入:

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

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

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


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

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

第六步:安装 OpenCV 3.4.0 

  
   进入官网 : http://opencv.org/releases.html , 选择 3.4.0 版本的 sources , 下载 opencv-3.4.0.zip 。随后解压到你要安装的位置,命令行进入已解压的文件夹 opencv-3.4.0 目录下,执行:
mkdir build # 创建编译的文件目录

cd build

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

make -j8  #编译
在98%的时候会等很久很久,属于正常现象。编译过程很顺利,编译成功后安装:
sudo make install #安装
安装完成后通过查看 opencv 版本验证是否安装成功:
pkg-config --modversion opencv

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

cd /home/ccem/opencv-3.4.0/build
运行:

sudo make uninstall
然后把整个opencv-3.4.0文件夹都删掉。随后再运行:

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 到你要安装的路径下运行:
git clone https://github.com/BVLC/caffe.git
这时候会出现一个caffe文件夹。命令行进入此文件夹,运行:
sudo cp Makefile.config.example Makefile.config
    此命令是将 Makefile.config.example 文件复制一份并更名为 Makefile.config ,复制一份的原因是编译 caffe 时需要的是 Makefile.config 文件,而Makefile.config.example 只是caffe 给出的配置文件例子,不能用来编译 caffe。

然后修改 Makefile.config 文件,在 caffe 目录下打开该文件:
sudo gedit Makefile.config

修改 Makefile.config 文件内容:


1.应用 cudnn
将:
#USE_CUDNN := 1
修改为: 
USE_CUDNN := 1

2.应用 opencv 3 版本
将:
#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3

3.使用 python 接口
将:
#WITH_PYTHON_LAYER := 1 
修改为 
WITH_PYTHON_LAYER := 1

4.修改 python 路径
将:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为: 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
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

找到
# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 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

改为:
# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := -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


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

nvcc fatal   : Unsupported gpu architecture 'compute_20'


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

将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial


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

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

sudo make runtest -j8
运行结果如下:
Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.4.0+Caffe+PyCharm 完全安装指南,国内最全!(适用CUDA 9.0)_第2张图片

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

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


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

Ubuntu 16.04+CUDA 9.1+cuDNN v7+OpenCV 3.4.0+Caffe+PyCharm 完全安装指南,国内最全!(适用CUDA 9.0)_第3张图片
       
      可以看到测试的识别准确率为 99.08%。至此整个caffe已经配置完毕。

第九步:在PyCharm上运行caffe  

     
目前虽然已经成功配置了caffe,但是只能在命令行里运行,弊端很明显,不利于调试。所以可以配置一下使其在PyCharm上运行。PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。

我已经成功在PyCharm上运行了caffe,这一部分我另外写了一篇博客,详见:点击打开链接 
:http://blog.csdn.net/balixiaxuetian/article/details/79161821

10、补充(持续更新)


1)caffe配置完成后将cuda 9.1换成 9.0的方法

我前面也提到过,电脑安装CUDA 9.1自带的显卡驱动版本 387.26不稳定,在某次重启后失效了。于是我重新安装了384.111版本的显卡驱动。但恶心的是,CUDA 9.1 不支持384.xx版本的驱动,于是我想换成CUDA 9.0。但是此时我已经完全配置好caffe了,不需要全部推倒重来,只需先卸载CUDA 9.1和openCV 3.4.0,然后重装CUDA 9.0,cuDNN 和openCV 3.4.0 即可,卸载的方法前面步骤里有,其他的都不需要动(完全按照我的教程配置的话环境变量都不需要改,否则需要检查一下环境变量,将cuda-9.1出现的地方换成cuda-9.0), make runtest 即可全部通过。第九步中把pycaffe重新编译一下即可。


 2)CUDA 9.0下载

CUDA 9.0可在此链接下载:https://developer.nvidia.com/cuda-toolkit-archive,还需要下载对应的cuDNN:https://developer.nvidia.com/rdp/cudnn-download#a-collapse704-9 ,也可以通过我的百度云分享下载,见我的资源:点击打开链接 http://download.csdn.net/download/balixiaxuetian/10229488








你可能感兴趣的:(Caffe,深度学习)