3. 环境准备:搭建剪枝与调优所需的Python环境
好,咱们正式开始动手。这一章我带你把整个实验环境搭起来。别小看这一步,我在项目里见过太多人因为环境冲突浪费一整天。说白了,环境配好了,后面才能跑得顺。
3.1 环境总览:我们需要什么?
先看看我们要装哪些东西。我习惯把依赖分成三层:核心框架、剪枝工具、辅助库。这样出了问题也好排查。
| 层级 | 依赖库 | 版本建议 | 用途 |
|---|---|---|---|
| 核心框架 | PyTorch | ≥2.0.0 | 模型训练、推理、剪枝操作 |
| 核心框架 | Ultralytics | ≥8.3.0 | YOLOv11模型加载、训练、导出 |
| 剪枝工具 | torch-pruning | ≥1.4.0 | 结构化剪枝核心库 |
| 辅助库 | numpy, opencv-python | 最新稳定版 | 数据处理、图像预处理 |
| 辅助库 | matplotlib, tensorboard | 最新稳定版 | 可视化、日志记录 |
| 辅助库 | onnx, onnxruntime | ≥1.15.0 | 模型导出与推理验证 |
我的习惯: 每个项目单独建一个虚拟环境。别偷懒用base环境,否则后面装包时版本冲突会让你怀疑人生。
3.2 创建虚拟环境
我个人喜欢用conda,管理起来方便。当然你用venv也行,看个人喜好。
# 创建Python 3.10环境
conda create -n yolov11_prune python=3.10 -y
# 激活环境
conda activate yolov11_prune
为什么选3.10?嗯,这里要注意。PyTorch 2.x对3.10支持最好,3.11以上有些底层算子还没完全适配。我在项目中踩过这个坑,当时图新鲜装了3.11,结果torch.compile报了一堆错。
3.3 安装PyTorch
PyTorch的安装要看你的硬件。先确认CUDA版本:
nvidia-smi
看到CUDA Version那一行了吗?比如显示12.1,那就装对应的版本。
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 如果你只有CPU(不推荐,剪枝后的微调会很慢)
# pip install torch torchvision torchaudio
避坑指南: 我曾经遇到过pip自动装了CPU版PyTorch,明明CUDA是好的。原因是没指定--index-url。装完后一定跑一下
import torch; print(torch.cuda.is_available()) 确认。
3.4 安装Ultralytics
Ultralytics现在更新很快,YOLOv11需要8.3.0以上版本。直接装:
pip install ultralytics>=8.3.0
装完验证一下:
python -c "from ultralytics import YOLO; print(YOLO.__version__)"
如果看到版本号,说明装好了。你想想看,这一步要是报错,多半是PyTorch版本不匹配。Ultralytics对PyTorch版本有要求,太老或太新都可能出问题。
3.5 安装剪枝核心库
torch-pruning是我比较常用的结构化剪枝库。它支持对卷积层、BN层做通道剪枝,正好适合YOLO系列。
pip install torch-pruning>=1.4.0
安装后可以跑个简单测试:
python -c "import torch_pruning as tp; print(tp.__version__)"
为什么选torch-pruning? 它原生支持依赖组(Dependency Group)的概念,能自动处理剪枝后层与层之间的通道对齐。我自己试过几个库,这个最省心。
3.6 安装辅助库
剩下的辅助库一起装:
pip install numpy opencv-python matplotlib tensorboard onnx onnxruntime
这里我多说一句。onnx和onnxruntime不是必须的,但建议装上。剪枝后我们通常要导出ONNX做推理加速,提前装好省得后面手忙脚乱。
3.7 环境验证脚本
所有东西装完后,我习惯跑一个完整的验证脚本。确保每个库都能正常导入,版本也对得上。
import torch
import torch_pruning as tp
from ultralytics import YOLO
import numpy as np
import cv2
import onnx
import onnxruntime
print("PyTorch版本:", torch.__version__)
print("CUDA可用:", torch.cuda.is_available())
print("torch-pruning版本:", tp.__version__)
print("Ultralytics版本:", YOLO.__version__)
print("NumPy版本:", np.__version__)
print("OpenCV版本:", cv2.__version__)
print("ONNX版本:", onnx.__version__)
print("ONNX Runtime版本:", onnxruntime.__version__)
# 测试YOLOv11模型加载
model = YOLO("yolo11n.pt")
print("YOLOv11模型加载成功!")
如果所有输出都正常,恭喜你,环境搭好了。
3.8 整体流程一览
我把整个环境搭建的流程画了张图,方便你对照着操作。
3.9 常见问题与解决
环境搭建时可能会遇到几个典型问题,我列出来供你参考。
- CUDA不可用: 检查驱动版本,或者重装对应CUDA版本的PyTorch。我曾经在服务器上折腾了半天,最后发现是LD_LIBRARY_PATH没设对。
- Ultralytics导入报错: 多半是PyTorch版本太旧。升级到2.0以上基本能解决。
- torch-pruning安装失败: 它依赖C++编译,Windows上需要装Visual Studio Build Tools。Linux上一般没问题。
- ONNX导出报错: 检查onnx和onnxruntime版本是否匹配。我建议两个装同一个大版本。
重要提醒: 如果你在Windows上开发,建议用WSL2。原生Windows对PyTorch的CUDA支持偶尔会有玄学问题。我团队里有人用Windows直接跑,剪枝时内存泄漏查了两天,换到WSL2就好了。