【Ubuntu版】TensorRT deb安装避坑指南:从环境对齐到验证成功
1. 环境准备:从零开始的TensorRT安装基础
第一次在Ubuntu上装TensorRT时,我对着满屏的依赖报错差点崩溃。后来才发现,问题的根源往往出在环境准备阶段。就像盖房子要打地基,TensorRT的安装也需要先搞定三个关键组件:CUDA、cuDNN和Python环境。
CUDA是NVIDIA的通用并行计算平台,相当于GPU的"操作系统"。我建议直接用deb包安装,因为TensorRT的deb安装方式对CUDA有强制要求。以CUDA 11.0为例,安装命令如下:
sudo apt-get install cuda-11-0cuDNN则是深度学习的加速库,版本必须与CUDA严格匹配。比如CUDA 11.0对应cuDNN 8.0.5。安装时需要先到NVIDIA官网下载deb包:
sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.0_amd64.debPython环境我强烈推荐使用Anaconda创建虚拟环境。这不仅能隔离不同项目的依赖,还能避免系统Python被污染。创建环境的命令很简单:
conda create -n tensorrt python=3.7 conda activate tensorrt注意:TensorRT对Python版本很敏感,Python 3.7是最稳妥的选择。我曾在3.8环境遇到各种奇怪的兼容性问题。
2. 安装TensorRT deb包:魔鬼在细节中
下载TensorRT deb包时,文件名里藏着关键信息。以nv-tensorrt-repo-ubuntu1604-cuda11.0-trt7.1.3.4-ga-20200617_1-1_amd64.deb为例:
- ubuntu1604:系统版本
- cuda11.0:CUDA版本
- trt7.1.3.4:TensorRT版本
安装过程看似简单,但有几个坑我踩过多次:
sudo dpkg -i nv-tensorrt-repo-*.deb sudo apt-key add /var/nv-tensorrt-repo-*/7fa2af80.pub sudo apt-get update最关键的步骤是添加密钥。有次我漏了这一步,导致后续安装全部失败。安装完成后,建议检查软件源:
sudo apt-cache policy tensorrt这个命令会显示可安装的TensorRT版本。如果看到版本号与你下载的一致,说明前期工作都做对了。
3. Python接口安装:容易被忽略的关键步骤
很多教程到上一步就结束了,但其实Python接口需要单独安装。我遇到过模型转换时突然报错,就是因为漏装了这些组件:
sudo apt-get install python3-libnvinfer-dev python3 -m pip install numpy onnx sudo apt-get install onnx-graphsurgeon特别注意:python3-libnvinfer-dev必须用apt安装,而onnx-graphsurgeon则要区分系统包和pip包。有次我混用了安装方式,导致运行时出现诡异的符号冲突。
验证Python接口是否正常:
import tensorrt print(tensorrt.__version__)如果这里报错,八成是Python环境或版本有问题。我的经验是:宁可重装虚拟环境,也不要在一堆报错中挣扎。
4. 验证与排错:从安装成功到真正可用
安装完成只是第一步,真正的考验是验证功能是否正常。我最常用的验证方法是跑一个简单的MNIST模型转换:
cd /usr/src/tensorrt/samples/python/introductory_parser_samples python3 onnx_to_tensorrt.py这个脚本会自动下载MNIST模型并转换为TensorRT引擎。如果看到类似这样的输出,说明安装完全成功:
[06/12/2022-15:30:45] [I] Building an engine... [06/12/2022-15:30:46] [I] Engine built.常见问题排查:
CUDA版本不匹配:报错信息中出现
cudaGetDevice()失败- 解决方法:
nvidia-smi查看驱动版本,nvcc --version查看CUDA版本
- 解决方法:
cuDNN加载失败:报错信息包含
libcudnn.so- 解决方法:检查
/usr/lib/x86_64-linux-gnu下的符号链接是否正确
- 解决方法:检查
Python接口缺失:import时报
No module named 'tensorrt'- 解决方法:确认Python环境路径,检查
/usr/lib/python3/dist-packages是否有tensorrt库
- 解决方法:确认Python环境路径,检查
5. 进阶技巧:让TensorRT工作更稳定
经过多次安装实践,我总结出几个提升稳定性的技巧:
虚拟环境隔离:为每个TensorRT项目创建独立环境。比如做目标检测时:
conda create -n yolov5 python=3.7 conda activate yolov5 pip install -r requirements.txt版本锁定:使用requirements.txt固定所有依赖版本:
tensorrt==7.1.3.4 numpy==1.19.5 onnx==1.8.1日志调试:遇到问题时启用详细日志:
import tensorrt tensorrt.Logger(tensorrt.Logger.VERBOSE)性能调优:在/usr/src/tensorrt/bin下有各种性能测试工具。比如:
./trtexec --onnx=model.onnx --saveEngine=model.plan这个命令可以测试模型在不同batch size下的推理速度,帮助找到最优配置。
6. 真实案例:从报错到解决的完整过程
去年在部署一个工业质检模型时,我遇到一个典型问题:安装成功但转换失败。报错信息是:
[TensorRT] ERROR: INVALID_ARGUMENT: getPluginCreator could not find plugin...经过排查发现是插件缺失。解决方法分三步:
- 确认插件库是否安装:
sudo apt-get install libnvinfer-plugin-dev- 检查环境变量:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu- 在代码中显式加载插件:
trt.init_libnvinfer_plugins(TRT_LOGGER, "")整个过程耗时两天,最终发现是系统自动更新导致CUDA路径变化。从此我养成了定期检查/usr/local/cuda符号链接的习惯。
