【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)

Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装

  • 1 准备工作
    • 查看GPU信息和版本驱动
  • 2 下载NVIDIA驱动
    • (1)查看本机显卡驱动版本
    • (2)查看最新驱动版本
    • (3)下载驱动
    • (4)X service 问题的解决
    • (5)nouveau kernel driver 问题的解决
    • (6)CC version check failed 问题的解决
    • (6)无法登陆问题的解决
  • 2 安装CUDA
    • (1)检查电脑条件
    • (2)查看可安装CUDA版本
    • (3)CUDA 9.1安装
      • 1)下载安装包
      • 2)通过终端命令安装
      • 3)相应环境配置
      • 4)测试CUDA的Samples
      • 5)多个 cuda 版本切换
  • 3 安装cuDNN
    • (1)下载压缩包
    • (2)安装cuDNN
    • (3)查看cuDNN
    • (4)测试cuDNN

1 准备工作

安装paddlepaddle飞桨的GPU版本,需要安装显卡驱动、CUDA和cuDNN。
飞桨快速安装:https://www.paddlepaddle.org.cn/install/quick
Ubuntu下安装:https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/beginners_guide/install/install_Ubuntu.html
环境准备要求:
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第1张图片

查看GPU信息和版本驱动

查看GPU信息和版本驱动
Ubuntu发行版本以及内核版本

在Linux系统上查询

lspci | grep -i nvidia
04:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (rev a1)

在windows系统查询
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第2张图片
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第3张图片
现在的GPU为GeForce 820M,CUDA8.0,计算能力为2.1。

参考该链接也能找到CUDA以及Cudnn版本对应关系
https://blog.csdn.net/qq_27825451/article/details/89082978

2 下载NVIDIA驱动

(1)查看本机显卡驱动版本

 sudo dpkg --list | grep nvidia-*

我的系统没有安装过驱动,因此没有显示旧版本。

有需要可以按下面指令卸载旧驱动
若通过apt-get安装,卸载如下:

sudo apt-get remove --purge nvidia*

若通过run文件安装,*为原有文件名,cd到安装目录,卸载如下:

