卸载原有显卡驱动(如果有) {#卸载原有显卡驱动-如果有-}
如果当前系统存在显卡驱动,直接安装新的显卡驱动可能会报错。建议先卸载掉旧的。
#先查看驱动以及版本安装情况
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
安装显卡驱动 {#安装显卡驱动}
-
首先更新设备信息,不然可能会识别不出来
sudo update-pciids
-
更新后,将会显示你的显卡型号。信息的末尾的
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)
-
接下来查看一下可用驱动信息
ubuntu-drivers devices
-
更新软件列表并安装必要依赖
sudo apt-get update
sudo apt-get install g++
sudo apt-get install gcc
sudo apt-get install make -
禁用nouveau(nouveau是通用的驱动程序)
sudo gedit /etc/modprobe.d/blacklist.conf
在文件末尾加入
blacklist nouveau
options nouveau modeset=0
更新变更并重启
sudo update-initramfs -u
重启后输入下面命令,没有任何输出表示禁用成功
lsmod | grep nouveau
- 开始安装驱动
~~目前安装驱动有3种方式,GUI安装;.run文件安装;命令行安装,其实这几种方法都差不多的...恶心人。
打开Software&Update的Additional Drivers,可以看到Nvidia Drivers列表,正常来说,是按照ubuntu-drivers devices
得到的recommaned版本安装,比如我的推荐版本是530-proprietary tested,不过我用尽三种方法,安装了N次也没有成功,最后安装了530-proprietary却成功了...如果安装建议版本不成功,建议换个其他版本的安装。
2023.11
今天发现了 CUDA 的 deb
安装的一个问题。他会自动安装 NVIDIA 显卡驱动,如果你要使用 CUDA 的话,先安装驱动是没有必要的,直接使用 deb
安装 CUDA 即可。
因此也要额外注意一点,如果你先安装了 NVIDIA 驱动,之后再考虑安装 CUDA 的话,建议使用 runfile
方式安装 CUDA,这个是不会自动安装驱动的。比如我,在先安装了 NVIDIA 的535驱动后又用 deb
安装了 CUDA 12.0,然后就发现 nvidia-smi
不能用了。因为 CUDA 12.0 会再安装一个 525 的显卡驱动。
-
安装完成后,重启并并输入
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
安装中出现的提示 {#安装中出现的提示}
我不太明白这个,根据网上一些文章的建议:
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?
选择NoWould 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.
选择YesWould 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?
选择NoIf 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
三种安装方式,我选的 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)
安装流程见 Installing cuDNN on Linux --- NVIDIA cuDNN v9.2.1 documentation
-
安装 Zlib
sudo apt-get install zlib1g
-
进入下载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
-
导入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
-
安装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
-
测试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时也要根据自己的系统和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
不过每个模型,自身属性不同,要转换的需求也不同,这个就要灵活变通了。