第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是三条腿,基准测试是检验标准。缺一个,整个流程就瘸了。
最后提醒:环境搭好后,建议把 pip freeze 的结果保存下来。我每次项目都留一个 requirements.txt,方便复现。别嫌麻烦,后面剪枝量化时,版本回滚能救命。