站点图标 AI技术聚合

TensorRT 学习(一):下载、安装、测试

前言

  目标:C++ 部署深度模型
  当前水平:会点 Python、Pytorch、C语言

1. 下载

TensorRT 下载地址:https://developer.nvidia.com/zh-cn/tensorrt
官网版本对应的版本号(2022.9.7):
TensorRT 8.4 GA Update 2:8.4.3.1
TensorRT 8.4 GA Update 1:8.4.2.4
TensorRT 8.4 GA:8.4.1.5
TensorRT 8.4 EA:8.4.0.6
选择下载 TensorRT 8.4 GA Update 2 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package

1.1 相关信息查询

显卡型号 TensorRT 学习(一):下载、安装、测试 显卡驱动 CUDA版本 cuDNN版本
现有的东西能不动就不动,之前碰到改了下显卡驱动系统都进不去了。

显卡驱动查询和下载
CUDA版本和显卡驱动对应表
CUDA下载地址
cuDNN下载地址
查看显卡型号:lspci | grep -i vga(NVIDIA Corporation GP104 [GeForce GTX 1070 Ti] (rev a1))
查看显卡驱动版本:nvidia-smi(Driver Version: 470.82.01,根据表格只能装<=11.4的CUDA)
查看操作系统内核:uname -a(x86_64)
查看操作系统版本:cat /proc/version (18.04.1-Ubuntu)
查看cuda版本:nvcc -V (11.4.152)
查看cudnn版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2,没有输出,原因为cudnn版本较新,版本号不在 cudnn.h 中,cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2(8.3.2)

"""
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 2
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
"""

2. 安装

2.1 常用安装方法

  根据 在线文档 进行安装,点击 NVIDIA TensorRT Installation Guide 进入 安装指南,里面提供了多种安装方式:
(1)Debian 和 RPM 安装:

  • 自动安装依赖项
  • 需要 sudo 或 root 权限
  • 不能自定义 TensorRT 安装位置
  • CUDA toolkit 和 cuDNN 也已使用 Debian 或 RPM 安装
  • 不能安装多个版本 TensorRT

(2)tar 文件

  • 可同时安装多个版本 TensorRT
  • 自己安装必要的依赖项
  • 自己管理 LD_LIBRARY_PATH

(3)zip 文件

  • Windows 安装的唯一方法
  • 不支持除 Windows 以外的任何其他平台
  • 自己安装必要的依赖项

2.2 Linux:tar 文件安装

(1)解压
  tar -xzvf TensorRT-8.4.3.1.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz

(2)添加环境变量
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>,此方法只在当前终端有效,可以选择在 ~/.bashrc 中添加环境变量:
打开终端输入:vim ~/.bashrc
点击 i 进入插入模式,在文件末尾插入
export LD_LIBRARY_PATH=/home/jesswork/app/TensorRT-8.4.3.1/lib:$LD_LIBRARY_PATH
Esc 退出插入模式,输入 :wq 保存并退出

(3)安装各种 Python 文件

  • 首先新建一个虚拟环境
    conda create -n tensorrt python=3.7
    conda activate tensorrt
  • TensorRT wheel (选择对应的 Python 版本,这里是 cp37)
    cd TensorRT-8.4.3.1/python
    python3 -m pip install tensorrt-8.4.3.1-cp37-none-linux_x86_64.whl
  • UFF wheel (仅在 TensorFlow 上用 TensorRT 要装)
    cd TensorRT-8.4.3.1/uff
    python3 -m pip install uff-0.6.9-py2.py3-none-any.whl
  • graphsurgeon wheel
    cd TensorRT-8.4.3.1/graphsurgeon
    python3 -m pip install graphsurgeon-0.4.6-py2.py3-none-any.whl
  • onnx-graphsurgeon wheel
    cd TensorRT-8.4.3.1/onnx_graphsurgeon
    python3 -m pip install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl

2.3 Windows:zip 文件安装(有缘再更)

3. 测试

https://github.com/NVIDIA/TensorRT,方便查看各个例子的 readme

3.1 sampleMNIST

  在 TensorRT-8.4.3.1/samples/sampleMNIST 路径下运行 make,然后在 TensorRT-8.4.3.1/bin 路径下运行 ./sample_mnist,可看到运行结果。

3.2 network_api_pytorch_mnist

  这个例子在 PyTorch 中训练模型,在 TensorRT 中重新创建网络,从训练的模型中导入权重,最后使用 TensorRT 引擎运行推理。

  这里没有按照官方文档中的 python3 -m pip install -r requirements.txt 配置环境,因为里面是装的 CPU 版 Pytorch。选择安装了CUDA 11.3 的 Pytorchv1.10.0,Pytorch 安装
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge

  在 TensorRT-8.4.3.1/samples/python/network_api_pytorch_mnist 路径下运行 python3 sample.py 即可。

运行问题:
(1)UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors.
  发生在 return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s),只需要把 copy=False 去掉即可。

(2)TensorRT was linked against cuDNN 8.4.1 but loaded cuDNN 8.3.2
  由于电脑 CUDA 环境是装好的,安装过程中发现了 cuDNN 版本和要求的不一致但没重装,示例代码能运行暂时不管了。

(3)后续碰到了个坑 torch.cuda.is_available() 是 False,最后发现是装的时候直接 yes 没注意是 cpu 版的 pytorch,卸载重装也不行,最后开了个新的虚拟环境先装 pytorch 再装 tensorrt 就好了。

3.3 pytorchx & tensorrtx

  一般转模型的时候会通过 pytorch onnx tensorrt,但可能会碰到一些不支持的操作或者层。这项工作将训练好的 pytorch 模型权重导出到 wts 文件,并直接用 tensorrt 定义网络并加载权重。
https://github.com/wang-xinyu/pytorchx
https://github.com/wang-xinyu/tensorrtx

3.3.1 lenet

  按照给出的 lenet5 demo 进行测试,由于是用 tar 安装的 tensorrt,只需修改一下 CMakeLists.txt,其余按指定步骤操作即可。

# tensorrt
include_directories(/usr/include/x86_64-linux-gnu/)
link_directories(/usr/lib/x86_64-linux-gnu/)
'修改为'
# tensorrt
include_directories(安装目录/TensorRT-8.4.3.1/include)
link_directories(安装目录/TensorRT-8.4.3.1/lib)

3.3.2 yolov5

  同样按 教程 操作并修改 CMakeLists.txt 即可。

  到这两行报错: ./yolov5: error while loading shared libraries: libinference_engine.so: cannot open shared object file: No such file or directory,解决办法是去掉 sudo,原因可能是一些中间文件的权限问题。

sudo ./yolov5 -s yolov5s.wts yolov5s.engine s
sudo ./yolov5 -d yolov5s.engine ../samples

  

文章出处登录后可见!

已经登录?立即刷新
退出移动版