环境搭建与安装:CUDA与cuDNN版本匹配、TensorRT的多种安装方式

说实话,做TensorRT部署这么多年,我见过最多的坑就是环境没搭好。你想想看,辛辛苦苦写好的模型,结果一跑就报错,查了半天发现是CUDA版本不对——这种经历,我至少遇到过七八回。所以这一章,咱们就把环境搭建这件事彻底讲透。

CUDA与cuDNN:版本匹配是门玄学?

其实没那么玄。说白了,CUDA是NVIDIA的并行计算平台,cuDNN是专门为深度学习优化的加速库。TensorRT依赖这两者,但版本之间必须严格对应。

我个人习惯是:先确定你要用的TensorRT版本,然后反推CUDA和cuDNN的版本。举个例子,TensorRT 8.5 GA Update 2 要求CUDA 11.8、cuDNN 8.6。你如果装了CUDA 12.0,那对不起,跑不起来。

⚠️ 我曾经踩过的坑: 有一次我图省事,直接装了最新的CUDA 12.1,结果TensorRT死活编译不过。查了三天文档才发现,TensorRT 8.5根本不支持12.x系列。从那以后,我再也不敢追新了。

这里我整理了一份常用的版本对应表,建议你保存下来:

TensorRT版本 CUDA版本 cuDNN版本
8.4 GA 11.6 / 11.7 8.4 / 8.5
8.5 GA Update 2 11.8 8.6
8.6 EA 11.8 / 12.0 8.7 / 8.8
10.0 GA 12.2 / 12.4 8.9 / 9.0

怎么查?去NVIDIA官网的TensorRT Release Notes里找,每个版本都有详细的依赖说明。别信网上的二手信息,我吃过这个亏。

TensorRT的多种安装方式

TensorRT的安装方式有四种:deb、rpm、tar、whl。每种都有适用场景,我一个个说。

1. deb包安装(Ubuntu/Debian系)

这是我最推荐的方式。简单、干净、好卸载。步骤就这几行:

# 下载对应版本的deb包
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.5.3/local_repos/nv-tensorrt-local-repo-ubuntu2204-8.5.3-cuda-11.8_1.0-1_amd64.deb

# 安装
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-8.5.3-cuda-11.8_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get install tensorrt

# 验证
dpkg -l | grep TensorRT

嗯,这里要注意:deb包会把TensorRT安装到系统目录,所有用户都能用。适合服务器环境。

2. rpm包安装(Red Hat/CentOS系)

和deb类似,只是包管理器换成了rpm。我个人在CentOS上用过几次,感觉不如deb顺手,但也能用。

sudo rpm -ivh nv-tensorrt-local-repo-rhel8-8.5.3-cuda-11.8-1.0-1.x86_64.rpm
sudo yum install tensorrt

3. tar包安装(通用方式)

这个方式最灵活。你下载一个压缩包,解压就能用。适合没有root权限的环境,或者你想把TensorRT打包进自己的项目里。

# 下载tar包
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.5.3/tars/TensorRT-8.5.3.1.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz

# 解压
tar -xzvf TensorRT-8.5.3.1.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz

# 设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/TensorRT-8.5.3.1/lib
export PATH=$PATH:/path/to/TensorRT-8.5.3.1/bin
💡 我的建议: 如果你只是做开发测试,tar包最方便。我经常在Docker容器里用tar包,解压即用,不污染宿主机环境。

4. whl包安装(Python开发者最爱)

如果你主要用Python做推理,whl包是最直接的。pip install一下就完事。

# 安装TensorRT Python包
pip install tensorrt-8.5.3.1-cp39-none-linux_x86_64.whl

# 验证
python -c "import tensorrt; print(tensorrt.__version__)"

但要注意:whl包只包含Python接口,C++库还得另外装。我见过有人只装了whl包,然后编译C++代码时找不到头文件——嗯,这就是没搞清楚依赖关系。

验证安装是否成功

装完了怎么知道对不对?别急着跑模型,先做几个简单的检查。

检查CUDA

nvidia-smi
nvcc --version

这两个命令输出应该一致。如果不一致,说明你的CUDA路径有问题。我遇到过nvidia-smi显示12.0,但nvcc显示11.8的情况——这是因为系统里装了多个CUDA版本,PATH没配对。

检查cuDNN

cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

或者用这个命令:

dpkg -l | grep cudnn

检查TensorRT

# C++验证
/usr/src/tensorrt/bin/trtexec --version

# Python验证
python -c "import tensorrt as trt; print(trt.__version__); print(trt.Builder(trt.Logger()))"

如果trtexec能正常输出版本号,Python也能创建Builder对象,那基本就稳了。

✅ 完整验证脚本:
#!/bin/bash
echo "=== CUDA ==="
nvcc --version | grep "release"
echo "=== cuDNN ==="
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
echo "=== TensorRT ==="
python3 -c "import tensorrt as trt; print(f'TensorRT {trt.__version__}')"
echo "=== 测试推理 ==="
trtexec --onnx=/path/to/test.onnx --saveEngine=/tmp/test.engine 2>&1 | tail -5

知识体系总览

下面这张图是我自己画的,把环境搭建的核心逻辑串起来了。你照着这个流程走,基本不会出问题。

TensorRT环境搭建核心流程 1. 确定TensorRT版本 2. 反推CUDA + cuDNN版本 3. 选择安装方式(deb / rpm / tar / whl) 系统级安装(deb/rpm) 用户级安装(tar/whl) 5. 验证安装(三件套) ✅ 完成

这张图的核心逻辑就是:先定版本,再选方式,最后验证。别跳步骤,别想当然。我见过太多人一上来就pip install tensorrt,结果版本不对,折腾半天。

💡 避坑指南: 我曾经在Ubuntu 20.04上装TensorRT 8.4,结果发现系统自带的GCC版本太高,编译报错。后来换成Ubuntu 18.04才搞定。所以,操作系统版本也要考虑进去。

好了,环境搭建这部分就讲到这里。记住:版本匹配是基础,安装方式看场景,验证步骤不能省。把这三点做到位,后面跑模型的时候就能省下大把时间。

专注资料整理