Skip to content

🧠 Ubuntu 下通过 deb 安装 TensorRT 8.6.1 的完整指南(含问题排查与验证)

适用环境:Ubuntu 22.04 + CUDA 11.8 + 手动安装 cuDNN + APT 安装 TensorRT 目标:成功安装并验证 TensorRT,解决常见依赖与路径问题


一、背景

TensorRT 是 NVIDIA 提供的高性能推理引擎,广泛用于部署深度学习模型。官方提供 .deb 包安装方式,但在实际使用中常因 cuDNN 版本不匹配路径配置问题 导致安装失败或运行异常。

本文记录了从安装到验证的完整过程,重点解决以下典型问题:

  • APT 安装 TensorRT 时因 cuDNN 依赖失败
  • ldconfig 报 “not a symbolic link” 警告
  • trtexec 命令找不到
  • 如何验证 TensorRT 是否真正可用

二、安装流程简述

1. 安装 CUDA 11.8

通过官方 .run 文件或 .deb 包安装:

bash
sudo apt install cuda-toolkit-11-8

2. 手动安装 cuDNN(如 8.9.7)

从 NVIDIA 官网下载 cuDNN for CUDA 11.8,解压后复制到 CUDA 目录:

bash
sudo cp -P libcudnn*.so* /usr/local/cuda-11.8/targets/x86_64-linux/lib/
sudo chmod a+r /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn*

⚠️ 此时 libcudnn.so.8 是普通文件,非符号链接 → 后续会引发 ldconfig 警告。

3. 安装 TensorRT(通过官方 deb 包)

bash
# 添加本地仓库(以 8.6.1 + CUDA 11.8 为例)
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-8.6.1-cuda-11.8_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-*/7fa2af80.pub /usr/share/keyrings/
sudo apt update
sudo apt install tensorrt

三、常见问题与解决方案

❌ 问题 1:APT 安装失败,提示缺少 libcudnn8

原因:APT 无法识别手动安装的 cuDNN。

✅ 解决方案:创建虚拟包欺骗 APT

bash
# 安装 equivs 工具
sudo apt install equivs

# 创建虚拟包定义
cat > libcudnn8 <<EOF
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: libcudnn8
Version: 8.9.7-1+cuda11.8
Description: Fake libcudnn8 to satisfy APT
EOF

# 构建并安装虚拟包
equivs-build libcudnn8
sudo dpkg -i libcudnn8_8.9.7-1+cuda11.8_all.deb

之后即可正常 apt install tensorrt


bash
/sbin/ldconfig.real: /usr/local/cuda/.../libcudnn.so.8 is not a symbolic link

原因:手动复制的 libcudnn.so.8 是普通文件,而非指向 libcudnn.so.8.9.7 的符号链接。

✅ 解决方案:重建符号链接

bash
cd /usr/local/cuda/targets/x86_64-linux/lib/
sudo rm libcudnn*.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8
sudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8
# ... 其他组件同理
sudo ldconfig

💡 此警告不影响功能,但修复后更规范。


❌ 问题 3:trtexec: command not found

原因trtexec 位于 /usr/src/tensorrt/bin/,但未加入 PATH

✅ 解决方案:添加到环境变量

编辑 ~/.bashrc

bash
export TENSORRT_ROOT=/usr/src/tensorrt
export PATH=$TENSORRT_ROOT/bin:$PATH

然后:

bash
source ~/.bashrc
trtexec --help  # 应正常输出帮助信息

四、完整验证步骤

✅ 1. 检查安装状态

bash
dpkg -l | grep tensorrt
# 应看到 tensorrt 和 libnvinfer8 等包

✅ 2. 检查动态库注册

bash
ldconfig -p | grep nvinfer
# 应列出 libnvinfer.so.8 等

✅ 3. 编译并运行官方示例

bash
# 复制示例到用户目录(避免权限问题)
cp -r /usr/src/tensorrt/samples/sampleOnnxMNIST ~/
cd ~/sampleOnnxMNIST
make
./sample_onnx_mnist

成功输出示例

[10/12/2025-18:42:17] [I]  Prob 4  0.9911 Class 4: **********
...
&&&& PASSED TensorRT.sample_onnx_mnist

✅ 表示 CUDA + cuDNN + TensorRT 全链路正常!

✅ 4. 测试 trtexec

bash
trtexec --onnx=/path/to/model.onnx --verbose

可用于快速构建 .engine 推理引擎。


五、环境变量建议(.bashrc 配置)

bash
# CUDA
export CUDA_HOME=/usr/local/cuda-11.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# TensorRT
export TENSORRT_ROOT=/usr/src/tensorrt
export PATH=$TENSORRT_ROOT/bin:$PATH

# OpenCV / ONNX Runtime(按需)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/install/opencv4.5.4/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/install/onnxruntime-linux-x64-gpu-1.15.1/lib

🔔 注意:TensorRT 库已安装在 /usr/lib/x86_64-linux-gnu/无需额外添加 LD_LIBRARY_PATH


六、进阶:多版本 OpenCV 共存

若需为不同程序使用不同 OpenCV 版本:

bash
# 临时指定库路径
LD_LIBRARY_PATH=/path/to/opencv4.8.0/lib ./your_program

或编译时设置 RPATH,或使用 Conda/Docker 隔离环境。


七、总结

步骤状态
✅ CUDA 11.8 安装完成
✅ cuDNN 8.9.7 手动安装完成
✅ TensorRT 8.6.1 通过 deb 安装成功(借助虚拟包)
ldconfig 警告修复已处理
trtexec 全局可用已配置
✅ 官方示例运行成功✅ 验证通过

📚 参考资料

© 2025 技术博客. All rights reserved by 老周有AI