M1 Mac 上的 PyTorch:运行时错误:尚未在 MPS 设备上分配占位符存储

Col*_*ell 18 gpu pytorch apple-m1

我正在我的 M1 Mac 上使用 PyTorch 1.13.0 训练模型(我也在每晚构建 torch-1.14.0.dev20221207 上尝试过此操作,但无济于事),并希望使用 MPS 硬件加速。我的项目中有以下相关代码,用于将模型和输入张量发送到 MPS:

device = torch.device("mps" if torch.backends.mps.is_available() else "cpu") # This always results in MPS

model.to(device)
Run Code Online (Sandbox Code Playgroud)

...在我的数据集子类中:

class MyDataset(Dataset):
    def __init__(self, df, window_size):
        self.df = df
        self.window_size = window_size
        self.data = []
        self.labels = []
        for i in range(len(df) - window_size):
            x = torch.tensor(df.iloc[i:i+window_size].values, dtype=torch.float, device=device)
            y = torch.tensor(df.iloc[i+window_size].values, dtype=torch.float, device=device)
            self.data.append(x)
            self.labels.append(y)
    def __len__(self):
        return len(self.data)
    def __getitem__(self, idx):
        return self.data[idx], self.labels[idx]
Run Code Online (Sandbox Code Playgroud)

这会在我的第一个训练步骤中产生以下回溯:

Traceback (most recent call last):
  File "lstm_model.py", line 263, in <module>
    train_losses, val_losses = train_model(model, criterion, optimizer, train_loader, val_loader, epochs=100)
  File "lstm_model.py", line 212, in train_model
    train_loss += train_step(model, criterion, optimizer, x, y)
  File "lstm_model.py", line 191, in train_step
    y_pred = model(x)
  File "miniconda3/envs/pytenv/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "lstm_model.py", line 182, in forward
    out, _ = self.lstm(x, (h0, c0))
  File "miniconda3/envs/pytenv/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "miniconda3/envs/pytenv/lib/python3.10/site-packages/torch/nn/modules/rnn.py", line 774, in forward
    result = _VF.lstm(input, hx, self._flat_weights, self.bias, self.num_layers,
RuntimeError: Placeholder storage has not been allocated on MPS device!
Run Code Online (Sandbox Code Playgroud)

我尝试在没有指定设备的情况下在数据集子类中创建张量,然后调用.to(device)它们:

x = torch.tensor(df.iloc[i:i+window_size].values, dtype=torch.float)
x = x.to(device)
y = torch.tensor(df.iloc[i+window_size].values, dtype=torch.float)
y = y.to(device)
Run Code Online (Sandbox Code Playgroud)

我还尝试在没有数据集子类中指定的设备的情况下创建张量,并将张量发送到模型的方法和函数device中。forwardtrain_step

我该如何解决我的错误?

小智 -1

尝试更改此代码device = torch.device("mps" if torch.backends.mps.is_available() else "cpu") # 这总是导致 MPS为 device = torch.device("mps")