ubuntu18.04 | NVIDIA driver + CUDA-10.2 + cuDNN-7.6.5 + Pytorch + TensorFlow-gpu-2.1.0 + OpenCV-4.2.

我怕爱的太早我们不能终老 提交于 2020-02-28 17:45:06

一. NVIDIA显卡驱动

参考: https://www.cnblogs.com/abelsu/p/10625616.html

1. 安装前准备

(1). 检查是否有卡

一般购入电脑时就能有所了解,并且带有该显卡的电脑,都会有NVIDIA的绿色标识贴在机身上,只需要进一步确认就可以:

$ lspci | grep -i nvidia

如果输出有带NVIDIA字符就可以了。

(2). 关闭Security Boot

重启电脑,在开机过程中连续敲击某个键进入BOIS设置,我的是F2,有的电脑是F6,F12等,不确定的可以根据电脑情况查一下。

选择Security Boot一栏,回车将Enable改为Disable。

2. 安装NVIDIA显卡驱动

(1). 禁用nouveau

可以先检查一下是否禁用,我的在安装系统时就一并禁用了:

$ lsmod | grep nouveau

没有输出则证明被禁用了。

如果有输出,则执行:

$ sudo gedit /etc/modprobe.d/blacklist.conf

在文末添加:blacklist nouveau,保存关闭后执行:

$ sudo update-initramfs -u

重启电脑再执行:

$ lsmod | grep nouveau
(2). 把显卡驱动加入PPA:

卸载系统里的低版本驱动:

$ sudo apt-get purge nvidia*
$ sudo add-apt-repository ppa: graphics-drivers
$ sudo apt-get update

(3). 查找本电脑中NVIDIA显卡驱动最新版本号:

$ sudo apt-cache search nvidia

(4). 查看Ubuntu推荐的驱动版本:

$ Ubuntu-drivers devices

我的推荐是nvidia-driver-440。

(5). 打开软件和更新,点击附加驱动,选择使用推荐版本的选项,进行应用更改。

(6). 重启电脑执行:

$ nvidia-smi

在这里插入图片描述
我的配置只能用CUDA-10.2的版本,而目前的pytorch只能下载10.1版本,这是一个比较麻烦的问题,可能导致pytorch安装失败。

二. CUDA-10.2

1. 下载CUDA Toolkit 10.2

(1). 查看gcc,Kernel Header和Development
$ gcc --version

没有则安装:

$ apt install gcc
$ uname -r

确保Kernel Header与正在运行的Kernel相互匹配:

$ sudo apt-get install linux-headers-$(uname -r)
(2). 下载和安装CUDA

