51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

卸载原有显卡驱动(如果有) {#卸载原有显卡驱动-如果有-}

如果当前系统存在显卡驱动,直接安装新的显卡驱动可能会报错。建议先卸载掉旧的。

#先查看驱动以及版本安装情况 
ls /usr/src | grep nvidia
`#进入安装目录,用驱动自带卸载命令卸载
cd /usr/bin
ls nvidia-*
sudo nvidia-uninstall
`

然后再用ls /usr/src | grep nvidia查看是否卸载干净,一般情况下没有输出。卸载完成后reboot。

我也找到了另一种方法,来自Ubuntu Nvidia driver驱动安装及卸载 - 牛奔 - 博客园

#直接卸载驱动 
sudo ./显卡驱动包名称 --uninstall   
#卸载两件套
sudo apt-get purge nvidia\* 
sudo apt-get autoremove 
sudo reboot

安装显卡驱动 {#安装显卡驱动}

  1. 首先更新设备信息,不然可能会识别不出来

    sudo update-pciids

  2. 更新后,将会显示你的显卡型号。信息的末尾的 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

  2. 更新软件列表并安装必要依赖

    sudo apt-get update
    sudo apt-get install g++
    sudo apt-get install gcc
    sudo apt-get install make

  3. 禁用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。

    dt@dt:~$ nvidia-smi Wed Dec 11 10:52:34 2024
    +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.216.01 Driver Version: 535.216.01 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 GTX 1660 ... Off | 00000000:01:00.0 On | N/A | | 31% 40C P2 37W / 125W | 588MiB / 6144MiB | 7% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | 0 N/A N/A 944 G /usr/lib/xorg/Xorg 35MiB | | 0 N/A N/A 1529 G /usr/lib/xorg/Xorg 109MiB | | 0 N/A N/A 1655 G /usr/bin/gnome-shell 112MiB | | 0 N/A N/A 2106 G /usr/lib/firefox/firefox 146MiB | | 0 N/A N/A 6732 G gnome-control-center 1MiB | | 0 N/A N/A 7855 C+G /opt/todesk/bin/ToDesk_Session 169MiB | +---------------------------------------------------------------------------------------+


锁定内核 {#锁定内核}

为了避免内核自动更新导致NV显卡驱动挂掉,还要锁定内核。

# 查看内核版本
dt@dt:~$ uname -r
5.15.0-67-generic

然后锁定:

sudo apt-mark hold linux-image-5.15.0-67-generic
sudo apt-mark hold linux-modules-extra-5.15.0-67-generic

查看目前系统中被锁定的包:

dt@dt:~$ sudo apt-mark showhold
linux-headers-5.15.0-67-generic
linux-image-5.15.0-67-generic
linux-modules-5.15.0-67-generic
linux-modules-extra-5.15.0-67-generic

最后更新grub使之生效:

sudo update-grub

安装中出现的提示 {#安装中出现的提示}

我不太明白这个,根据网上一些文章的建议:

  1. Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?
    选择No
  2. Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.
    选择Yes
  3. Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?
    选择No
  4. If you plan to no longer use the NVIDIA deriver, you should make sure that no X screens are configured to use the NVIDIA X driver X driver in your X configuration file. If you used nvidia-xconfig to configure X, it may have created a backup of your original configuration. Would you like to run 'nvidia-xconfig --restore-original-backup' to attempt restoration of the original X configuration file?
    选择No

安装CUDA 12.1 {#安装CUDA-12-1}

接下来安装CUDA。目前本机 gcc 和 g++ 版本为9.4.0,不过我这个版本的driver和CUDA12.1似乎并不存在网上所说的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),结合上面提到的内容,如果已经安装好了NV显卡驱动,建议用runfile方式安装以避免再覆盖掉当前显卡驱动。runfile就两行命令,一行下载文件,一行允许脚本,按照官网Downloads界面的命令来就可以。但是一定要注意,runfile方式安装时的NV显卡驱动安装默认是打开的,记得关闭。

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.1/bin:$PATH  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH 
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-12.1/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)

Runfile安装的CUDA {#Runfile安装的CUDA}

如果是使用Runfile方式安装的CUDA,安装完成后根据脚本输出的内容,修改bashrc,同样添加如下内容:

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

cuDNN 8.9.1 {#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

  2. 进入下载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

  3. 导入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

  4. 安装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

  5. 测试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-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
`

Tar安装TensorRT {#Tar安装TensorRT}

先解压

tar -zxvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz

然后将其添加至环境变量:

export LD_LIBRARY_PATH=/home/dt/Downloads/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH

运行上述测试内容即可。

将 trtexec 添加到环境变量 {#将-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的使用 {#trtexec的使用}

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

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

赞(2)
未经允许不得转载:工具盒子 » Ubuntu显卡驱动以及CUDA、cuDNN、TensorRT的安装