
1. 环境准备与版本匹配在Ubuntu 22.04上部署TensorRT 10.0首先要解决的就是版本兼容性问题。我踩过的坑告诉我版本不匹配会导致各种莫名其妙的错误甚至让整个安装过程前功尽弃。1.1 硬件与驱动检查先确认你的显卡支持CUDA。打开终端运行nvidia-smi这个命令会显示你的NVIDIA驱动版本和CUDA兼容版本。比如我的RTX 3090显示驱动版本525.116.03CUDA兼容版本12.0。记住这个CUDA版本号它决定了你能安装的TensorRT版本范围。如果没看到显卡信息说明驱动没装好。建议通过官方方式安装sudo ubuntu-drivers autoinstall安装后记得重启。我之前偷懒用第三方源装驱动结果CUDA死活认不到显卡浪费了一整天时间。1.2 CUDA与cuDNN的精确匹配TensorRT 10.0对CUDA和cuDNN有严格要求。根据官方文档CUDA 12.4这是TensorRT 10.0支持的最高CUDA版本cuDNN 8.9.7经我实测最稳定的组合安装CUDA 12.4推荐用runfile方式避免包管理器带来的依赖冲突wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run sudo sh cuda_12.4.1_550.54.15_linux.run安装时务必取消勾选Driver选项除非你想重装驱动。我就因为没注意这个导致系统启动黑屏最后只能重装系统。cuDNN的安装更要注意文件权限tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz sudo cp cuda/include/cudnn*.h /usr/local/cuda/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*验证安装是否成功cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2应该能看到类似#define CUDNN_MAJOR 8的输出。2. TensorRT 10.0安装实战2.1 两种安装方式对比官方提供了Python wheel和TAR包两种安装方式我两种都试过总结下来方式优点缺点Python wheel一键安装依赖自动解决仅包含Python接口功能不全TAR包完整工具链含C支持需要手动配置环境变量新手建议用Python wheel快速验证pip install --pre --upgrade tensorrt这行命令会安装tensorrt、tensorrt-lean和tensorrt-dispatch三个包。安装后测试import tensorrt as trt print(trt.__version__) # 应该输出10.0.02.2 TAR包完整安装生产环境我推荐TAR包安装虽然步骤多点但更可靠从 NVIDIA官网 下载TensorRT 10.0.0.6的TAR包解压并设置环境变量tar -xzf TensorRT-10.0.0.6.Linux.x86_64-gnu.cuda-12.4.tar.gz export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$(pwd)/TensorRT-10.0.0.6/lib安装Python包cd TensorRT-10.0.0.6/python pip install tensorrt-*-cp310-none-linux_x86_64.whl验证所有组件cd ../bin ./trtexec --version # 应该显示版本信息注意如果遇到libnvinfer.so.10: cannot open shared object错误说明环境变量没生效。建议把export语句永久写入~/.bashrc3. 模型转换全流程3.1 PyTorch转ONNX以ResNet18为例转换时要注意动态轴设置import torch model torch.hub.load(pytorch/vision, resnet18, pretrainedTrue) dummy_input torch.randn(1, 3, 224, 224) torch.onnx.export( model, dummy_input, resnet18.onnx, input_names[input], output_names[output], dynamic_axes{ input: {0: batch}, output: {0: batch} } )这里有个坑PyTorch和TensorRT的算子兼容性。我遇到过GridSampler算子不支持的情况最后用torch.nn.functional.grid_sample替代才解决。3.2 ONNX转TensorRT引擎使用trtexec工具转换./trtexec --onnxresnet18.onnx --saveEngineresnet18.engine --fp16 --workspace2048关键参数说明--fp16启用FP16加速模型大小减半速度提升30%--workspace显存工作区大小(MB)复杂模型需要调大转换过程中可能会遇到[ERROR] ... Unsupported ONNX data type: INT64 (11)这是因为TensorRT不支持某些数据类型需要在导出ONNX时指定类型torch.onnx.export(..., opset_version13) # 使用更高版本的opset4. 推理性能优化技巧4.1 使用TensorRT的Python API直接加载engine文件进行推理with open(resnet18.engine, rb) as f: runtime trt.Runtime(trt.Logger(trt.Logger.WARNING)) engine runtime.deserialize_cuda_engine(f.read()) context engine.create_execution_context() inputs, outputs, bindings [], [], [] stream cuda.Stream() for binding in engine: size trt.volume(engine.get_binding_shape(binding)) dtype trt.nptype(engine.get_binding_dtype(binding)) host_mem np.empty(size, dtypedtype) device_mem cuda.mem_alloc(host_mem.nbytes) bindings.append(int(device_mem)) if engine.binding_is_input(binding): inputs.append({host: host_mem, device: device_mem}) else: outputs.append({host: host_mem, device: device_mem})4.2 动态批处理实现在创建engine时启用动态形状profile builder.create_optimization_profile() profile.set_shape(input, (1,3,224,224), (8,3,224,224), (32,3,224,224)) config.add_optimization_profile(profile)这样同一个engine可以处理不同batch size的输入。我在视频分析项目中用这个技巧吞吐量提升了5倍。5. 常见问题解决方案Q1运行时报错Could not load library libnvinfer_plugin.so.10sudo cp TensorRT-10.0.0.6/lib/libnvinfer_plugin.so.10 /usr/lib/x86_64-linux-gnu/ sudo ldconfigQ2模型精度出现偏差尝试关闭FP16./trtexec --onnxmodel.onnx --saveEnginemodel.engine --fp32Q3转换时显存不足增加workspace大小./trtexec --onnxlarge_model.onnx --workspace4096最后提醒大家TensorRT的版本更新很频繁遇到问题首先检查版本匹配。我在项目部署中积累的版本组合表供参考组件推荐版本备注Ubuntu22.04LTS版本更稳定CUDA12.4需与驱动版本匹配cuDNN8.9.7最新版可能有兼容问题TensorRT10.0.0.6目前最稳定的10.x版本