环境搭建与安装: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,那对不起,跑不起来。
这里我整理了一份常用的版本对应表,建议你保存下来:
| 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
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
知识体系总览
下面这张图是我自己画的,把环境搭建的核心逻辑串起来了。你照着这个流程走,基本不会出问题。
这张图的核心逻辑就是:先定版本,再选方式,最后验证。别跳步骤,别想当然。我见过太多人一上来就pip install tensorrt,结果版本不对,折腾半天。
好了,环境搭建这部分就讲到这里。记住:版本匹配是基础,安装方式看场景,验证步骤不能省。把这三点做到位,后面跑模型的时候就能省下大把时间。