第2章:环境搭建与版本选择:CUDA、cuDNN、TensorRT版本匹配,Docker镜像使用

说实话,环境搭建这事儿,看着简单,坑是真不少。我见过太多人花了一周调模型,最后发现是CUDA版本没对上。嗯,咱们今天就把这事儿彻底捋清楚。

2.1 版本匹配:为什么不能随便装?

TensorRT不是独立运行的。它依赖CUDA和cuDNN。这三者的关系,说白了就是:

  • CUDA:GPU的底层驱动和并行计算框架
  • cuDNN:基于CUDA的深度学习加速库
  • TensorRT:在cuDNN之上做推理优化

你想想看,如果底层版本不对,上层肯定跑不起来。我在项目中遇到过最典型的情况:装好了TensorRT 8.6,结果CUDA还是10.2,编译直接报错,查了半天才发现是版本不兼容。

⚠️ 重要提醒: 不要相信「最新版就是最好的」。TensorRT对CUDA版本有严格限制,升级CUDA可能导致整个环境崩塌。

2.2 官方版本对照表

我习惯每次装环境前先查这张表。下面是我整理的常用版本对应关系:

TensorRT版本 CUDA版本 cuDNN版本 推荐用途
8.4.x 11.6 / 11.7 8.5 稳定,适合生产
8.5.x 11.8 8.6 支持更多算子
8.6.x 11.8 / 12.0 8.7 新特性多,但坑也多
10.0.x 12.2 8.9 最新,适合尝鲜

我个人建议:生产环境用8.4或8.5。为什么?因为这些版本经过大量验证,社区反馈多,遇到问题容易搜到答案。

2.3 安装步骤:一步步来

好,咱们开始动手。我以TensorRT 8.5.3 + CUDA 11.8为例:

第一步:安装CUDA

# 下载CUDA 11.8 runfile
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

# 运行安装(注意不要安装驱动)
sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override

# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
💡 小技巧: 安装CUDA时,如果系统已经装了NVIDIA驱动,记得取消勾选「Driver」选项。否则可能覆盖驱动,导致显卡不工作。

第二步:安装cuDNN

# 下载cuDNN 8.6 for CUDA 11.x(需要NVIDIA账号)
# 解压并复制文件
tar -xzvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

第三步:安装TensorRT

# 下载TensorRT 8.5.3 tar包
tar -xzvf TensorRT-8.5.3.1.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz

# 添加环境变量
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/TensorRT-8.5.3.1/lib' >> ~/.bashrc
source ~/.bashrc

# 安装Python包
cd TensorRT-8.5.3.1/python
pip install tensorrt-8.5.3.1-cp38-none-linux_x86_64.whl

2.4 Docker镜像:一劳永逸的方案

说实话,手动装环境太容易出错了。我后来改用Docker,省心很多。NVIDIA官方提供了现成的镜像,版本都帮你配好了。

拉取官方镜像

# 拉取TensorRT 8.5.3镜像
docker pull nvcr.io/nvidia/tensorrt:22.12-py3

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

这个镜像里已经包含了CUDA 11.8、cuDNN 8.6和TensorRT 8.5.3。你进去就能直接用trtexec、Python API这些工具。

为什么推荐Docker?

  • 版本锁定,不会因为系统更新而破坏环境
  • 多人协作时,保证环境一致
  • 部署时直接导出镜像,省去重复安装

自定义Dockerfile

如果你需要额外装一些库,可以自己写Dockerfile:

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

# 安装常用工具
RUN apt-get update && apt-get install -y \
    vim \
    htop \
    net-tools

# 安装Python依赖
RUN pip install --upgrade pip
RUN pip install numpy opencv-python pillow

# 设置工作目录
WORKDIR /workspace

2.5 验证环境是否装对

装完之后,一定要验证。我习惯跑这几个命令:

# 检查CUDA版本
nvcc --version

# 检查cuDNN版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

# 检查TensorRT版本
python -c "import tensorrt as trt; print(trt.__version__)"

# 跑一个简单的推理测试
trtexec --onnx=model.onnx --fp16 --workspace=1024

如果这些都能正常输出,说明环境搭好了。如果报错,别慌,先检查环境变量有没有配对。

⚠️ 常见报错及解决:
  • libcudart.so找不到:LD_LIBRARY_PATH没配好,或者CUDA版本不对
  • ImportError: libnvinfer.so:TensorRT的lib路径没加到LD_LIBRARY_PATH
  • CUDA driver version insufficient:NVIDIA驱动太老,需要升级驱动

2.6 避坑指南

最后,分享几个我踩过的坑:

  • 不要用apt安装CUDA:apt源里的版本通常比较老,而且容易和手动安装的冲突。我建议用runfile安装。
  • 注意Python版本:TensorRT的Python包只支持特定Python版本(通常是3.8-3.10)。我之前用Python 3.11装不上,折腾了半天才发现。
  • 多版本CUDA共存:如果你需要多个CUDA版本,可以用alternatives管理。但我个人建议用Docker隔离,更干净。

嗯,环境搭建这部分就这些。记住一句话:版本匹配是底线,Docker是捷径。下一章咱们开始讲模型转换,到时候你会感谢今天把环境搭好的自己。