1、查看电脑的GPU是否支持TensorRT 这篇
Compute Capability,记得这个关键词
各个显卡算力查询:CUDA GPUs - Compute Capability | NVIDIA Developer
例如,我的笔记本 NVIDIAGeForce RTX 3070 Laptop GPU 显卡:8.6
公司服务器算力:
GeForce RTX 3090 | 8.6 |
工程:
煤流检测 yolov8 的分割模型
环境:
首先打开WSL
wsl -d Ubuntu-22.04
1. WSL升级WSL2(必做)
WSL v1不支持直接使用Windows的GPU,就算做了下面的所有步骤也没办法用,torch.cuda.is_available()会永远返回FALSE,所以一定要检查使用的WSL版本,打开Powershell或者命令提示符输入:
wsl -l -v
查看VERSION下的数字,如果是1要升级到2,具体步骤请参考:Lighten:WSL1升级为WSL2
2. 安装 pytorch,cuda,cudnn
首先
因为yolov8 好像支持最新的pytorch 2.0.0系列,那我安装最新的
pytorch 2.1.1,需要 CUDA 11.8
通过 conda search cudatoolkit --info 查询存在 CUDA 11.8 安装包,
再看一下conda提供的所有cudatoolkit 查看cudnn版本: conda search cudnn --info ,也有
CUDA 11.8 对应的 cudnn 版本,那就安装这个pytorch 2.1.1。
cudatoolkit 11.8.0 h6a678d5_0
-----------------------------
file name : cudatoolkit-11.8.0-h6a678d5_0.conda
name : cudatoolkit
version : 11.8.0
build : h6a678d5_0
build number: 0
size : 630.7 MB
license : NVIDIA End User License Agreement
subdir : linux-64
url : https://repo.anaconda.com/pkgs/main/linux-64/cudatoolkit-11.8.0-h6a678d5_0.conda
md5 : 74f6c43e0670ebe1d1f8b7130d24030f
timestamp : 2023-05-02 04:09:43 UTC
constraints :
- __cuda >=11.0
dependencies:
- libgcc-ng >=11.2.0
- libstdcxx-ng >=11.2.0
然后安装你想要的cudatoolkit: conda install cudatoolkit==11.8.0
CUDA 11.8 对应的 cudnn 版本:
cudnn 8.9.2.26 cuda11_0
-----------------------
file name : cudnn-8.9.2.26-cuda11_0.conda
name : cudnn
version : 8.9.2.26
build : cuda11_0
build number: 0
size : 469.4 MB
license : Proprietary
subdir : linux-64
url : https://repo.anaconda.com/pkgs/main/linux-64/cudnn-8.9.2.26-cuda11_0.conda
md5 : e589bfd90e598c42a088794e61ad6be2
timestamp : 2023-07-04 12:30:52 UTC
dependencies:
- cudatoolkit 11.*
安装你想要的cudatoolkit: conda install cudnn==8.9.2.26
python
import torch
print(torch.cuda.is_available())
上面安装的cuda 在 WSL2 里好像好像用不了,还是得用下面的:
WSL2 的开发环境配置 (基础配置, 网络代理, CUDA, Python, Fortran, Latex, 服务器配置) - 知乎
- 安装 CUDA Toolkit. 首先测试
nvcc -V
, 应该是不能用的. 它会提示你用如下命令安装:sudo apt install nvidia-cuda-toolkit
. 我知道你很急, 但是先别急.- 在官网CUDA Toolkit 12.1 Downloads | NVIDIA Developer, 可以选择WSL2 Ubuntu, 然后得到你安装所需要的一系列命令. 这安装的是最新的12.1版本. 在历史版本的连接中, 也可以选择老的版本.
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
配置环境变量,将cuda对应的路径添加进去。
vi /etc/profile
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
然后再nvcc -V 应该就可以正常显示了。
下载安装 cudnn
cuDNN Archive | NVIDIA Developer
比如我下载的是:Download cuDNN v8.9.6 (November 1st, 2023), for CUDA 11.x
Local Installer for Linux x86_64 (Tar)
下载,解压, 然后在 ~/.bashrc
vi ~/.bashrc
上面的cuda完事后,在
/mnt/d/TensorRT/TensorRT-8.6.1.6/samples/sampleOnnxMNIST
再次执行 make,就成功了。
或者:
vi ~/.bashrc
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
source ~/.bashrc
3. 安装 TRT 相关工具链
按照这篇文章来:yolov8 tensorrt模型加速部署[实战] - 知乎
2.2.4 下载 tensorrt8.6.1
下载地址: TensorRT SDK | NVIDIA Developer
tensorrt8.6.1开发官方文档:
4. 测试TensorRT可用
# 快速验证一下tensorrt+cuda+cudnn是否安装正常
cd /mnt/d/TensorRT/TensorRT-8.6.1.6/samples/sampleOnnxMNIST
make
cd ../../bin/
导出tensorrt环境变量(it is important!),注:将LD_LIBRARY_PATH:后面的路径换成你自己的!后续编译onnx模型的时候也需要执行下面第一行命令
sudo vi ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/d/TensorRT/TensorRT-8.6.1.6/lib
source ~/.bashrc
上面都OK后,打开 bin 目录,执行上一步编译得到的示例程序
cd /mnt/d/TensorRT/TensorRT-8.6.1.6/bin
./sample_onnx_mnist
运行结果
总之,tensorrt安装完成后,在python环境下import tensorrt看能不能成功,并且编译一下官方的sampleMnist的例子,如果都可以的话,就安装成功了。
5. 后记
上面只是跑通了TRT加载 onnx模型做推理的代码,后续还有 怎么把 yolov8 的分割模型 转成 trt 适配的 engine模型,然后用 trt 推理。
见这篇:
yolov8模型转onnx模型 和 tensorRT 模型-CSDN博客
6. bug
1、CUDA lazy loading is not enabled
有说,trt 和 cuda 不匹配造成的,有说 没有开启造成的。也有 说 CUDA版本要大于11.8
CUDA lazy loading is not enabled-CSDN博客
2、前面一直跑 样例程序 sample_onnx_mnist 没跑通的主要原因
是 TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar 解压到 TensorRT-8.6.1.6 文件夹里的 的东西没 解压完整,没有 用 sudo 文件 解压,或者没有 给 某些文件夹 写入 等的权限。