第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是捷径。下一章咱们开始讲模型转换,到时候你会感谢今天把环境搭好的自己。