Ошибка CUDA из памяти при попытке реализовать тройную потерю

Я пытаюсь реализовать тройную потерю для слоя NetVLAD, используя 3 разных изображения из моего загрузчика данных следующим образом:

  • а - партия с минимальной прибавкой
  • p — та же партия с большим количеством дополнений
  • n — другая партия из одного и того же загрузчика данных

Однако когда я пытаюсь получить внедрения VLAD из моей модели, я получаю ошибку нехватки памяти после вычисления первого внедрения VLAD. Есть ли более эффективный способ запустить этот код?

РЕДАКТИРОВАТЬ: Возможно, лучший способ загрузить другую партию, которая мне нужна для негативов?

      for i, (inputs, poses) in enumerate(train_loader):

    inputs = inputs.to(device)
    # poses = poses.to(device)

    print(inputs.shape)  # anchors
    positives = positive_tfs(inputs)
    positives = positives.to(device)
    print(positives.shape)
    negatives, _ = next(iter(train_loader))  # different random batch thanks to shuffle=True
    negatives = negatives.to(device)
    print(negatives.shape)

    # Zero the parameter gradient
    optimizer.zero_grad()

    # FORWARD
    a_vlad, pos_out, ori_out = model(inputs)
    print(a_vlad.shape)
    p_vlad = model(positives, get_pose=False)
    print(p_vlad.shape)
    n_vlad = model(negatives, get_pose=False)
    print(n_vlad.shape)

    # COMPUTE LOSS
    loss = triplet_loss(a_vlad, p_vlad, n_vlad)
    print(loss)

1 ответ

Лучшее, что вы можете сделать, это попытаться очистить кеш. Это часто освобождает место и решает проблему. Добавьте это в начало вашего кода.

      import torch
torch.cuda.empty_cache()

Если это не помогло, попробуйте уменьшить размер пакета или модели.

Если нет, то, к сожалению, вы ничего не сможете сделать, если на вашем графическом процессоре недостаточно памяти...

Вы можете посмотреть здесь: Как избежать «CUDA нехватки памяти» в PyTorch.

Другие вопросы по тегам