You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac训练YOLOv8遇'MPS不支持float64'错误的解决咨询

解决M1 MacBook Pro上YOLOv8 MPS训练的float64类型错误

我来帮你搞定这个问题——你遇到的TypeError是因为MPS(Metal Performance Shaders)框架本身不支持float64(双精度浮点)数据类型,而YOLOv8的检测训练逻辑里有部分张量默认用了float64,导致无法在MPS设备上运行。下面是几个简单可行的解决办法:

方法1:修改YOLOv8的训练代码(快速临时修复)

找到报错的文件路径:/opt/homebrew/lib/python3.10/site-packages/ultralytics/yolo/v8/detect/train.py,定位到__call__方法里的第168行左右(也就是你报错的那一行),在targets.to(self.device)后面加上.float(),强制将张量转换为MPS支持的float32类型:

targets = self.preprocess(targets.to(self.device).float(), batch_size, scale_tensor=imgsz[[1, 0, 1, 0]])

修改后保存文件,重新运行训练命令即可。

方法2:全局设置PyTorch默认数据类型

如果不想修改YOLOv8的源码,可以在训练前强制让PyTorch默认使用float32。你可以创建一个简单的Python启动脚本代替原来的CLI命令:

# train_yolo_mps.py
import torch
# 设置默认数据类型为float32
torch.set_default_dtype(torch.float32)
from ultralytics import YOLO

# 初始化模型并启动训练
model = YOLO('yolov8s.pt')
model.train(
    task='detect',
    data='/Users/aditya_nemiwal/Documents/C++/Python/WiDS_Week3_3/datasets/data.yaml',
    epochs=25,
    device='mps'
)

然后运行这个脚本:

python train_yolo_mps.py

这样所有生成的张量都会默认是float32,避免触发MPS的类型限制。

方法3:检查数据集标注的类型

少数情况下,数据集的标注文件如果用了float64存储坐标,加载后也会导致张量类型不兼容。你可以检查标注文件的格式,确保坐标数据是float32类型,或者在数据加载阶段强制转换类型。

这些方法的核心都是确保所有参与MPS计算的张量都是float32类型——这是MPS框架的硬性要求,只要满足这一点就能正常使用MPS加速训练了。

内容的提问来源于stack exchange,提问作者Aditya Nemiwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:45:29