2、环境搭建与工具链准备:CUDA、cuDNN、PyTorch、TensorRT、ONNX Runtime的安装与配置

做模型量化推理加速,说白了就是跟GPU打交道。环境搭不对,后面全是坑。我见过太多同学花了两天装环境,最后跑demo时崩了——嗯,多半是版本没对齐。

这一章咱们把CUDA、cuDNN、PyTorch、TensorRT、ONNX Runtime这五件套装好。别急,我按顺序来,每一步都告诉你为什么这么干。

2.1 整体工具链关系图

先看一张图,搞清楚这些工具到底谁依赖谁。你想想看,装环境最怕的就是“装完A发现B不认C”。

YOLOv11 量化推理工具链依赖关系 NVIDIA GPU(硬件层) CUDA Toolkit(驱动层) cuDNN(深度学习加速库) PyTorch TensorRT ONNX Runtime YOLOv11 FP16 量化推理 箭头方向:下层为上层提供基础能力,版本必须严格对齐

核心原则:版本对齐是环境搭建的第一要务。CUDA版本决定cuDNN版本,cuDNN版本决定PyTorch/TensorRT的兼容范围。别想着“装最新版就完事”——我吃过这个亏。

2.2 CUDA Toolkit 安装

CUDA是NVIDIA GPU的“翻译官”。没有它,PyTorch根本没法跟显卡说话。

2.2.1 确认你的GPU

先跑一行命令,看看显卡型号和驱动版本:

nvidia-smi

输出里你会看到类似这样的信息:

字段示例值说明
Driver Version535.129.03驱动版本,决定CUDA兼容范围
CUDA Version12.2当前驱动支持的最高CUDA版本
GPU NameNVIDIA A100 80GB显卡型号,决定算力等级

注意:nvidia-smi显示的CUDA Version是驱动支持的最高版本,不是你实际安装的版本。我曾经被这个搞晕过——装完CUDA 11.8发现nvidia-smi显示12.2,以为装错了,其实没问题。

2.2.2 选择CUDA版本

我个人习惯用CUDA 11.8或12.1。为什么?因为PyTorch和TensorRT对这两个版本支持最稳。你想想看,YOLOv11官方推荐也是这个范围。

下载地址:NVIDIA官网CUDA Toolkit Archive。选对应版本,按系统下载runfile或deb包。

以Ubuntu 22.04 + CUDA 11.8为例:

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

安装时注意:

  • 不要勾选Driver(除非你的驱动太老)
  • 只选CUDA Toolkit和CUDA Samples
  • 安装路径默认即可

装完配置环境变量:

export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

验证:

nvcc --version

看到Cuda compilation tools, release 11.8就对了。

2.3 cuDNN 安装

cuDNN是NVIDIA的深度学习加速库。说白了,卷积、池化、归一化这些操作,cuDNN帮你跑得飞快。

2.3.1 版本匹配

cuDNN版本必须跟CUDA版本一一对应。比如CUDA 11.8,就下载cuDNN for CUDA 11.x。

CUDA版本cuDNN推荐版本备注
11.88.9.7稳定,PyTorch官方测试通过
12.19.0.0新特性多,但部分旧模型可能不兼容
12.49.3.0最新,但TensorRT支持可能滞后

我的建议:做YOLOv11量化,CUDA 11.8 + cuDNN 8.9.7是最稳的组合。我在三个项目里都用这个组合,没出过兼容问题。

2.3.2 安装步骤

下载cuDNN需要NVIDIA开发者账号。下载后是tar包:

tar -xzvf cudnn-linux-x86_64-8.9.7.29_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*

验证:

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

看到类似#define CUDNN_MAJOR 8就对了。

2.4 PyTorch 安装

PyTorch是咱们训练和导出模型的主力框架。YOLOv11就是用PyTorch写的。

2.4.1 选择安装方式

我个人推荐用pip安装,干净利落。别用conda——conda的PyTorch版本经常滞后,而且依赖解析慢得要命。

对应CUDA 11.8:

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

对应CUDA 12.1:

pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121

2.4.2 验证GPU可用

python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"

输出True和你的显卡型号,说明PyTorch认出了GPU。

避坑:如果输出False,八成是CUDA版本跟PyTorch不匹配。我曾经在CUDA 12.4上装了PyTorch 2.1.0,结果torch.cuda.is_available()返回False——因为PyTorch 2.1.0最高只支持到CUDA 12.1。

2.5 TensorRT 安装

TensorRT是NVIDIA的推理优化引擎。FP16量化主要靠它。说白了,它能把模型“编译”成GPU最擅长跑的格式。

2.5.1 版本选择

TensorRT版本必须跟CUDA和cuDNN对齐。我整理了一张表:

TensorRT版本CUDA版本cuDNN版本适用场景
8.6.111.88.9.xYOLOv11 FP16量化首选
9.2.012.19.0.x新特性多,但部分插件不兼容
10.0.012.49.3.x最新,但社区支持少

2.5.2 安装步骤

下载TensorRT的tar包(推荐)或deb包。我习惯用tar包,灵活:

tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
sudo mv TensorRT-8.6.1.6 /usr/local/
export LD_LIBRARY_PATH=/usr/local/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH

安装Python包:

pip install /usr/local/TensorRT-8.6.1.6/python/tensorrt-8.6.1-cp39-none-linux_x86_64.whl

验证:

python -c "import tensorrt as trt; print(trt.__version__)"

小技巧:TensorRT的Python包名跟系统架构和Python版本有关。下载前看清楚文件名里的cp39(对应Python 3.9)。我一开始没注意,装了cp311的包,结果import报错——Python版本不匹配。

2.6 ONNX Runtime 安装

ONNX Runtime是微软的推理引擎。咱们用它做模型格式转换和CPU/GPU推理验证。YOLOv11导出ONNX后,用ONNX Runtime跑一遍,能提前发现算子兼容问题。

2.6.1 安装命令

ONNX Runtime分CPU版和GPU版。做量化推理,必须装GPU版:

pip install onnxruntime-gpu==1.16.3

如果只是做模型转换验证,CPU版也够用:

pip install onnxruntime==1.16.3

2.6.2 验证GPU支持

python -c "import onnxruntime as ort; print(ort.get_device())"

输出GPU说明ONNX Runtime认出了你的显卡。

注意:ONNX Runtime GPU版依赖CUDA和cuDNN。如果输出CPU,检查一下环境变量里有没有正确配置CUDA路径。我遇到过一种情况——装了GPU版但LD_LIBRARY_PATH没包含CUDA的lib64,结果它默默回退到CPU了。

2.7 环境验证清单

所有工具装完后,跑一遍这个脚本,确保每个环节都通:

#!/bin/bash
echo "=== CUDA ==="
nvcc --version | grep "release"
echo "=== cuDNN ==="
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep "CUDNN_MAJOR"
echo "=== PyTorch ==="
python -c "import torch; print(f'PyTorch {torch.__version__}, CUDA available: {torch.cuda.is_available()}')"
echo "=== TensorRT ==="
python -c "import tensorrt as trt; print(f'TensorRT {trt.__version__}')"
echo "=== ONNX Runtime ==="
python -c "import onnxruntime as ort; print(f'ONNX Runtime {ort.__version__}, device: {ort.get_device()}')"

输出应该类似这样:

工具期望输出
CUDArelease 11.8
cuDNN8
PyTorch2.1.0, CUDA available: True
TensorRT8.6.1
ONNX Runtime1.16.3, device: GPU