安装显卡驱动
- 首先更新设备信息,不然可能会识别不出来
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。
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
三种安装方式,我选 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)
安装流程见 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 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
将 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
不过每个模型,自身属性不同,要转换的需求也不同,这个就要灵活变通了。