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

PyTorch在Apple Silicon上DataLoader的CPU与MPS结果不一致问题

PyTorch MPS后端DataLoader返回重复标签问题

问题描述

在Apple Silicon Mac上使用PyTorch的DataLoader时,切换到MPS后端后出现标签解析异常:CPU后端下张量y能被正确读取,但MPS后端返回的batch_labels长度正常,所有元素却与y的首个元素值完全相同。

复现代码

import torch
from torch.utils.data import TensorDataset, random_split, DataLoader


device = torch.device("mps") 
X = torch.tensor([[[0.5,0.4], [0,0]],[[0.3,0.2], [0,0]],[[0.5,0.2], [0,0]],[[0.2,0.2], [0,0]]], dtype=torch.float32).to(device)
y = torch.tensor([1,0,0,0], dtype=torch.float32).to(device)

print(X.shape)
print(y.shape)
print(y)
dataset = TensorDataset(X, y)
train_size = int(0.5 * len(dataset))
test_size = len(dataset) - train_size
train_dataset, test_dataset = random_split(dataset, [train_size, test_size])
train_loader = DataLoader(train_dataset, batch_size=10, shuffle=True)

for i, (batch_data, batch_labels) in enumerate(train_loader):
    print(batch_data)
    print(batch_labels)
    break

MPS后端下的异常输出

torch.Size([4, 2, 2])
torch.Size([4])
tensor([1., 0., 1., 0.], device='mps:0')
tensor([[[0.5000, 0.2000],
         [0.0000, 0.0000]],

        [[0.5000, 0.4000],
         [0.0000, 0.0000]]], device='mps:0')
tensor([1., 1.], device='mps:0')

问题说明

该问题是PyTorch针对MPS后端实现的已知bug,与MPS算子覆盖跟踪逻辑相关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:37:34