0%

Ubuntu系统安装显卡驱动、CUDA、cuDNN

本文主要参考该文章

1 安装显卡驱动

1.1 前期准备

根据显卡型号在Nvidia 官网下载相应的驱动程序,然后安装必备软件:

1
2
3
4
5
6
## 更新源
sudo apt-get update
## 安装必备软件
sudo apt-get install g++
sudo apt-get install gcc
sudo apt-get install make

1.2 禁用默认驱动

在安装NVIDIA驱动前需要禁止系统自带的显卡驱动 nouveau:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 编辑blacklist.conf 文件
sudo vi /etc/modprobe.d/blacklist.conf

# 在文件末尾添加以下内容并保存
blacklist nouveau
options nouveau modeset=0

# 更新initramfs,然后重启电脑
sudo update-initramfs -u
sudo reboot now

# 检查是否关闭nouveau,若没有输出,则说明已成功关闭
lsmod | grep nouveau

1.3 安装驱动

进入tty 模式,并关闭图形进程:

1
sudo service gdm3 stop

开始安装驱动:

1
2
3
4
5
6
7
8
## 赋予执行权限
sudo chmod 777 NVIDIA-Linux-x86_64-535.54.03.run
## 安装:不安装OpenGL,安装时关闭X服务
sudo ./NVIDIA-Linux-x86_64-535.54.03.run –no-opengl-files -no-x-check
## Install Nvidia's 32-bit compatibility libraries?
## 选择 "No"
## Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver dill be used dhen you restart X? Any pre-existing X configuration file will be backed up.
## 选择 "Yes"

成功安装之后,会进入图形界面,此时使用命令nvidia-smi 检查驱动是否安装成功,若出现下图界面,证明驱动安装成功。

nvidia-smi

1.4 显卡驱动失效问题记录

一次重启电脑后,发现Ubuntu提示某个文件发生错误,是否需要反馈给Ubuntu,本人当时没在意点了“否”,在后续操作过程中发现nvidia-smi命令报错,显示找不到显卡驱动:

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

但使用nvcc -V 命令可以正常显示CUDA 版本。由于之前也遇到过类似驱动失效的问题,所以选择重装显卡驱动,按照之前的步骤检查nouveau、关闭图形界面、安装驱动……然后就一路报错了……

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.

网上找解决方案,这篇文章提到一个解决方案,使用dkms:

1
2
3
4
5
6
7
8
9
10
11
## 首先,查看显卡驱动版本
ls /usr/src | grep nvidia
nvidia-535.146.02


## 然后,安装dkms,并修复显卡驱动
sudo apt-get install dkms
sudo dkms install -m nvidia -v 535.146.02


## 输入nvidia-smi命令,一切恢复正常

然后搜了一下dkms的作用,wikipedia 中介绍如下:

动态内核模块支持 (Dynamic Kernel Module Support,DKMS)是用来生成Linux的内核模块的一个框架,其源代码一般不在Linux内核源代码树。 当新的内核安装时,DKMS 支持的内核设备驱动程序 到时会自动重建。 DKMS 可以用在两个方向:如果一个新的内核版本安装,自动编译所有的模块,或安装新的模块(驱动程序)在现有的系统版本上,而不需要任何的手动编译或预编译软件包需要。例如,这使得新的显卡可以使用在旧的Linux系统上。

唔……很奇怪,我应该没有更新Ubuntu的内核,不晓得为什么会出现这个情况,先记录一下吧,当前本人的Ubuntu内核版本为:

Linux echo-dell 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

2 安装CUDA

2.1 下载与安装

可同时安装不同的CUDA 版本,根据不同环境需求选择使用不同版本,本处以CUDA-11.8为例进行安装说明。

NVIDIA官网下载对应版本,推荐使用runfile (local) 进行安装:

cuda

根据官网给出的下载和安装命令执行即可:

1
2
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

2.2 环境变量配置

安装完成后,打开账户的配置文件,进行以下修改:

1
2
3
4
5
6
7
8
9
10
## CUDA ENV
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

# 更新配置文件设置
source ~/.zshrc

# 验证安装是否成功
nvcc -V

若出现下图界面,则证明CUDA 安装成功:

cuda

2.3 多版本切换

CUDA 安装位置的文件如下图所示:

cuda-version

根据所需版本,切换cuda 的软链接即可:

1
sudo ln -snf /usr/local/cuda-11.8 /usr/local/cuda

3 安装cuDNN

注:此处可参考NVIDIA官网教程进行安装。

3.1 前期准备与下载

首先安装依赖包:

1
sudo apt-get install zlib1g

然后在NVIDIA官网下载相应版本的安装包,注意,下载cuDNN 需要注册NVIDIA账号。选取合适的版本进行下载:

cudnn

3.2 安装

解压并安装:

1
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.3.28_1.0-1_amd64.deb

按照提示导入CUDA GPG key:

1
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.3.28/cudnn-local-*-keyring.gpg /usr/share/keyrings/

更新源并安装:

1
2
3
4
5
6
7
8
9
10
11
sudo apt-get update

## 1. Install the runtime library.
## sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn8=8.9.3.28-1+cuda11.8
## 2. Install the developer library.
## sudo apt-get install libcudnn8-dev=8.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn8-dev=8.9.3.28-1+cuda11.8
## 3. Install the code samples.
## sudo apt-get install libcudnn8-samples=8.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn8-samples=8.9.3.28-1+cuda11.8

3.3 测试

输入检查命令,出现下图证明安装初步成功。

1
sudo dpkg -l | grep cudnn

cudnn-version

按照官网教程,进行代码测试:

1
2
3
4
5
6
# 将cuDNN samples 拷贝至主目录
cp -r /usr/src/cudnn_samples_v8/ $HOME

# 进入samples 文件夹,并编译
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make

此时可能出现如下报错:

1
2
fatal error: FreeImage.h: No such file or directory
1 | #include "FreeImage.h"

cudnn-error

可安装相应包进行解决:

1
sudo apt-get install libfreeimage3 libfreeimage-dev

安装之后重新编译,并运行生成文件:

1
2
3
4
5
# 重新编译
make clean && make

# 运行生成文件
./mnistCUDNN

若出现如下结果,则证明cuDNN 安装成功:

cudnn-success