Графические процессоры CUDA недоступны

#python #deep-learning #pytorch

Вопрос:

я получаю эту ошибку от метода во время процесса обучения модели. я использую google colab для запуска кода. в Google colab нет графического процессора. Есть ли у них какой-либо другой способ, которым я могу запустить код, не требуя процессора cuda.

Как я могу исправить эту ошибку ?

 def train_model(model, train_loader, val_loader, epoch, loss_function, optimizer, path, early_stop):    # GPU  #device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")  device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # device = torch.device("cpu")  device = torch.device("cuda")  model = model.to(device)     patience, eval_loss = 0, 0    # train  for i in range(epoch):  total_loss, count = 0, 0  y_pred = list()  y_true = list()  for idx, (x, y) in tqdm(enumerate(train_loader), total=len(train_loader)):  x, y = x.to(device), y.to(device)   u, m = model(x)  predict = torch.sigmoid(torch.sum(u*m, 1))  y_pred.extend(predict.cpu().detach().numpy())  y_true.extend(y.cpu().detach().numpy())  loss = loss_function(predict, y.float())  optimizer.zero_grad()  loss.backward()  optimizer.step()  total_loss  = float(loss)  count  = 1    train_auc = roc_auc_score(np.array(y_true), np.array(y_pred))  torch.save(model, path.format(i 1))  print("Epoch %d train loss is %.3f and train auc is %.3f" % (i 1, total_loss / count, train_auc))    # verify  total_eval_loss = 0  model.eval()  count_eval = 0  val_y_pred = list()  val_true = list()  for idx, (x, y) in tqdm(enumerate(val_loader), total=len(val_loader)):  x, y = x.to(device), y.to(device)  u, m = model(x)  predict = torch.sigmoid(torch.sum(u*m, 1))  val_y_pred.extend(predict.cpu().detach().numpy())  val_true.extend(y.cpu().detach().numpy())  loss = loss_function(predict, y.float())  total_eval_loss  = float(loss)  count_eval  = 1  val_auc = roc_auc_score(np.array(y_true), np.array(y_pred))  print("Epoch %d val loss is %.3fand train auc is %.3f" % (i 1, total_eval_loss / count_eval, val_auc))     

Ответ №1:

Просто удалите строку, в которой вы ее создаете torch.device() , и удалите все .to(device) функции, в которых вы ее используете. Тогда вам также не нужно также писать .cpu().detach() . Вы можете просто писать predict.numpy() как таковой. Когда вы пишете device = torch.device("cuda") , вы создаете устройство с графическим процессором, а затем переносите свою модель и данные на устройство с графическим процессором, когда оно недоступно. В этом и заключается причина ошибки.

Комментарии:

1. но если я удалю device = torch.device("cuda") его, это повлияет на ` x, y = x.to(устройство), y.to(устройство)` строка в коде.

2. Вы можете удалить эти строки кода. Эти строки просто переносят ваши x и y с процессора на графический процессор. Вы даже можете удалить строку model = model.to(device) .

3. Большое спасибо. я действительно внес эти изменения, и это работает.

4. Пожалуйста. Затем вы можете отметить мой ответ как принятый. Спасибо!