sudo chmod +x *.run
sudo ./*.run --uninstall

(2)查看最新驱动版本

去NVIDIA驱动 查找相应的驱动最新版本
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第4张图片【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第5张图片

(3)下载驱动

方法一:在官网下载.run文件

在安装目录下读取权限:

$ sudo chmod 775 NVIDIA-Linux-x86_64-430.40.run

执行

$ ./NVIDIA-Linux-x86_64-430.run

方法二:ppa源安装
终端输入

$ sudo add-apt-repository ppa:graphics-drivers/ppa  
$ sudo apt-get update  
$ sudo apt-get install nvidia-430
$ sudo apt-get install mesa-common-dev  
$ sudo apt-get install freeglut3-dev

但是我下载的时候
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第6张图片提示本机只能装390.xx的版本,于是去官网下了个低一点的版本390.138【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第7张图片

【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第8张图片

(4)X service 问题的解决

下载runfile后,同之前步骤,但是执行出现X service error。
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第9张图片1)按住CTRL+ALT+F1 进入命令行

2)

$ sudo service lightdm stop   

或者

$  sudo stop lightdm

3)

$ sudo init 3

4)安装驱动程序

在安装目录下读取权限:

$ sudo chmod 775 NVIDIA-Linux-x86_64-390.138.run

执行

$ ./NVIDIA-Linux-x86_64-390.138.run

5) 按照提示安装完成,重启

$ sudo  reboot

或者返回桌面

$ sudo service lightdm start

很不幸,我又出现pre-install scipt failed的错误。居然是nvidia的工程师开的玩笑。
Ubuntu 安装nvidia驱动一直遇到 pre-install scipt failed 错误

(5)nouveau kernel driver 问题的解决

需要禁用nouveau

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

在最后一行添加:

blacklist nouveau

之后,执行命令:

sudo update-initramfs -u

电脑重启之后继续执行安装

lsmod | grep nouveau  #没有输出,即说明安装成功

(6)CC version check failed 问题的解决

在Ubuntu上安装显卡驱动时报以下错误:

The CC version check failed:
The kernel was built with gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12), 
but the current compiler version is cc(Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4.

查了发现我的gcc装了4.9和5的版本,路径在/usr/bin/,是版本冲突的问题。

查询gcc版本

$ gcc -v

查询路径有无其他版本

$ ls /usr/bin/gcc*

进行版本切换设置

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50

接着输入:

$ sudo update-alternatives --config gcc

有三个选项,把自动模式设为gcc5了。

查询gcc版本,看看是否更改完成

$ gcc -v

(6)无法登陆问题的解决

安装完重启后出现循环登陆,无法进入ubuntu桌面的情况

1)ctrl+alt+f1,进入tty1

2)sudo service lightdm stop

3)卸载之前安装的驱动

$ sudo apt-get purge nvidia-*
$ nvidia-smi

如果没有显示驱动信息则卸载成功。依旧显示驱动信息,继续下一步。

$ sudo /usr/bin/nvidia-uninstall

检查是否成功

$ nvidia-smi

若找不到命令则成功安装

4)重新安装驱动
在run文件目录下

$ sudo ./ NVIDIA-Linux-x86_64-390.138.run --no-opengl-files

5)返回桌面

$ sudo service lightdm start

6)打开终端,检查是否安装成功

$ nvidia-smi

显示390.138版本已安装成功

$ cat /proc/driver/nvidia/version

显示:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  390.138  Thu May 14 01:01:53 PDT 2020
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 

2 安装CUDA

(1)检查电脑条件

检查电脑环境能否安装CUDA
1)查看GPU信息。操作如 1准备工作

2)检验Linux版本是否支持
终端输入

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

我的电脑参数如下:

x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

一般x86_64 Ubuntu 16.04的系统是可行的

3)验证gcc是否安装

$  gcc –-version

结果显示

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

若未安装则用一下命令

$ sudo apt-get  install  build-essential

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

终端输入

$  uname –r

结果显示

4.4.0-173-generic

若未安装,终端输入以下命令安装对应kernel header和 package development。已安装显示未升级的信息。

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

(2)查看可安装CUDA版本

官方的版本要求说明:

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第10张图片我的电脑为例,390.138版本的驱动,对应可以安装的最高版本为CUDA 9.1。

(3)CUDA 9.1安装

cuda安装可以采用package manager安装和runfile安装的方式。为提高成功概率,我选择复杂一点的run文件的安装方式。

1)下载安装包

CUDA的toolkit安装 https://developer.nvidia.com/cuda-toolkit-archive

选择9.1的版本后
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第11张图片下载base文件和补丁
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第12张图片

2)通过终端命令安装

将runfile转移到相应目录

在安装目录下读取权限:

$ sudo chmod 775 cuda_9.1.85_387.26_linux.run

执行

$ ./cuda_9.1.85_387.26_linux.run

安装过程
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第13张图片
一开始是NVIDIA的介绍文档,一直ENTER直到需要输入。(非常之长………… ctrl+d 可以快速阅读)
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第14张图片

同意条款accept,不同意安装驱动N,首次安装同意安装symbol软链接,非首次则不同意symbol软链接安装,其余Y

简单来说就是

ENTER

accept

n(不要安装driver)

y

ENTER

y

n (首次选y)

y

ENTER

同理,安装一下三个补丁

补丁1:

$ sudo chmod 775 cuda_9.1.85.1_linux.run
$ ./cuda_9.1.85.1_linux.run

【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第15张图片ENTER看完介绍文件,accept接受,ENTER同意安装目录

同理:
补丁2:

$ sudo chmod 775 cuda_9.1.85.2_linux.run
$ ./cuda_9.1.85.2_linux.run

补丁3:

$ sudo chmod 775 cuda_9.1.85.3_linux.run
$ ./cuda_9.1.85.3_linux.run

3)相应环境配置

先打开根目录的环境配置文件

$ sudo gedit .bashrc

在文件末端加上以下代码,对应自己的版本安装目录修改

export  PATH=/usr/local/cuda-9.1/bin:$PATH
export  LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64$LD_LIBRARY_PATH

使文件生效

$ source ~/.bashrc

以防万一,在/etc/文件的配置文件也添加代码

$ sudo gedit /etc/bash.bashrc

同样在文末添加两行代码

export  PATH=/usr/local/cuda-9.1/bin:$PATH
export  LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64$LD_LIBRARY_PATH

使文件生效

$ source /etc/bash.bashrc

检查

$ 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

4)测试CUDA的Samples

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

$ sudo make

$ ./deviceQuery

如果显示的是关于GPU的信息,则说明安装成功了。
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第16张图片

5)多个 cuda 版本切换

同理安装其他版本的cuda。
我自己安装的是另一个版本是9.0版本。
出现报错


***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work.

这样就已经安装好了。不用管报错。

同理安装补丁,如果出现不能写入的报错,则获得权限后root安装。

设置链接库。
环境配置更改,将所有cuda-9.1改为cuda

export PATH="$PATH:/usr/local/cuda/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64"  
export CUDA_HOME=/usr/local/cuda

使配置生效

$ source ~/.bashrc

从cuda9.1 切换到 cuda9.0
删除之前创建的软链接,创建新的软连接。
在root的环境下

$ rm -rf /usr/local/cuda 
$ sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda

查看当前 cuda 版本

$ nvcc --version 
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

nvcc可能默认是你以前deb安装时候其他版本的,nvcc –version结果还是没变。

找到nvcc位置,然后创建usr/local/cuda/nvcc软链接到原先nvcc位置,为usr/bin/nvcc

 $ which nvcc # 找到nvcc位置,假定在/usr/bin/nvcc且是以前版本
 /usr/local/cuda-9.1/bin/nvcc
 
 $ sudo ln -s /usr/local/cuda-9.1/bin/nvcc  /usr/bin/nvcc # 创建软链接到当前cuda的nvcc
 
 $ nvcc --version # 显示当前cuda版本
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

#cuda9.0 切换到 cuda9.1

$ rm -rf /usr/local/cuda
$ sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda
$ nvcc --version

对于~/.bashrc文件的修改方法和上面一致。

3 安装cuDNN

(1)下载压缩包

cuDNN是基于cuda的一个数据库,实际上不需要安装,将压缩包解压头文件/库文件等即可。

下载对应版本的cuDNN
https://developer.nvidia.com/cudnn

需要注册或登录NVIDIA账号

需要简单填一下问卷
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第17张图片

找到cuda相应cuDNN版本进行下载
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第18张图片

我这里是cuda9.1没有找到相应的版本,展开列表可见。
【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第19张图片【深度学习】【PaddlePaddle】Ubuntu16.04的NVIDIA显卡驱动、CUDA9和cuDNN安装(排雷躲坑必备)_第20张图片
找了半天才找到9.1相应的cuDNN版本,下载对应系统的压缩包。
(为了CUDA版本新一点,委屈一下用旧版本的cuDNN数据库吧)
(结果学习用的飞桨需要7.6以上的cuDNN,只好又装了cuda9.0,对应可选择7.6.5的cuDNN版本)

Runtime 和 Developer 版本的区别是:
developer library 包含了在Ubuntu系统上开发深度学习时所需的cuDNN头文件。如果不需要开发编译任何深度学习程序,只是用于运行某些深度学习应用,那么只下载“runtime library”。

我自己下载的是cuDNN v7.1.3 Library for Linux
cuDNN v7.1.3 Runtime Library for Ubuntu16.04 (Deb)
cuDNN v7.1.3 Developer Library for Ubuntu16.04 (Deb)
cuDNN v7.1.3 Code Samples and User Guide for Ubuntu16.04 (Deb)

(2)安装cuDNN

打开终端到下载文件目录

  1. 解压tgz文件Library,命令如下:
$ tar -xzvf cudnn-9.1-linux-x64-v7.1.tgz
  1. 解压deb文件Runtime Library,命令如下:
$ sudo dpkg -i libcudnn7_7.1.3.16-1+cuda9.1_amd64.deb
  1. 解压deb文件Developer Library,命令如下:
$ sudo dpkg -i libcudnn7-dev_7.1.3.16-1+cuda9.1_amd64.deb
  1. 解压deb文件Samples,命令如下:
$ sudo dpkg -i libcudnn7-doc_7.1.3.16-1+cuda9.1_amd64.deb
  1. 修改配置文件

在安装目录下cuda

cd cuda/
sudo cp include/cudnn.h /usr/local/cuda/include/   
sudo cp lib64/*  /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
 
 
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 
sudo ldconfig 

5)报错解决

我的电脑解压不了deb后缀文件,报错如下:

dpkg-deb: error: 'libcudnn7-dev_7.1.3.16-1+cuda9.1_amd64.deb' is not a debian format archive
dpkg: error processing archive libcudnn7-dev_7.1.3.16-1+cuda9.1_amd64.deb (--install):
 subprocess dpkg-deb --control returned error exit status 2
Errors were encountered while processing:
 libcudnn7-dev_7.1.3.16-1+cuda9.1_amd64.deb

原因是md5不对。
官方解答 https://forums.developer.nvidia.com/t/bad-checksum-for-cuda-8-0-for-ubuntu-14-04/47813
ubuntn论坛https://askubuntu.com/questions/896856/dpkg-deb-file-not-a-debian-format

解决办法就是重装一遍。

再运行解压

dpkg: error processing package libcudnn7-dev (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 libcudnn7-dev

报错原因是缺少依赖。
更新apt库后,安装依赖。

$ sudo apt update
$ sudo apt upgrade -f
$ sudo apt install libcudnn7 -f
$ sudo apt install libcudnn7-dev -f

若报错 依赖关系问题未被配置,则修复安装

$ sudo apt-get install -f

仍出现报错Errors were encountered while processing: libcudnn7-dev

$ cd /var/lib/dpkg
$ sudo mv info info.bak
$ sudo mkdir info
$ sudo apt-get install -f
$ sudo apt-get upgrade

还是报错的话。可能是 initramfs-tools包有问题,导致apt配置不成功。

用grep找到对应内容的位置

$ cd /var/lib/dpkg/
$ grep -n "initramfs-tools" status

编辑dpkg status 文件
找到包 initramfs-tools 那一段,删掉


$ sudo gedit /var/lib/dpkg/status 
Package: initramfs-tools
Status: install ok installed
Priority: optional
Section: utils
Installed-Size: 125
Maintainer: Ubuntu Developers 
Architecture: all
Multi-Arch: foreign
Version: 0.122ubuntu8.16
Provides: linux-initramfs-tool
Depends: initramfs-tools-core (= 0.122ubuntu8.16), linux-base
Suggests: bash-completion
Breaks: console-setup (<< 1.72), cryptsetup (<< 2:1.6.6-4~), elilo (<< 3.12-3.1~), initscripts (<< 2.88dsf-59.3~), isc-dhcp-client (= 4.3.3-5ubuntu13), lilo (<< 22.8-8.2~), lvm2 (<< 2.02.111-2.1~), mountall (<< 2.0~), nplan (<< 0.32~16.04.5), s390-tools (<< 1.8.3-2~), systemd-sysv (<< 186)
Conflicts: linux-initramfs-tool, usplash (<< 0.5.50)
Conffiles:
 /etc/initramfs-tools/update-initramfs.conf e2026d4603e7161efaccca519aeb1297
 /etc/kernel/postinst.d/initramfs-tools 1d77d3e4b57c3da299aacd44b1dc207c
 /etc/kernel/postrm.d/initramfs-tools f57d0b03f79fd46dd1a1fa3b00206070
Description: generic modular initramfs generator (automation)
 This package builds a bootable initramfs for Linux kernel packages.  The
 initramfs is loaded along with the kernel and is responsible for
 mounting the root filesystem and starting the main init system.
Original-Maintainer: Debian kernel team 

修改安装

$ sudo apt-get install -f

(最后发现是我忘记安装Runtime文件了,泪目)

(3)查看cuDNN

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

显示

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"

说明cuDNN已正确识别

(4)测试cuDNN

$ cp -r /usr/src/cudnn_samples_v7/ /home/chan    #用户名根目录
$ cd /home/chan/cudnn_samples_v7/mnistCUDNN
$ make clean && make
$ ./mnistCUDNN

成功显示 Test passed

实际上又报错了。。

Error: CUDNN_STATUS_ARCH_MISMATCH

官方解释:

https://docs.nvidia.com/deeplearning/cudnn/api/index.html

The function requires a feature absent from the current GPU device. Note that cuDNN only supports devices with compute capabilities greater than or equal to 3.0.

To correct, compile and run the application on a device with appropriate compute capability.

CUDNN要求GPU CUDA Capability 不小于3.0。我的电脑的计算能力只有2.1。

===================================
参考:
Ubuntu16.04安装Nvidia显卡驱动(cuda)
ubuntu 下安装NVIDIA显卡驱动出现X service error问题解决方法
安装显卡驱动时遇到The CC version check failed问题解决方法
NVIDIA驱动gcc不匹配 - 安装指定gcc版本(Linux/Ubuntu)

Ubuntu安装NVIDIA驱动后,无法登录,循环登录,登录界面进不去,回到登录界面

NVIDIA显卡驱动版本,CUDA版本,cudnn版本之间关系及如何选择

手把手教你在Linux上安装CUDA9.0

ubuntu安装多个版本的CUDA并随时切换

NVIDIA cuDNN deb安装失败经验及成功tar方法

你可能感兴趣的:(ubuntu,Linux,paddlepaddle)