Сбой вызова backward () на GPU, но не на CPU - pytorch - PullRequest
0 голосов
/ 29 апреля 2020

Windows 10

Python 3.7

факел 1.5.0 + cu92

У меня относительно простой CNN, который работает на моем процессоре, но не на моем GPU. Используя процессор, он очень хорошо работает, но слишком медленно. Когда я устанавливаю для ключевого слова "gpu" значение true, обучение продолжается до вызова backward (), приостанавливается на секунду, затем завершается без предупреждения или ошибки.

Я установил несколько CPU / GPU реализации, которые работали ранее, так что я на 99% это не проблема окружающей среды.

Внутренний l oop (пакетное обучение) выглядит следующим образом:

    seq = seq.to(device=self.device)
    labels = labels.to(device=self.device)

    self.optimizer.zero_grad()
    y_pred = self.model(seq)

    # Send to device
    y_pred.to(device=self.device)

    single_loss = self.loss_function(y_pred.to(self.device), labels.to(self.device))
    single_loss.backward() # <-- step that fails on GPU ONLY
    self.optimizer.step()

Моя модель / оптимизатор / функция настройки потерь следующие:

    # Subclasses nn.Module
    self.model = NetLinear(self.num_features, self.tw, **kwargs)

    if gpu:
        if not torch.cuda.is_available():
            raise ValueError('No GPU')
        self.device = torch.device('cuda:0')
        print('Running on GPU')
    else:
        self.device = torch.device('cpu')

    # Send model to appropriate device
    self.model.to(self.device)

    # Setup loss function and optimizer
    self.loss_function = nn.MSELoss()
    self.optimizer = torch.optim.Adam(self.model.parameters(), lr=lr)
...