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

为何Apple M2 GPU训练的模型性能远逊于CPU训练的模型?

问题原因分析

核心问题:标签类型错误

在GPU训练代码中,你将标签转换为了float类型:

images, labels = images.to(device).float(), labels.to(device).float() 

PyTorch的交叉熵损失(CrossEntropyLoss)默认要求标签为整数类型(torch.long)——因为标签代表类别索引(MNIST是0-9的整数)。将标签转为float后,损失函数无法正确计算类别与预测结果的匹配度,导致反向传播完全失效,权重更新没有实际意义,最终模型学不到任何有效特征,测试准确率只能达到随机猜测的水平(对应MNIST的10个类别,准确率约10%)。

其他需注意的细节(非核心)

  1. 冗余的设备转移:GPU训练时,model_gpu(x)的输出已经在GPU上,无需额外调用.to(device):
    y = model_gpu(x).to(device)  # 此步骤多余,可简化为y = model_gpu(x)
    
  2. 模型设备绑定检查:训练前需确保model_gpu已正确转移到GPU:
    model_gpu = model.to(device)  # 必须执行此步骤才能让模型在GPU上运行
    

修复方案

修改GPU训练代码中的标签转换逻辑,将标签转为long类型:

images = images.to(device).float()
labels = labels.to(device).long()  # 替换原float类型转换

重新训练后,模型准确率应能与CPU训练的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:05:00