nvidia

显卡驱动、cuda与cudnn之间的区别

cuda是NVIDIA推出的自家GPU的并行计算框架。
注意事项:NVIDIA的显卡驱动器与CUDA并不是一一对应的哦,CUDA本质上只是一个工具包而已,所以我可以在同一个设备上安装很多个不同版本的CUDA工具包,比如我的电脑上同事安装了 CUDA 9.0、CUDA 9.2、CUDA 10.0三个版本。一般情况下,我只需要安装最新版本的显卡驱动,然后根据自己的选择选择不同CUDA工具包就可以了,但是由于使用离线的CUDA总是会捆绑CUDA和驱动程序,所以在使用多个CUDA的时候就不要选择离线安装的CUDA了,否则每次都会安装不同的显卡驱动,这不太好,我们直接安装一个最新版的显卡驱动,然后在线安装不同版本的CUDA即可。
总结:CUDA和显卡驱动是没有一一对应的。
cuDNN是一个SDK,是一个专门用于神经网络的加速包,注意,它跟我们的CUDA没有一一对应的关系,即每一个版本的CUDA可能有好几个版本的cuDNN与之对应,但一般有一个最新版本的cuDNN版本与CUDA对应更好。
总结:cuDNN与CUDA没有一一对应的关系

驱动安装

windows

ubuntu

查看显卡型号

nvidia-smi
当确定为 Nvidia 的显卡时,此时可以通过 nvidia-smi 命令来查看GPU的使用情况。
直接运行 nvidia-smi

user@user-PC:~$ nvidia-smi
Tue May 25 09:20:12 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 465.19.01    Driver Version: 465.19.01    CUDA Version: 11.3     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:00:02.0  On |                  N/A |
| 30%   32C    P8     8W / 250W |    244MiB /  7979MiB |      5%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       961      G   /usr/lib/xorg/Xorg                210MiB |
|    0   N/A  N/A      2308      G   compiz                             18MiB |
|    0   N/A  N/A      2776      G   ...nlogin/bin/sunloginclient        9MiB |
|    0   N/A  N/A     18689      G   unity-control-center                2MiB |
+-----------------------------------------------------------------------------+

可以通过 nvidia-smi -L 直接枚举设备上装载的NVIDIA显卡

GPU 0: NVIDIA GeForce RTX 2080 SUPER (UUID: GPU-0f79590e-4937-c4c4-83a7-d1e22eaf418e)

nvidia的驱动安装首先禁用 nouveau(第三方驱动)

// 禁用 nouveau
sudo vim /etc/modprobe.d/blacklist.conf
//在 blacklist 中添加
blacklist nouveau
//完成后执行
sudo update-initramfs -u
// 重启
// 重启后进入终端确认是已禁用 nouveau
lsmod | grep nouevau
// 没有任何提示则说明已禁用
// 如果通过其他方式安装过驱动则先卸载
sudo apt-get purge --remove nvidia*

// 安装驱动 建议使用 run 文件进行安装
// 首先禁用桌面图形服务
sudo service lightdm stop
sudo ./NVIDIA-Linux-x86_64-xxx.xx.run -no-x-check -no-nouveau-check -no-opengl-files
// 其中 -no-x-check 安装驱动时关闭X服务
// 其中 -no-nouveau-check 安装驱动时禁用 nouveau
// 其中 -no-opengl-files 只安装驱动,不安装 opengl 等文件
// 实际操作中,这几个参数报错
// 安装结束后开启桌面图形服务
sudo service lightdm start
// 通过 nvidia-smi 查看 gpu 信息

若要卸载驱动,执行

sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --uninstall

cuda 安装与卸载

windows 安装 cuda

ubuntu 安装 cuda

必须在 NVIDIA 显卡驱动安装完成之后才能安装 cuda
建议通过 run 文件安装 cuda
使用 deb 安装时,最后莫名其妙安装了最新版本的cuda,而不是指定版本的cuda
如果安装失败,可以尝试在禁用图形服务时进行安装。

通过 nvcc -V 查看 cuda 版本

(whh-yolov8) jk506@jk506-IdeaCentre-GeekPro-17IRB:~/Desktop/wuhanghai/git/github/ultralytics$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_Sep_13_19:13:29_PDT_2021
Cuda compilation tools, release 11.5, V11.5.50
Build cuda_11.5.r11.5/compiler.30411180_0

通过 nvidia-smi -l 查看的cuda版本是当前驱动支持的最高cuda版本

(whh-yolov8) jk506@jk506-IdeaCentre-GeekPro-17IRB:~/Desktop/wuhanghai/git/github/ultralytics$ nvidia-smi -l
Wed Dec  6 16:35:51 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.98                 Driver Version: 535.98       CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3060        Off | 00000000:01:00.0 Off |                  N/A |
| 31%   33C    P8              11W / 170W |   4821MiB / 12288MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      1316      G   /usr/lib/xorg/Xorg                           61MiB |
|    0   N/A  N/A      1554      G   /usr/bin/gnome-shell                          9MiB |
|    0   N/A  N/A     25646      G   ...4937702,13734300358402629662,262144       25MiB |
|    0   N/A  N/A    802718      C   tritonserver                               4712MiB |
+---------------------------------------------------------------------------------------+

ubuntu 卸载 cuda

注意把下边的xx.x替换为自己的cuda版本。
cuda10.0及以下的卸载:

cd /usr/local/cuda-xx.x/bin/
sudo ./uninstall_cuda_xx.x.pl
sudo rm -rf /usr/local/cuda-xx.x

cuda10.1及以上的卸载:

cd /usr/local/cuda-xx.x/bin/
sudo ./cuda-uninstaller
sudo rm -rf /usr/local/cuda-xx.x

最后边加了一句sudo rm -rf /usr/local/cuda-xx.x,这是因为一般情况下cuda都配置了cudnn,在运行卸载程序时只会卸载cuda而不会一并删除cudnn的文件。因为cudnn文件还在的缘故,自己的cuda-xx.x文件夹仍然在,需要手动删除。
所以如果自己要卸载的cuda没有配置cudnn,那么cuda-xx.x文件夹在卸载完成后会被自动删除,也就没必要再运行最后一句了。

cuDNN 安装与卸载

ubuntu 安装 cuDNN

下载 cuDNN 的安装文件,解压后安装

cuDNN Library for Linux[x86_64]

sudo cp cuda/include/cudnn*.h /usr/local/cuda/include 
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

查看 cuDNN 版本

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

(1)将cuda/include/cudnn.h文件复制到usr/local/cuda/include文件夹,将cuda/lib64/下所有文件复制到/usr/local/cuda/lib64文件夹中,并添加读取权限:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

–然后更改权限

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

接下来安装Deb包, cuDNN Runtime Library for Ubuntu18.04(Deb),cuDNN Developer Library for Ubuntu18.04(Deb),cuDNN Code Samples and User Guide for Ubuntu18.04(Deb)

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.0_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.0_amd64.deb

测试是否安装成功,分别输入以下四个命令:

cp -r /usr/src/cudnn_samples_v8/ ~ 
cd ~/cudnn_samples_v8/mnistCUDNN/ 
make clean && make 
./mnistCUDNN

ubuntu 卸载 cuDNN

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

sudo rm -rf /usr/include/cudnn.h
sudo rm -rf /usr/lib/x86_64-linux-gnu/libcudnn*

TensorRT安装

在安装好 cuda 以及 cudnn 后,可以进行 TensorRT 安装

#解压
tar xzvf TensorRT-${version}.${os}.${arch}-gnu.${cuda}.${cudnn}.tar.gz

设置环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>

cudnn 版本切换