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")
| 归档时间: |
|
| 查看次数: |
12477 次 |
| 最近记录: |