TensorRT是用于在NVDIA GPU上加速预测的C++库,可以搭配Paddle Inference使用,TensorRT安装步骤简单,但是经常容易安装不上,因此记录下安装过程。
这一步容易忽略,但是十分重要。安装不正确的包会导致出现无法排查的报错。
> CUDA 工具包 10.2 配合 cuDNN v7.6.5, 如需使用 PaddleTensorRT 推理,需配合 TensorRT7.0.0.11 (经过验证,cuda10.2也适配TensorRT-7.1.3.4 和 TensorRT-7.2.3.4 )
> CUDA 工具包 11.2 配合 cuDNN v8.2.1, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.0.3.4
> CUDA 工具包 11.6 配合 cuDNN v8.4.0, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.4.0.6
> CUDA 工具包 11.7 配合 cuDNN v8.4.1, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.4.2.4
> CUDA 工具包 11.8 配合 cuDNN v8.6.0, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.5.1.7
> CUDA 工具包 12.0 配合 cuDNN v8.9.1, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.6.1.6
2. 前往 NVIDIA 官网下载适合自己的TensorRT包。
3. 按照官方文档安装:
执行到第四步导出路径即可。
参考这里,并对对应的库文件进行链接到对应环境地址(库文件一般存在于anoconda3/env/envname/lib下):
-
这里也有一点经验,如果发现没有找到的库文件和自己当前环境不匹配,可能说明TRT版本安装错了,例如我的环境是cuda10.2搭配cudnn7.6.5,但是提示我cudnn8的库文件缺失。
-
即便如此,提示什么库缺失,还是可以下载对应的库解压(比如我这里的cudnn8),并链接到对应的库排除掉找不到库依赖的问题,我后续就是链接到libcudnn8.so后正确推理的。
cd Tensorrt.xx/lib # check the dependencies of libnvinfer.so.8 ldd libnvinfer.so.8 # output means all the dependencies can be found linux-vdso.so.1 => (0x00007ffcb671b000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5f6c6a3000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5f6c49f000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f5f6c297000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5f6bf15000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f6bc0c000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5f6b9f6000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f6b62c000) /lib64/ld-linux-x86-64.so.2 (0x00007f5f8a0f7000) # check the dependencies of libnvinfer_plugin.so ldd libnvinfer_plugin.so # output means libcublas.so.11, libcublasLt.so.11 and libcudnn.so.8 can't be found linux-vdso.so.1 => (0x00007ffd566d7000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f70516c4000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f70514c0000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f70512b8000) libcublas.so.11 => not found libcublasLt.so.11 => not found libcudnn.so.8 => not found libnvinfer.so.8 => /mnt/whs/envs/TensorRT-8.5.1.7/lib/libnvinfer.so.8 (0x00007f7033a81000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f70336ff000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f70333f6000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f70331e0000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7032e16000) /lib64/ld-linux-x86-64.so.2 (0x00007f705424a000) # So find installed cublas&cudnn and add their path into LD_LIBRARY_PATH. And use ldd libnvinfer_plugin.so to recheck it.
可以使用deploy/slim/act/test_seg.py进行验证。
```bash
cd PaddleSeg/deploy/slim/act/
wget https://paddleseg.bj.bcebos.com/dygraph/demo/cityscapes_demo.png
python test_seg.py \
--model_path=liteseg_tiny_scale1.0 \
--dataset='cityscape' \
--image_file=cityscapes_demo.png \
--use_trt=True \
--precision=fp32 \
--save_file res_qat_fp32.png
```