2、环境搭建与版本匹配:CUDA、cuDNN、TensorRT版本对应关系,常见安装错误及解决

环境搭建这件事,说难不难,说简单也真能卡你三天。我见过太多人花了一周装环境,最后发现是版本没对上。说白了,TensorRT 对版本匹配极其敏感,差一个小版本号都可能让你编译不过。

2.1 版本对应关系:一张表说清楚

先给一张我整理的对照表。这是我反复踩坑后总结出来的,你直接照着来就行。

TensorRT 版本 CUDA 版本 cuDNN 版本 备注
8.4.x 11.6 / 11.7 8.4.x / 8.5.x 比较稳定的一代
8.5.x 11.8 8.6.x 我开始用这版时踩过坑
8.6.x 11.8 / 12.0 8.7.x / 8.8.x 注意 cuDNN 版本别混
10.0.x 12.2 / 12.4 8.9.x / 9.0.x 最新版,要求严格

核心原则:TensorRT 的发布说明里会明确写支持哪些 CUDA 和 cuDNN 版本。别信网上随便搜的教程,直接去 NVIDIA 官网查 Release Notes。

2.2 常见安装错误及解决

好,下面说几个我实际遇到过的错误。每个都是真金白银换来的经验。

错误一:libcudnn.so.8 找不到

这个错误太经典了。你编译通过,但运行时告诉你找不到动态库。

error while loading shared libraries: libcudnn.so.8: cannot open shared object file: No such file or directory

原因:cuDNN 没装对,或者路径没加到 LD_LIBRARY_PATH 里。

解决:

  • 先确认 cuDNN 是否真的装了:ls /usr/local/cuda/lib64/libcudnn*
  • 如果没装,去 NVIDIA 下载对应版本的 cuDNN,注意要和 CUDA 版本匹配
  • 如果装了但找不到,加环境变量:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

我的习惯:我会在 ~/.bashrc 里写死这个路径,省得每次都要 export。但注意别写错路径,否则整个系统都可能受影响。

错误二:CUDA driver version is insufficient

这个错误我印象很深。有一次我在一台新服务器上部署,折腾了半天才发现是驱动太老。

CUDA driver version is insufficient for CUDA runtime version

原因:你装的 CUDA Toolkit 版本比显卡驱动支持的版本高。说白了,驱动跟不上。

解决:

  • 检查驱动版本:nvidia-smi 看右上角的 CUDA Version
  • 检查 Toolkit 版本:nvcc --version
  • 驱动版本必须 >= Toolkit 版本。如果不行,要么升级驱动,要么降级 Toolkit

注意:nvidia-smi 显示的 CUDA Version 是驱动支持的最高版本,不是你实际用的版本。别搞混了。

错误三:TensorRT 编译时找不到 cublas

这个错误在编译 TensorRT 插件时常见。我记得有一次帮同事排查,他死活编译不过,最后发现是 CUDA 路径没配好。

fatal error: cublas_v2.h: No such file or directory

原因:CMake 找不到 CUDA 的头文件路径。

解决:

  • 确认 CUDA 安装路径:ls /usr/local/cuda/include/cublas_v2.h
  • 在 CMakeLists.txt 里指定:set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda)
  • 或者用 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda 编译

2.3 避坑指南:我踩过的那些坑

我曾经在项目里犯过一个低级错误。当时急着上线,直接从网上下了一个 TensorRT 的 deb 包就装了。结果跑模型时各种报错,查了两天才发现——我装的 TensorRT 是 Ubuntu 20.04 的包,但系统是 22.04。依赖库版本全对不上。

所以我的建议是:

  • 用 tar 包安装,别用 deb 或 rpm。tar 包解压就能用,不会污染系统库
  • 装完先跑 sample,比如 sample_onnx_mnist。能跑通说明环境没问题
  • 版本号写死,别用 latest。你想想看,今天装的是 8.6,明天可能就变成 8.7 了,但你的代码可能不兼容

一句话总结:环境搭建没有捷径。老老实实对照版本表,一步步来,比什么都强。

2.4 快速验证脚本

最后,给你一个我常用的验证脚本。装完环境后跑一下,能快速确认所有组件是否正常。

#!/bin/bash
# 验证 CUDA
nvcc --version
# 验证 cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 验证 TensorRT
dpkg -l | grep TensorRT
# 或者用 tar 包的话
/path/to/TensorRT/bin/trtexec --version

这个脚本我每次装完环境都会跑一遍。如果输出正常,那基本就稳了。

嗯,环境搭建这部分就这些。下一章我们聊聊模型转换时那些让人头疼的问题。