第3章:环境搭建与基础工具链

说实话,做模型优化这行,环境搭不好,后面全是坑。我见过太多同学在剪枝量化上花了大把时间,结果一跑推理,发现是环境版本没对齐——那种感觉,就像你修了半天车,结果发现油箱盖没拧紧。

这一章,咱们就把地基打牢。我会带你一步步配好PyTorch、Ultralytics、ONNX和TensorRT。嗯,都是干货。

3.1 PyTorch环境配置

PyTorch是整个流程的基石。我个人习惯用conda来管理环境,干净、隔离、好回滚。

核心原则:PyTorch版本必须与CUDA驱动匹配。别小看这个,我踩过坑——有一次配了PyTorch 2.0但CUDA是11.7,结果训练时显存直接爆了,查了半天才发现是底层算子不兼容。

推荐配置清单:

组件 推荐版本 说明
Python 3.10 - 3.12 太老不支持新算子,太新有些库没适配
PyTorch 2.1.0 或 2.2.0 稳定,对ONNX导出友好
CUDA 11.8 或 12.1 看显卡驱动,用 nvidia-smi 查
cuDNN 8.9+ 加速卷积运算,别用太旧

安装命令很简单:

# 创建环境
conda create -n yolov11 python=3.10 -y
conda activate yolov11

# 安装PyTorch(以CUDA 12.1为例)
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121

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

小技巧:装完后跑一下 torch.cuda.get_device_name(0),确认显卡型号。我习惯把这个写进脚本开头,省得后面跑半天才发现用的CPU。

3.2 Ultralytics库安装

Ultralytics是YOLOv11的官方库。说白了,它把训练、验证、导出都封装好了。但注意,版本很重要。

安装方式:

pip install ultralytics==8.2.0  # 推荐这个版本,剪枝量化兼容性好

装完后,跑个快速验证:

yolo predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg'

如果能看到检测结果,说明环境通了。你想想看,这一步要是卡住,后面剪枝量化根本没法搞。

避坑指南:我曾经遇到过 ultralytics 和 torch 版本冲突,导致训练时loss直接变成NaN。解决办法很简单——先装PyTorch,再装Ultralytics,顺序别搞反。

3.3 ONNX与TensorRT环境

ONNX是模型交换的中间格式,TensorRT是NVIDIA的推理加速引擎。这两兄弟,一个负责转格式,一个负责榨干显卡性能。

安装步骤:

# ONNX
pip install onnx==1.15.0 onnxruntime-gpu==1.17.0

# TensorRT(建议用deb或tar包安装,pip版功能不全)
# 下载地址:https://developer.nvidia.com/tensorrt
# 以TensorRT 8.6.1为例
pip install tensorrt==8.6.1

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

为什么推荐deb包?因为pip版的TensorRT有时候缺一些自定义算子,导出时会报错。我踩过这个坑,折腾了两天才发现是安装方式的问题。

关键路径:PyTorch模型 → ONNX → TensorRT引擎。每一步都有坑,但环境配好了,后面就顺了。

3.4 模型验证与基准测试

环境搭完,得跑个基准测试。说白了,就是看看你的机器能跑多快,模型精度对不对。

我一般用这个脚本做快速验证:

from ultralytics import YOLO
import time

# 加载模型
model = YOLO('yolo11n.pt')

# 预热(防止第一次推理慢)
model('https://ultralytics.com/images/bus.jpg')

# 正式测试
start = time.time()
for _ in range(100):
    model('https://ultralytics.com/images/bus.jpg')
end = time.time()

print(f"平均推理时间: {(end-start)/100*1000:.2f} ms")
print(f"FPS: {100/(end-start):.2f}")

基准测试指标:

指标 说明 参考值(RTX 4090)
推理时间 单张图片处理耗时 2-5 ms
FPS 每秒处理帧数 200-500
显存占用 推理时显存峰值 1-2 GB
mAP@0.5 COCO验证集精度 0.65-0.70

个人经验:基准测试一定要跑100次以上取平均。单次推理受系统调度影响很大,波动能到30%。我习惯把结果存成CSV,方便后面剪枝量化后对比。

为什么会这样?因为GPU有冷启动和频率调整。跑几次后,显卡温度上来,频率稳定了,数据才可信。

3.5 本章知识体系

下面这张图,把整个环境搭建的逻辑串起来了。你一看就明白:

环境搭建与工具链知识体系 PyTorch 基础环境 Ultralytics 库 ONNX 中间格式 TensorRT 推理引擎 模型验证与基准测试 关键路径 PyTorch 训练 → ONNX 导出 → TensorRT 优化 → 基准测试 每一步都要验证,别跳步,跳了后面找bug找到哭

这张图你看懂了吗?PyTorch是根,Ultralytics、ONNX、TensorRT是三条腿,基准测试是检验标准。缺一个,整个流程就瘸了。

最后提醒:环境搭好后,建议把 pip freeze 的结果保存下来。我每次项目都留一个 requirements.txt,方便复现。别嫌麻烦,后面剪枝量化时,版本回滚能救命。