打开NVIDIA官网(https://developer.nvidia.com/cuda-downloads),在标有Select Target Platform的绿色表格内根据自己的配置情况进行选择,如我选的是:

Operating System:Linux
Architecture:x86_64
Distribution:Ubuntu
Version:18.04
Installer Type:deb(local)

一般来说下载方式选runfile(local)更容易成功,但deb比较稳妥。

选择结束之后下方的Download Installer for Linux Ubuntu 18.04 x86_64绿色表格中会出现名为Base Installer的嵌入式表格,复制其中给出的Installation Instructions到terminal进行安装即可。
文件大小约2.46G,最好保存到没有中文的目录下,以免出现之后乱码或其他问题。

(3). 查看文件是否下载完整

下载完成后点击嵌入式表格下方的Installer Checksums,查看校验码。在teiminal输入:$ md5sum ccuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb,得到下载之后的校验码。
对比二者无异则证明下载完整。

(4). 添加环境变量

打开cuda-10.2所在位置:

$ cd /usr/local/cuda-10.2/bin

找到nvcc,在terminal打开,输入:

$ vi ~/.bashrc

按a由只读改为插入,添加环境变量:

export PATH=”/usr/local/cuda-10.2/bin:$PATH”

输入命令验证是否配置好:

$ source ~/.bashrc
$ echo $PATH

(5). 测试是否安装成功

在终端输入:

$ cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery
$ sudo make
$ ./deviceQuery

在这里插入图片描述
显示结果如图则证明安装成功。

三. cuDNN

参考:https://blog.csdn.net/u010801439/article/details/80483036

1. 下载和安装cuDNN

打开NVIDIA官网(https://developer.nvidia.com/cudnn),选择download cuDNN,这里需要登录才能进行下载,所以选择Login,没有账号则创建账号,有则直接登录。

选择for CUDA 10.2的cuDNN版本,选择其中的cuDNN Library for Linux下载,这个文件是基础文件。
下载完成后在文件所在目录下打开终端,执行:

$ tar zxvf cudnn-10.2-linux-x64-v7.6.5.32.tgz # 解压
$ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64/
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-10.2/include/
$ sudo chmod a+r /usr/local/cuda-10.2/include/cudnn.h
$ sudo chmod a+r /usr/local/cuda-10.2/lib64/libcudnn* # 为所有用户设置读取权限
$ cd /usr/local/cuda/lib64/
$ sudo rm -rf libcudnn.so libcudnn.so.7
$ sudo ln -s libcudnn.so.7.6.5 libcudnn.so.7 libcudnn.so # 不够写的话分成三次建立
$ sudo ldconfig

安装libcupti:

$ sudo apt-get install libcupti-dev

在同样网站下载三个补丁文件:
cuDNN Runtime Library for Ubuntu 18.04(Deb)
cuDNN Developer Library for Ubuntu 18.04(Deb)
cuDNN Code Samples and User Guide for Ubuntu 18.04(Deb)

并安装:

$ sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.2_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.6.5.32-1+cuda10.2_amd64.deb

2. 验证是否安装成功

在terminal输入:

$ cp -r usr/scr/cudnn_samples_v7/ home/用户名/cuDNN/ 

因为我在home建立了cuDNN的文件夹,就把它移动过来,进入目录:

$ cd /home/用户名/cuDNN/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

出现如下图证明安装成功:

在这里插入图片描述

四. Pytorch

Pytorch目前来看支持CUDA-10.1,cuDNN-7.6.3,但我的系统只支持CUDA-10.2,与cuDNN-7.6.5相匹配,只能安装CUDA-10.1的对应版本,凑合凑合也能用。

1. 下载pytorch

同CUDA一样,进入Pytorch官网依次选择安装指引即可下载,我的安装选择如下:

Pytorch Build:Stable(1.4)
Your OS:Linux
Package:Conda
Language:Python
CUDA:10.1

复制Run this Command至terminal即可下载,如果conda不行可以选择pip,不过两个都实在太慢,剩余时间是4-8天不等,于是切换到清华镜像(https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64)选择离线下载安装,根据电脑目前的配置选择pytorch和torchvision的两个文件:

a. pytorch-1.4.0-py3.7_cuda10.1.243_cudnn7.6.3_0.tar.bz2
b. torchvision-0.5.0-py37_cu101.tar.bz2

2. 安装

在浏览器下载成功后conda离线安装,速度非常快,一个文件大概十几秒:

$ conda install --offline pytorch-1.4.0-py3.7_cuda10.1.243_cudnn7.6.3_0.tar.bz2
$ conda install --offline torchvision-0.5.0-py37_cu101.tar.bz2

离线成功后再利用conda在线安装一次,注意:在Pytorch官网指令的基础上删掉“-c pytorch”,这一指令代表直接从官网下载,无法与本地安装好的部分相匹配,所以改成:

$ conda install pytorch torchvision cudatoolkit=10.1

开始下载,我因为网络的问题执行了两次才成功,不过总体只花费几分钟,还算高效。在terminal输入Python进入。注意如果anaconda环境变量没有添加成功,这里会返回Ubuntu系统自带的Python2.7,可以先输入Python3,这样可以直接跳转Python3.7,但是为了防止以后安装Python库的问题,还是尽快将anaconda的环境变量添加好。

代码:

$ python3
>>>import torch
>>>torch.cuda.is_available()
True

在这里插入图片描述
安装成功。

五. Tensorflow-gpu

参考:https://blog.csdn.net/MacwinWin/article/details/104108744#ssh_106

1. 安装前准备

升级一下pip3:

$ sudo apt-get install python3-pip

检查pip版本:

$ pip3 --version

目前已经是最新版。

用conda升级所有包:

$ conda update --all

不升级无妨,提前准备多一点,能让下一步运行更顺利一些。

2. 下载.whl文件

从Tensorflow的官网直下($ pip3 install tensorflow-gpu)网速过慢导致多次下载失败,也改用国内镜像源。

这次用的是阿里云的镜像,网址:http://mirrors.aliyun.com/pypi/simple/tensorflow-gpu/,直接下载tensorflow_gpu-2.1.0-cp37-cp37m-manylinux2010_x86_64.whl到home,然后运行:

$ pip install tensorflow_gpu-2.1.0-cp37-cp37m-manylinux2010_x86_64.whl

这样来说成功几率比较高,但是仍然可能中途出现卡顿、下载失败,可以将失败处的库找出来pip3 install+库的名称单独安装,然后重试安装Tensorflow。

同Pytorch一样,安装结束后进入Python:

$ python
>>>import tensorflow as tf # 此时会出现一些信息,是正常情况
>>>tf.__version__
‘2.1.0

在这里插入图片描述

六. OpenCV-4.2.0

1. 安装前准备

参考:
https://blog.csdn.net/new_delete_/article/details/84797041#31_pkgconfig_86
https://blog.csdn.net/MacwinWin/article/details/104108744#ssh_106

(1). 安装依赖:cmake,依赖库和Python支持

安装cmake:

在cmake网站下载安装包(https://cmake.org/download/):

$ tar --zxvf cmake-3.16.4.tar.gz
$ cd cmake-3.16.4
$ sudo apt-get install libcurl4-gnutls-dev # 安装openssl依赖
$ ./bootstrap --system-curl
$ ./configure
$ sudo make install
$ cmake --version
3.16.4

安装依赖:

$ sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev

安装Python3支持:

$ sudo apt install python3-dev python3-numpy

安装streamer支持:

$ sudo apt install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

安装可选的依赖:

$ sudo apt install libpng-dev libopenexr-dev libtiff-dev libwebp-dev
(2). 下载源文件

OpenCV(https://opencv.org/releases/)下载所需版本,有Source和GitHub两种方式,由于源的问题容易下载失败(失败时选择重试,之前下载的部分并不会被抹去)且耗时较长,可以尝试找一下GitHub资源,包括opencv(https://github.com/opencv/opencv/releases/tag/4.2.0)和opencv_contrib(https://github.com/opencv/opencv_contrib/releases/tag/4.2.0),下载好后将后者放进前者的文件夹下。

代码:

$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

如果下载太慢导致失败报错为:

error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败

有三种方法解决:

a. 加大缓存区:$ git config --global http.postBuffer xxx(改为缓存大小,524288000约有500M);

b. 缩小clone深度:$ git clone https://github.com/opencv/opencv.git --depth 1,depth 1指的是每个文件只取最近一次提交,而非所有历史版本,然后更新远程库到本地git fetch --unshallow

c. 更换协议:$ git clone git://github.com/opencv/opencv.git。

我试了一下都没用,直接打开https://github.com/opencv/opencv.git和https://github.com/opencv/opencv_contrib.git选择Clone or download下载到本地,下载好后将opencv_contrib放到opencv文件夹下。

OpenCV-4.2和OpenCV_contrib的压缩包网盘链接如下:
链接: https://pan.baidu.com/s/1rOz_lDZ4ZDGygi0TCGclUw 密码: pmwl

(3). 安装OpenCV

①. cmake
如果实在不清楚cmake命令,可以使用cmake-gui来进行选择:
在这里插入图片描述
A. C++接口

$ cd ~/opencv # opencv是自己取的文件夹名字,~是文件夹所在位置,不同用户各有不同
$ mkdir build 
$ cd build/
$ cmake \
> -D CMAKE_BUILD_TYPE=RELEASE \
> -D CMAKE_INSTALL_PREFIX=/usr/local \
> -D INSTALL_C_EXAMPLES=ON \
> -D INSTALL_PYTHON_EXAMPLES=ON \
> -D BUILD_EXAMPLES=ON \
> -D OPENCV_GENERATE_PKGCONFIG=ON \
> -D WITH_TBB=ON \ 
> -D WITH_V4L=ON \
> -D WITH_OPENGL=ON \
> -D WITH_CUDA=ON \
> -D ENABLE_FAST_MATH=1 \
> -D CUDA_FAST_MATH=1 \
> -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
> -D WITH_CUBLAS=1 \
> -D OPENCV_EXTRA_MODULES_PATH=/home/jp/下载/opencv/opencv/opencv_contrib/modules ..

cmake过程中有两个包总下载失败:ippicv_2019_lnx_intel64_general_20180723.tgz(名字看报错下载失败的名字,之后安装的不一定是这个名字)和face_landmark_model.dat,最后在网页找到下载地址,ippicv网盘下载了,face_landmark_model.dat找同学帮忙下载的,代理服务器能用就用,不能用尽快另寻途径求助,否则一直下载失败。

ippicv网盘链接如下:
链接: https://pan.baidu.com/s/16FV_tFXi6trH79U-2oIyYg 密码: oc9j

face_landmark_model.dat网盘链接如下:
链接: https://pan.baidu.com/s/1BV2ONMrLrgcj2p0FMzdgug 密码: m44t

下载好后放在自己认为合理的位置,然后在~/opencv/3rdparty/ippicv路径下找到ippicv.make文件,修改一下第47行的

“https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/

改为:

“file: (ippicv_2019_lnx_intel64_general_20180723.tgz的保存路径)

同理打开~/opencv/opencv_contrib-master/modules/face打开CMakeList.txt,修改一下第19行的

“https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/

改为:

“file: (face_landmark_model.dat的保存路径)

重新执行cmake …的命令,发现在/usr/lib/include/x86_64-linux-gnu文件夹内缺失一个名为libvtkRenderingPythonTkWidgets.so的文件,在整个计算机目录下搜索找到其所在位置,在那个位置sudo mv libvtkRenderingPythonTkWidgets.x86_64-linux-gnu.so /usr/lib/include/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so。

再次cmake即可成功。这个方法一般会默认接口在Ubuntu自带的Python2.7上。

cmake过程非常繁琐,运行结果冗长,并且不一定报的错误和此处指出的一样,只能逐行找error所在,然后逐个解决,如果配置都无误则一次就可以通过,一路顺利。即使报错也不要太担心,CSDN都有详细的帖子,耐心操作一下就可以了。

B. Python3接口

Python接口直接用:

$ pip3 install opencv-python

就可以了,如果要手动编译,cmake内容如下:

$ mkdir build 
$ cd build/
$ cmake \
> -D CMAKE_BUILD_TYPE=RELEASE \
> -D INSTALL_C_EXAMPLES=OFF 
> -D WITH_CUDA=ON 
> -D WITH_CUBLAS=ON 
> -D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" 
> -D CUDA_ARCH_PTX="" 
> -D CUDA_FAST_MATH=ON 
> -D CUDA_ARCH_BIN="5.2" 
> -D WITH_TBB=ON 
> -D WITH_OPENMP=ON 
> -D BUILD_NEW_PYTHON_SUPPORT=ON 
> -D BUILD_TESTS=OFF 
> -D WITH_V4L=ON 
> -D PYTHON3_EXECUTABLE="/home/jp/anaconda3/bin/python3.7" 
> -D PYTHON3_INCLUDE_DIR="/home/jp/anaconda3/include/python3.7m" 
> -D PYTHON3_LIBRARIES="/home/jp/anaconda3/lib/libpython3.7m.so" 
> -D PYTHON3_PACKAGES_PATH="/home/jp/anaconda3/lib/python3.7/site-packages" 
> -D PYTHON3_NUMPY_INCLUDE_PATH="/home/jp/anaconda3/lib/python3.7/site-packages/numpy/core/numpy"
> -D OPENCV_EXTRA_MODULES_PATH=/home/jp/下载/opencv/opencv/opencv_contrib/modules .. 

因为我要搭建Python3的接口,所以注意Python3的各项配置是否已经改到anaconda3下。
在这里插入图片描述
显示如图,即可进行下一步。

②. make

参考:https://blog.csdn.net/qq_33475105/article/details/82819850

查看电脑几线程:

$ grep 'processor' /proc/cpuinfo | sort -u | wc -l

我的是8线程,运行命令:

$ make -j8

A. C++接口

错误一:

出错位置在~/opencv/opencv_contrib-master/modules/cudalegacy/scr/graphcuts.cpp文件中,报错:Makefile:162: recipe for target ‘all’ failed,修改graphcuts.cpp第46行的|| (CUDART_VERSION >= 8000)为|| (CUDART_VERSION >= 10000)。这个报错的原因是目前OpenCV设定的版本是CUDA8.0,与CUDA10.0以上版本不兼容。

错误二:

/modules/xfeatures2d/src/boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: 没有那个文件或目录 #include “boostdesc_bgm.i”

打开https://github.com/opencv/opencv_3rdparty/branches/stale?page=1

下载: “contrib_xfeatures2d_vgg_20160317” and "contrib_xfeatures2d_boostdesc_20161012"两个文件并将解压后的文件中的所有.i文件复制至/opencv_contrib-master/modules/xfeatures2d/scr/目录下。

错误三:

/modules/xfeatures2d/test/test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
#include “features2d/test/test_detectors_regression.impl.hpp”。

/opencv/modules/features2d/test/中将test_detectors_regression.impl.hpp和test_descriptors_regression.impl.hpp两个文件复制到/opencv/opencv_contrib-master/xfeatures2d/test/下,然后修改头文件test_features2d.cpp第51-52行如下所示。

修改前:

#include “features2d/test/test_detectors_regression.impl.hpp”
#include “features2d/test/test_descriptors_regression.impl.hpp”

修改后:

#include “test_detectors_regression.impl.hpp”
#include “test_descriptors_regression.impl.hpp”

如果报错没有test_detectors_invariance.impl.hpp同理从/opencv/modules/features2d/test/中复制到/opencv/opencv_contrib-master/xfeatures2d/test/里,在头文件test_rotation_and_scale_invariance.cpp中进行类似修改,去掉文件名前的路径即可。缺乏不同文件需要修改的头文件不同,需要自己找,比如test_invariance_utils.hpp就不用修改头文件,复制到位即可。

这次没有报错了,后面继续编译到约97%会有点卡,稍等一下就能编译完,如图:在这里插入图片描述
B. Python3接口

Python3接口报的错只有上述错误二,操作方式相同。

③. $ sudo make install

④. 测试

参考:
https://www.cnblogs.com/qiaozhoulin/p/4978055.html
https://blog.csdn.net/PecoHe/article/details/97476135

添加库路径:

$ sudo gedit /etc/ld.so.conf.d/opencv.conf

可能是个空文件,在其中输入:/usr/local/lib,保存并退出。

添加环境变量一:

$ sudo gedit /etc/profile

在文本末尾输入:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

更新环境变量一:

$ source /etc/profile

添加环境变量二:

$ sudo gedit /etc/bash.bashrc

在文本末尾输入:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

更新环境变量二:

$ source /etc/bash.bashrc

更新系统库缓存:

sudo ldconfig

查看OpenCv4是否安装成功:

$ pkg-config --cflags opencv
$ pkg-config --libs opencv

没有报错就说明成功,这里是在检索一个名为opencv.pc的文件,也有可能名为opencv4.pc,如果第一次报错没有找到opencv,尝试把命令改为:

$ pkg-config --cflags opencv4
$ pkg-config --libs opencv4

或者在/usr/local/pkgconfig下找到opencv4.pc,更名为opencv.pc。
Python3安装结果如下:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!