第2章:环境搭建与工具链准备
做模型压缩,环境搭不对,后面全白费。这话听起来有点,但我在项目里确实见过太多人卡在第一步——不是CUDA版本对不上,就是ONNX导出报一堆莫名其妙的错。今天咱们就把这套工具链捋顺了。
2.1 Python虚拟环境:隔离是美德
我个人习惯,每个项目都开独立的虚拟环境。你想想看,YOLOv11依赖的PyTorch版本可能跟其他项目冲突,到时候哭都来不及。
我的推荐:用
conda 管理环境,比 venv 省心,尤其处理CUDA依赖时。
# 创建Python 3.10环境
conda create -n yolov11_compress python=3.10 -y
# 激活环境
conda activate yolov11_compress
# 验证Python版本
python --version # 确保输出 3.10.x
为什么选3.10?我在2024年初踩过一个坑——PyTorch 2.x对Python 3.12的支持当时还不稳定,ONNX导出时内存泄漏。3.10是经过验证的稳定版本。
2.2 PyTorch与CUDA:版本匹配是核心
说白了,PyTorch和CUDA的版本就像钥匙和锁,配不上就开不了门。我建议直接用PyTorch官方推荐的组合。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| PyTorch | 2.1.0+cu121 | 支持torch.fx,剪枝必备 |
| CUDA Toolkit | 12.1 | 与PyTorch cu121对应 |
| cuDNN | 8.9.7 | 配合CUDA 12.1 |
| GPU驱动 | ≥535.54 | 支持CUDA 12.x |
我曾经犯过的错:直接
pip install torch 装了CPU版本,训练到一半才发现GPU没干活。一定要指定CUDA版本安装。
# 安装PyTorch 2.1.0 + 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
# 验证GPU可用
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
如果输出 True 和你的显卡型号,恭喜,环境通了。如果输出 False,嗯,检查驱动和CUDA版本吧。
2.3 YOLOv11源码下载:选对分支
YOLOv11目前还在快速迭代,我建议直接从Ultralytics官方仓库拉最新稳定版。
# 克隆仓库
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
# 切到稳定分支(我写稿时是v8.3.0)
git checkout tags/v8.3.0 -b v8.3.0
# 安装ultralytics包(包含YOLOv11)
pip install -e .
为什么用 -e 安装? 这样你修改源码后不用重新安装,剪枝时经常要改模型定义文件,省事。
2.4 依赖库安装:ONNX、OpenVINO、ONNXRuntime
这些库是模型压缩的"翻译官"。ONNX负责把PyTorch模型转成中间格式,OpenVINO做推理优化,ONNXRuntime做验证。
# 安装ONNX相关
pip install onnx==1.16.0 onnxruntime-gpu==1.18.0
# 安装OpenVINO
pip install openvino==2024.1.0 openvino-dev==2024.1.0
# 安装其他辅助库
pip install onnxsim onnxoptimizer protobuf==3.20.3
一个小细节:
protobuf 版本别太高,3.20.x最稳。我试过3.21以上版本,ONNX导出时经常报 DescriptorPool 错误。
2.5 验证工具链:跑一个完整流程
环境搭完别急着走,跑个最小验证,确保所有环节能串起来。
# 1. 导出ONNX模型
yolo export model=yolov11n.pt format=onnx
# 2. 用ONNXRuntime推理验证
python -c "
import onnxruntime as ort
import numpy as np
session = ort.InferenceSession('yolov11n.onnx')
input_name = session.get_inputs()[0].name
output = session.run(None, {input_name: np.random.randn(1,3,640,640).astype(np.float32)})
print('ONNX推理成功,输出shape:', output[0].shape)
"
# 3. 用OpenVINO转换
mo --input_model yolov11n.onnx --output_dir ./openvino_model
# 4. 验证OpenVINO推理
python -c "
from openvino.runtime import Core
core = Core()
model = core.read_model('./openvino_model/yolov11n.xml')
compiled = core.compile_model(model, 'CPU')
print('OpenVINO模型加载成功')
"
如果以上四步都通过,你的工具链就齐活了。我在项目里用这套流程验证过不下20次,基本没出过岔子。
2.6 本章知识体系
下面这张图帮你理清整个环境搭建的逻辑关系:
环境搭建的核心原则:
- 版本匹配:PyTorch、CUDA、cuDNN三位一体,版本号必须对应
- 隔离安装:每个项目独立虚拟环境,避免依赖冲突
- 逐层验证:装一层测一层,别等全装完再找问题