2. 环境搭建

说实话,环境搭建这事儿看着简单,但我在项目里见过太多人在这上面栽跟头。有的同学装了半天,最后发现CUDA版本对不上;有的明明配好了,一跑就报错。嗯,咱们这一章就把这事儿捋清楚。

2.1 整体环境概览

先看看咱们需要哪些东西。我习惯把环境分成三层:

层级 组件 作用
基础层 Python 3.8+、CUDA 11.8+、cuDNN 提供运行底座和GPU加速能力
框架层 PyTorch 2.0+、ONNX 1.14+ 模型训练、导出、中间表示
优化层 TensorRT 8.6+、ONNX Runtime、NVIDIA AMMO 剪枝、量化、推理加速

说白了,这三层缺一不可。底层不对,上层全白搭。我建议你先把基础层搞定,再往上走。

核心原则:所有组件的版本必须互相兼容。别图新,也别图省事。我见过有人装了CUDA 12.0,结果PyTorch 2.0不支持,折腾了两天。

2.2 基础环境安装

2.2.1 Python环境

我个人习惯用conda管理环境。干净、隔离、好回滚。你想想看,要是直接在系统Python里装一堆包,哪天搞崩了,哭都来不及。

# 创建独立环境
conda create -n yolov11_opt python=3.10 -y
conda activate yolov11_opt

# 升级pip
pip install --upgrade pip setuptools wheel

小技巧:环境名我习惯用项目名_用途的格式,比如yolov11_opt。这样项目多了也不会乱。

2.2.2 CUDA与cuDNN

这里有个坑。CUDA版本不是越新越好,得看PyTorch和TensorRT支持什么。我目前在用的组合是CUDA 11.8 + cuDNN 8.9,稳得很。

# 查看CUDA版本
nvcc --version

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

注意:如果你用conda装PyTorch,它会自动帮你装cudatoolkit。但TensorRT需要系统级的CUDA。我曾经图省事只装了conda版,结果TensorRT死活找不到CUDA库。嗯,后来老老实实装了系统版。

2.3 框架层安装

2.3.1 PyTorch

PyTorch 2.0以上版本对torch.compile支持更好,剪枝量化时能省不少事。我建议直接上2.1或2.2。

# CUDA 11.8版本
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu118

# 验证安装
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

如果输出True,说明GPU可用。如果输出False,别慌,八成是CUDA版本没对上。

2.3.2 ONNX与ONNX Runtime

ONNX是模型转换的中间桥梁。剪枝后的模型要转成ONNX,再喂给TensorRT。ONNX Runtime则用来做推理验证。

pip install onnx==1.14.0 onnxruntime-gpu==1.16.0

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

经验之谈:ONNX版本别追最新。我遇到过1.15版本导出时某些算子不兼容,回退到1.14就没事了。稳定比新功能重要。

2.4 优化层安装

2.4.1 TensorRT

TensorRT是咱们做量化的核心工具。安装方式有两种:pip安装和tar包安装。我推荐tar包方式,能自定义安装路径,方便管理。

# 下载TensorRT 8.6.1 tar包
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/8.6.1/tensorrt-8.6.1.6.linux.x86_64-gnu.cuda-11.8.tar.gz

# 解压
tar -xzvf tensorrt-8.6.1.6.linux.x86_64-gnu.cuda-11.8.tar.gz

# 配置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/TensorRT-8.6.1.6/lib
export PATH=$PATH:/path/to/TensorRT-8.6.1.6/bin

# 安装Python包
pip install /path/to/TensorRT-8.6.1.6/python/tensorrt-8.6.1-cp310-none-linux_x86_64.whl

避坑指南:我曾经直接把TensorRT的lib路径加到/etc/ld.so.conf里,结果跟系统其他库冲突了。后来改用LD_LIBRARY_PATH环境变量,只在当前终端生效,安全多了。

2.4.2 NVIDIA AMMO(模型优化工具)

AMMO是NVIDIA出的模型优化工具包,专门做剪枝和量化。它基于PyTorch,跟咱们的YOLOv11配合得很好。

pip install nvidia-ammo

# 验证
python -c "import ammo.torch.quantization as atq; print('AMMO ready')"

2.5 完整环境验证

装完所有东西后,我习惯跑一个完整的验证脚本。确保所有组件能协同工作。

import torch
import onnx
import tensorrt as trt

print(f"PyTorch: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"ONNX: {onnx.__version__}")
print(f"TensorRT: {trt.__version__}")

# 简单测试:创建一个小模型并转ONNX
model = torch.nn.Linear(10, 5).cuda()
dummy_input = torch.randn(1, 10).cuda()
torch.onnx.export(model, dummy_input, "test.onnx")
print("ONNX export: OK")

# 测试TensorRT
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
print("TensorRT builder: OK")

如果所有输出都正常,恭喜你,环境搭好了。

2.6 环境结构总览

为了让你更直观地理解各组件的关系,我画了张图:

YOLOv11剪枝量化环境结构图 基础层 Python 3.10 CUDA 11.8 cuDNN 8.9 框架层 PyTorch 2.1.0 ONNX 1.14.0 ONNX Runtime 1.16 优化层 TensorRT 8.6.1 NVIDIA AMMO Polygraphy

从下往上看,基础层支撑框架层,框架层再支撑优化层。每一层都依赖下一层提供的能力。你想想看,要是CUDA没装好,PyTorch就调不了GPU;PyTorch没装好,AMMO就没法做量化。所以,按顺序来,别跳步。

2.7 常见问题与解决方案

问题 原因 解决方案
torch.cuda.is_available()返回False CUDA版本不匹配或驱动未安装 检查nvidia-smi输出,确认驱动版本;重新安装匹配的PyTorch
ONNX导出时报算子不支持 ONNX版本过新或过旧 回退到ONNX 1.14,或升级PyTorch到2.1+
TensorRT构建engine失败 CUDA库路径未正确设置 检查LD_LIBRARY_PATH是否包含TensorRT的lib目录
AMMO导入报错 依赖的PyTorch版本不兼容 使用PyTorch 2.0-2.2,不要用2.3+

我的习惯:每次装完一个组件,都跑一遍验证脚本。别等全装完了再查问题。那样你根本不知道是哪个环节出的错。

好了,环境搭完了。下一步咱们就可以开始真正的剪枝和量化工作了。记住,环境是基础,基础不牢,地动山摇。花点时间把这一步做扎实,后面会顺很多。