FunnyWii
FunnyWii
Published on 2024-07-26 / 349 Visits
0
0

Ubuntu显卡驱动以及CUDA、cuDNN、TensorRT的安装

安装显卡驱动

  1. 首先更新设备信息,不然可能会识别不出来
sudo update-pciids
  1. 更新后,将会显示你的显卡型号。信息的末尾的 rev a1,表示独显运行。
lspci | grep -i nvidia

funnywii@4060Ti:~$ lspci | grep -i nvidia
02:00.0 VGA compatible controller: NVIDIA Corporation AD106 [GeForce RTX 4060 Ti] (rev a1)
02:00.1 Audio device: NVIDIA Corporation Device 22bd (rev a1)
  1. 接下来查看一下可用驱动信息
ubuntu-drivers devices
  1. 更新软件列表并安装必要依赖
sudo apt-get update  
    sudo apt-get install g++  
    sudo apt-get install gcc  
    sudo apt-get install make
  1. 禁用nouveau(nouveau是通用的驱动程序)
sudo gedit /etc/modprobe.d/blacklist.conf

在文件末尾加入

blacklist nouveau
options nouveau modeset=0

更新变更并重启

sudo update-initramfs -u

重启后输入下面命令,没有任何输出表示禁用成功

lsmod | grep nouveau
  1. 开始安装驱动
    ~~目前安装驱动有3种方式,GUI安装;.run文件安装;命令行安装,其实这几种方法都差不多的...恶心人。
    打开Software&Update的Additional Drivers,可以看到Nvidia Drivers列表,正常来说,是按照 ubuntu-drivers devices得到的recommaned版本安装,比如我的推荐版本是530-proprietary tested,不过我用尽三种方法,安装了N次也没有成功,最后安装了530-proprietary却成功了...如果安装建议版本不成功,建议换个其他版本的安装。

NvidiaDriverInstall.png

2023.11

今天发现了 CUDA 的 deb安装的一个问题。他会自动安装 NVIDIA 显卡驱动,如果你要使用 CUDA 的话,先安装驱动是没有必要的,直接使用 deb安装 CUDA 即可。

因此也要额外注意一点,如果你先安装了 NVIDIA 驱动,之后再考虑安装 CUDA 的话,建议使用 runfile方式安装 CUDA,这个是不会自动安装驱动的。比如我,在先安装了 NVIDIA 的535驱动后又用 deb安装了 CUDA 12.0,然后就发现 nvidia-smi不能用了。因为 CUDA 12.0 会再安装一个 525 的显卡驱动。

  1. 安装完成后,重启并并输入 nvidia-smi
    输出如下结果,安装成功,这里也能看到CUDA version为12.2,这是该版本的driver能运行的最高版本CUDA。
funnywii@4060Ti:~$ nvidia-smi
Thu Nov 16 16:42:32 2023     
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.147.05   Driver Version: 525.147.05   CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| 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:02:00.0  On |                  N/A |
|  0%   46C    P8     9W / 160W |    401MiB /  8188MiB |      2%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                             
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1180      G   /usr/lib/xorg/Xorg                 35MiB |
|    0   N/A  N/A      1701      G   /usr/lib/xorg/Xorg                 90MiB |
|    0   N/A  N/A      1835      G   /usr/bin/gnome-shell               81MiB |
|    0   N/A  N/A      2204      G   /usr/lib/firefox/firefox          182MiB |
+-----------------------------------------------------------------------------+

安装CUDA 12.0

接下来安装CUDA。目前本机 gcc 和 g++ 版本为9.4.0,不过我这个版本的driver和CUDA12.0似乎并不存在网上所说的gcc和g++版本过高不兼容的问题,因此忽略。若安装不成功,可以考虑网络上为gcc降级并切换版本的方法。具体CUDA version和支持GCC version见下表:

CUDA version max supported GCC version
12 12.1
11.4.1+, 11.5, 11.6, 11.7, 11.8 11
11.1, 11.2, 11.3, 11.4.0 10
11 9
10.1, 10.2 8
9.2, 10.0 7
9.0, 9.1 6
8 5.3
7 4.9
5.5, 6 4.8
4.2, 5 4.6
4.1 4.5
4.0 4.4
-- long

CUDA下载地址 CUDA Toolkit Archive | NVIDIA Developer

CUDA12.png

三种安装方式,我选 deb(local),

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

安装完成后还需要配置 CUDA 的环境变量,终端输入 sudo gedit ~/.bashrc并在末尾添加下面文本,其中 cuda-x.x 需要更改为安装的 CUDA 版本。当然也可以不指定具体的版本(如果设备中存在多个版本的CUDA需要切换的话)。

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

最后,在终端输入 source ~/.bashrc。之后就可以使用 nvcc -V查看CUDA安装信息。

CUDA11.6之前的版本会安装两个部分:NVIDIA CUDA GPU计算工具包NVIDIA CUD示例包。之后的toolkit不再包含Samples,需要自行前往Github下载。NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit (github.com)

cuDNN 8.9.1

cuDNN的安装更简单,cuDNN Archive | NVIDIA Developer 登录后可以下载,我选择 Local Installer for Ubuntu20.04 x86_64 (Deb)

CUDNN8.9.1.png

安装流程见 Installing cuDNN on Linux — NVIDIA cuDNN v9.2.1 documentation

  1. 安装 Zlib
sudo apt-get install zlib1g
  1. 进入下载deb的文件夹:
# sudo dpkg -i cudnn-local-repo-${distro}-8.x.x.x_1.0-1_amd64.deb
# 对应到我下载的版本就是
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.9.1.23_1.0-1_amd64.deb
  1. 导入CUDA GPG key
