3、环境搭建与工具链:CUDA、cuDNN、TensorRT版本选择、Docker镜像配置、验证安装

说实话,环境搭建这件事,看着简单,但坑是真不少。我见过太多人花了一周时间调环境,最后发现是版本不匹配。所以这一章,咱们把这事彻底聊透。

3.1 版本选择:别盲目追新

很多新手上来就装最新版,结果发现各种不兼容。我个人习惯是:看TensorRT官方文档的「Support Matrix」。那里明确写了每个TensorRT版本对应哪个CUDA和cuDNN版本。

我推荐的稳定组合(截至2024年):

  • TensorRT 8.6.x → CUDA 11.8 + cuDNN 8.9
  • TensorRT 8.5.x → CUDA 11.8 + cuDNN 8.6
  • TensorRT 8.4.x → CUDA 11.6 + cuDNN 8.4

为什么推荐这些?因为动态Shape在8.4之后才真正稳定。我之前在8.2上踩过坑,动态Shape跑起来各种报错,后来升到8.4就没事了。

避坑指南:我曾经遇到过CUDA 12.x + TensorRT 8.5的组合,编译时一切正常,但推理时显存泄漏。后来查了三天,发现是cuDNN版本不匹配。所以,严格按照官方矩阵来,别自己搞排列组合。

3.2 安装方式:本地安装 vs Docker

这里我强烈建议用Docker。为什么?你想想看,项目做完了要部署到服务器,服务器环境跟你本地不一样怎么办?Docker镜像一打包,到哪都能跑。

3.2.1 本地安装(适合学习阶段)

如果你就想在自己机器上折腾,步骤其实不复杂:

  1. 安装CUDA:去NVIDIA官网下载runfile,别用deb包,容易搞乱系统。
  2. 安装cuDNN:下载tar包,解压后把文件复制到CUDA目录下。
  3. 安装TensorRT:同样下载tar包,解压后配置环境变量。
# 配置环境变量(加到~/.bashrc里)
export LD_LIBRARY_PATH=/path/to/TensorRT/lib:$LD_LIBRARY_PATH
export PATH=/path/to/TensorRT/bin:$PATH

小技巧:装完后运行 trtexec --version,如果能显示版本号,说明TensorRT装好了。我每次装完都先跑这个命令,心里踏实。

3.2.2 Docker镜像配置(推荐)

Docker镜像的好处是:一次配置,到处运行。NVIDIA官方提供了带TensorRT的镜像,我们直接拉下来用就行。

# 拉取官方镜像(以TensorRT 8.6为例)
docker pull nvcr.io/nvidia/tensorrt:23.12-py3

# 运行容器
docker run --gpus all -it --rm \
  -v /path/to/your/project:/workspace \
  nvcr.io/nvidia/tensorrt:23.12-py3

这里有个细节:--gpus all 是让容器能访问所有GPU。如果你有多卡,也可以指定 --gpus '"device=0"'

我个人习惯:写一个Dockerfile,把常用依赖都装好。比如这样:

FROM nvcr.io/nvidia/tensorrt:23.12-py3

# 安装Python依赖
RUN pip install numpy onnx onnxruntime

# 设置工作目录
WORKDIR /workspace

# 复制项目代码
COPY . /workspace

然后构建镜像:

docker build -t my-trt-env .
docker run --gpus all -it --rm my-trt-env

嗯,这样每次换机器,只要重新build一下,环境就一模一样了。

3.3 验证安装:跑个简单的例子

环境搭好了,怎么知道能不能用?我一般跑三个验证:

3.3.1 验证CUDA

nvidia-smi
# 应该能看到GPU信息,包括驱动版本和CUDA版本

3.3.2 验证TensorRT

trtexec --version
# 输出类似:TensorRT Version: 8.6.1

3.3.3 验证Python接口

import tensorrt as trt
print(trt.__version__)
# 输出:8.6.1

避坑指南:我曾经在Python里import tensorrt时报错,原因是系统里装了多个Python版本,pip install到了另一个Python里。解决办法:用 which python 确认当前用的是哪个Python,然后用对应的pip安装。

3.4 常见问题与解决方案

问题 原因 解决方案
trtexec找不到 环境变量没配好 检查PATH是否包含TensorRT的bin目录
Python import报错 Python版本或路径不对 pip list | grep tensorrt 检查是否安装
Docker里跑不了GPU 没装nvidia-docker 安装nvidia-container-toolkit
动态Shape报错 TensorRT版本太低 升级到8.4以上

说白了,环境搭建就是一次性的工作。花点时间配好,后面就省心了。我个人建议:用Docker + 官方镜像,这是最省事的方式。如果你非要本地装,记得严格按照版本对应关系来。

好,环境搭好了,下一章咱们就开始真正玩动态Shape了。