Как избежать «CUDA вне памяти» в PyTorch - PullRequest
0 голосов
/ 01 декабря 2019

Я думаю, что это довольно распространенное сообщение для пользователей PyTorch с низким объемом памяти GPU:

RuntimeError: CUDA out of memory. Tried to allocate ? MiB (GPU ?; ? GiB total capacity; ? GiB already allocated; ? MiB free; ? cached)

Я хочу исследовать алгоритмы обнаружения объектов для моей курсовой работы. А для многих архитектур глубокого обучения требуется большой объем памяти GPU, поэтому моя машина не может обучать эти модели. Я попытался обработать изображение, загрузив каждый слой в графический процессор и затем загрузив его обратно:

for m in self.children():
   m.cuda()
   X = m(X)
   m.cpu()
   torch.cuda.empty_cache()

Но, похоже, это не очень эффективно. Мне интересно, есть ли какие-нибудь советы и рекомендации для обучения больших моделей глубокого обучения, используя мало памяти GPU. Заранее спасибо!

Редактировать: Я новичок в углубленном изучении. Прошу прощения, если это глупый вопрос :)

1 Ответ

0 голосов
/ 01 декабря 2019

Отправляйте партии в CUDA итеративно и создавайте пакеты небольших размеров. Не отправляйте все свои данные в CUDA сразу. Вместо этого сделайте это следующим образом:

for e in range(epochs):
    for images, labels in train_loader:   
        if torch.cuda.is_available():
            images, labels = images.cuda(), labels.cuda()   
        # blablabla  

Вы также можете использовать dtypes, которые используют меньше памяти. Например, torch.float16 или torch.half.

...