sudo cp /var/cudnn-local-repo-ubuntu2004-8.9.1.23/cudnn-local-A9C84908-keyring.gpg /usr/share/keyrings/
sudo apt-get update
  1. 安装runtime library,dev library,samples
sudo apt-get install libcudnn8=8.9.1.23-1+cuda12.1 
sudo apt-get install libcudnn8-dev=8.9.1.23-1+cuda12.1 
sudo apt-get install libcudnn8-samples=8.9.1.23-1+cuda12.1
  1. 测试cuDNN
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd  $HOME/cudnn_samples_v8/mnistCUDNN
make clean && sudo make
./mnistCUDNN

最后会输出 Test passed!

如果 make后报错 fatal error: FreeImage.h,说明需要安装 sudo apt-get install libfreeimage3 libfreeimage-dev,安装后继续编译即可。

TensorRT 8.6.1

下载地址:TensorRT SDK | NVIDIA Developer

根据网上的说法,如果之前下载的是 deb版本的cuda和cuDNN,那么也只能使用 deb版本的TensorRT,反之亦然。

TensorRT.png

选择TensorRT时也要根据自己的系统和CUDA版本,而且要下载GA版的,EA为测试中的版本。下载好对应的 deb

sudo dpkg -i nv-tensorrt-local-repo-ubuntu2004-8.6.1-cuda-12.0_1.0-1_amd64.deb 
sudo cp /var/nv-tensorrt-local-repo-ubuntu2004-8.6.1-cuda-12.0/nv-tensorrt-local-9A1EDFBA-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install tensorrt

然后验证安装是否成功,进入到 /usr/src/tensorrt/samples/sampleOnnxMNIST中执行 sudo make,随后进入 /usr/src/tensorrt/bin文件夹,执行 ./sample_onnx_mnist

@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@%.:@@@@@@@@@@@@
@@@@@@@@@@@@@: *@@@@@@@@@@@@
@@@@@@@@@@@@* =@@@@@@@@@@@@@
@@@@@@@@@@@% :@@@@@@@@@@@@@@
@@@@@@@@@@@- *@@@@@@@@@@@@@@
@@@@@@@@@@# .@@@@@@@@@@@@@@@
@@@@@@@@@@: #@@@@@@@@@@@@@@@
@@@@@@@@@+ -@@@@@@@@@@@@@@@@
@@@@@@@@@: %@@@@@@@@@@@@@@@@
@@@@@@@@+ +@@@@@@@@@@@@@@@@@
@@@@@@@@:.%@@@@@@@@@@@@@@@@@
@@@@@@@% -@@@@@@@@@@@@@@@@@@
@@@@@@@% -@@@@@@#..:@@@@@@@@
@@@@@@@% +@@@@@-    :@@@@@@@
@@@@@@@% =@@@@%.#@@- +@@@@@@
@@@@@@@@..%@@@*+@@@@ :@@@@@@
@@@@@@@@= -%@@@@@@@@ :@@@@@@
@@@@@@@@@- .*@@@@@@+ +@@@@@@
@@@@@@@@@@+  .:-+-: .@@@@@@@
@@@@@@@@@@@@+:    :*@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[11/16/2023-16:50:57] [I] Output:
[11/16/2023-16:50:57] [I]  Prob 0  0.0000 Class 0: 
[11/16/2023-16:50:57] [I]  Prob 1  0.0000 Class 1: 
[11/16/2023-16:50:57] [I]  Prob 2  0.0000 Class 2: 
[11/16/2023-16:50:57] [I]  Prob 3  0.0000 Class 3: 
[11/16/2023-16:50:57] [I]  Prob 4  0.0000 Class 4: 
[11/16/2023-16:50:57] [I]  Prob 5  0.0000 Class 5: 
[11/16/2023-16:50:57] [I]  Prob 6  1.0000 Class 6: **********
[11/16/2023-16:50:57] [I]  Prob 7  0.0000 Class 7: 
[11/16/2023-16:50:57] [I]  Prob 8  0.0000 Class 8: 
[11/16/2023-16:50:57] [I]  Prob 9  0.0000 Class 9: 
[11/16/2023-16:50:57] [I] 
&&&& PASSED TensorRT.sample_onnx_mnist [TensorRT v8601] # ./sample_onnx_mnist

将 trtexec 添加到环境变量

trtexec 是TensorRT自带的模型转换功能。如果不添加到环境变量,则会出现 bash: trtexec: command not found 的问题。

# 没错我用了vim
vim ~/.bashrc

在最后加入 export PATH= /usr/src/tensorrt/bin:$PATH。之后 source ~/.bashrc

不过我在这个过程中,遗漏了 :$PATH,因此出现了 Command 'gedit' is available in the following places * /bin/gedit * /usr/bin/gedit The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable. gedit: command not found 这个报错。这个报错的原因是因为PATH被改变了,通过 $ echo $PATH可以看出PATH已经发生改变:

funnywii@funnywii-4070Ti:~$ echo $PATH
/usr/local/TensorRT-8.6.1.6/bin

解决这个问题只需要运行 export PATH=$PATH:/usr/bin 即可。

trtexec的使用

主要介绍如何将onnx转为engine格式的模型。这个步骤很关键,因为一般来说,在哪台设备部署模型,就需要在该设备上进行模型格式转换。例如:trtexec --onnx=det_static.onnx --saveEngine=test.engine --workspace=4096 --best

不过每个模型,自身属性不同,要转换的需求也不同,这个就要灵活变通了。


Comment