1. 环境准备搭建TensorRT 8.2.5的温床在Ubuntu 20.04上部署TensorRT就像给赛车装配高性能引擎首先要确保车库系统环境符合标准。我遇到过不少开发者卡在环境配置这一步往往是因为CUDA版本不匹配这类低级错误。先运行这组诊断命令就像修车前的全车扫描nvidia-smi # 查看GPU驱动版本 nvcc --version # 查看CUDA编译器版本 cat /usr/local/cuda/version.txt # 确认CUDA运行时版本这三个命令的输出要特别注意版本对齐。比如我的测试环境是NVIDIA RTX 3090显卡搭配CUDA 11.4这时候就必须选择对应的TensorRT 8.2.5.1版本。曾经有学员在RTX 3060上错误安装了CUDA 10.2的TensorRT结果模型转换时直接报错不支持的SM版本白白浪费两天时间排查。Python环境建议用conda创建独立空间我习惯这样初始化conda create -n trt_deploy python3.9 conda activate trt_deploy pip install numpy1.21.5 # 避免新版numpy与TRT的兼容问题注意pycuda的版本必须低于2021.1这是很多人在安装时容易忽略的坑。我实测过2022.1版本会导致engine序列化失败。2. 安装实战解压即用的正确姿势官方提供的tar包安装其实比deb方式更灵活特别适合需要多版本并行的开发场景。下载TensorRT-8.2.5.1.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz后别急着解压先做这两件事创建专用目录mkdir ~/tensorrt_install校验文件完整性md5sum TensorRT-8.2.5.1...tar.gz解压后目录结构就像个完整的工具包TensorRT-8.2.5.1 ├── bin # 转换工具trtexec ├── data # 示例数据 ├── graphsurgeon # 图优化工具 ├── include # 头文件 ├── lib # 核心库文件 └── python # Python绑定环境变量配置是门艺术我推荐在~/.bashrc中添加这些路径export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/your_path/TensorRT-8.2.5.1/lib export PATH$PATH:/home/your_path/TensorRT-8.2.5.1/bin安装Python包时有个小技巧先用ls python查看whl文件对应的Python版本像我的环境就需要安装tensorrt-8.2.5.1-cp39-none-linux_x86_64.whl。曾经有学员在Python 3.8环境错装了cp37的包导致import时出现诡异的ABI错误。3. 模型转换从ONNX到TRT引擎的魔法拿姿态估计模型ThreeDPose为例转换前必须做模型体检import onnx model onnx.load(pose_resnet34.onnx) onnx.checker.check_model(model) # 检查模型完整性 print(onnx.helper.printable_graph(model.graph)) # 查看计算图遇到动态维度怎么办比如batch_size维度是?。这时需要显式指定优化配置./trtexec --onnxpose_resnet34.onnx \ --saveEnginepose_resnet34_fp16.trt \ --workspace4096 \ --fp16 \ --minShapesinput:1x3x256x256 \ --optShapesinput:4x3x256x256 \ --maxShapesinput:8x3x256x256这个命令里的参数都有讲究--workspace设置显存池大小建议设为可用显存的80%--fp16开启半精度加速但对某些模型可能影响精度动态shape的三个参数要覆盖实际应用场景转换过程中常见的坑是OP不支持比如遇到GridSample算子。这时候就需要用onnx-graphsurgeon进行手术式修改import onnx_graphsurgeon as gs graph gs.import_onnx(onnx.load(model.onnx)) for node in graph.nodes: if node.op GridSample: node.op Plugin # 替换为自定义插件 onnx.save(gs.export_onnx(graph), modified.onnx)4. 推理优化让引擎全速运转转换得到的.trt文件就像编译好的程序使用时需要精细控制。这是我总结的最佳实践流程引擎加载一定要用Logger捕获初始化信息logger trt.Logger(trt.Logger.VERBOSE) with open(model.trt, rb) as f: engine trt.Runtime(logger).deserialize_cuda_engine(f.read())上下文管理为每个线程创建独立contextcontext engine.create_execution_context() context.set_optimization_profile_async(0, torch.cuda.current_stream().cuda_stream)内存绑定使用PyCUDA直接管理显存import pycuda.driver as cuda d_input cuda.mem_alloc(batch_size * 3 * 256 * 256 * 4) d_output cuda.mem_alloc(batch_size * 64 * 64 * 256 * 4) bindings [int(d_input), int(d_output)]实测中发现对于姿态估计这类多输出模型使用Stream能提升15%的吞吐量stream cuda.Stream() cuda.memcpy_htod_async(d_input, input_data, stream) context.execute_async_v2(bindings, stream.handle) cuda.memcpy_dtoh_async(output_data, d_output, stream) stream.synchronize()最后要特别提醒TensorRT的版本管理很严格开发环境和部署环境的TRT版本必须完全一致。我有次在8.2.5开发的模型拿到8.2.4的环境运行直接报引擎版本不兼容错误。建议用Docker固化部署环境FROM nvidia/cuda:11.4.3-runtime RUN apt-get update apt-get install -y python3-pip COPY TensorRT-8.2.5.1 /opt/TensorRT ENV LD_LIBRARY_PATH /opt/TensorRT/lib:$LD_LIBRARY_PATH RUN pip install /opt/TensorRT/python/tensorrt-8.2.5.1-cp39-none-linux_x86_64.whl