多GPU-Usag的Pytorch-convering LSTM模型到数据并行

2024-09-09 13:12:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要转换我的现有模型使用DataParallel运行多个GPU的,我已经阅读了多年的文件,不能得到我的头周围我需要改变什么,所以我需要一些帮助,谢谢!你知道吗

class LSTM(nn.Module):
def __init__(self, input_size=1, hidden_layer_size=100, output_size=1):
    super().__init__()
    self.hidden_layer_size = hidden_layer_size

    self.lstm = nn.LSTM(input_size, hidden_layer_size)

    self.linear = nn.Linear(hidden_layer_size, output_size)

    self.hidden_cell = (torch.zeros(1,1,self.hidden_layer_size),
                        torch.zeros(1,1,self.hidden_layer_size))

def forward(self, input_seq):
    lstm_out, self.hidden_cell = self.lstm(input_seq.view(len(input_seq) ,1, -1), self.hidden_cell)
    predictions = self.linear(lstm_out.view(len(input_seq), -1))
    return predictions[-1]


model = LSTM()
loss_function = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.00001)

epochs = 1


 for i in range(epochs):
  count=0
  for seq, labels in train_inout_seq:
    optimizer.zero_grad()
    model.hidden_cell = (torch.zeros(1, 1, model.hidden_layer_size),
                    torch.zeros(1, 1, model.hidden_layer_size))
    y_pred = model(seq)

    single_loss = loss_function(y_pred, labels)
    single_loss.backward()
    optimizer.step()

print("Epoch: %d, loss: %1.5f" % (i, single_loss.item()))

model.eval()

 testPredictions=[]
 realValues=[]
 for seq, labels in test_input_seq:

  with torch.no_grad():
    model.hidden = (torch.zeros(1, 1, model.hidden_layer_size),
                    torch.zeros(1, 1, model.hidden_layer_size))
    testPredictions.append(model(seq).item())
    print(model(seq).item())
    realValues.append(labels)

Tags: selflayerinputsizelabelsmodelzeroscell