如何为YOLOv8激活MPS?Mac Sonoma训练缓慢问题求助
YOLOv8训练极慢(仅3个epochs耗时数小时),MPS加速无效(Mac Sonoma)
问题详情
在Mac Sonoma系统上使用YOLOv8训练模型,即便仅训练3个epochs,耗时仍长达数小时。已尝试安装PyTorch正式版与Nightly版本,问题未解决。
使用的训练代码:
from ultralytics import YOLO model = YOLO("yolov8n.yaml") # 从零构建模型(后续被预训练模型覆盖) model = YOLO("yolov8n.pt") model.to("mps") results = model.train(data='data/datas.yaml', conf=0.3, epochs=3, device=‘mps’) # 注意此处使用了中文全角单引号
已验证MPS可用性:
torch.backends.mps.is_available() # 返回True
解决方案排查步骤
1. 修复代码语法错误
训练代码中device=‘mps’使用了中文全角单引号,会导致Python解析异常,实际训练可能默认跑在CPU上。先替换为英文半角单引号:
results = model.train(data='data/datas.yaml', conf=0.3, epochs=3, device='mps') # 修改为英文单引号
2. 确认MPS是否真正生效
启动训练后查看终端日志,寻找类似以下的MPS相关输出:
AMP: running Automatic Mixed Precision (AMP) with MPS half precision Model summary: 225 layers, 3157200 parameters, 0 gradients, 8.9 GFLOPs
如果日志中没有MPS标识,或显示device='cpu',说明模型未正确加载到MPS。可在训练前添加验证代码:
print(f"Model device: {model.device}") # 正常应输出 mps:0
3. 优化数据加载速度
Mac上CPU数据加载是常见性能瓶颈,可调整以下参数:
- 开启
persistent_workers=True,保持数据加载进程不销毁:results = model.train(data='data/datas.yaml', conf=0.3, epochs=3, device='mps', persistent_workers=True, workers=4) # 根据CPU核心数调整workers数量,比如4或8 - 调小
batch_size(默认值可能过大,导致MPS显存不足频繁换页):results = model.train(..., batch=8) # 从8开始尝试,根据显存情况调整 - 提前将图片预处理为Tensor格式保存,减少训练时的CPU预处理开销。
4. 检查算子兼容性
部分YOLOv8算子可能未完全适配MPS,导致自动回退到CPU运行。训练时若日志出现UserWarning: MPS: operator xxx not implemented, falling back to CPU这类警告,可尝试:
- 升级至最新版Ultralytics库:
pip install --upgrade ultralytics - 调整MPS显存占比,避免显存溢出:
import torch torch.backends.mps.set_per_process_memory_fraction(0.9)
5. 适配硬件性能限制
如果是旧款Mac(Intel芯片或M1之前的Apple Silicon),MPS计算能力有限,可进一步压缩训练负载:
- 使用更小的输入图片尺寸:
results = model.train(..., imgsz=320) - 确认已使用最小规格的YOLOv8n模型,若仍慢可尝试更轻量化的模型分支。
内容的提问来源于stack exchange,提问作者Bet6797
相关产品推荐
相关产品推荐

