Как я могу уменьшить использование выделенной памяти GPU и использовать общую память GPU для CUDA и Pytorch

#python #memory #pytorch #gpu

#python #память #pytorch #графический процессор

Вопрос:

Я получаю следующую ошибку, когда пытаюсь использовать одну из моделей huggingface для сентиментального анализа:

 RuntimeError: CUDA out of memory. Tried to allocate 72.00 MiB (GPU 0; 3.00 GiB total capacity; 1.84 GiB already allocated; 5.45 MiB free; 2.04 GiB reserved in total by PyTorch)
 

Хотя я не использую память CUDA, она все еще остается на том же уровне. введите описание изображения здесь

Я пытался использовать torch.cuda.empty_cache() , однако это не повлияло на проблему. Когда я закрыл записную книжку jupyter, она уменьшилась до 0. Так что я вполне уверен, что это что-то связанное с pytorch и python.

Вот мой код:

 import joblib
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification,pipeline
import torch.nn.functional as F
from torch.utils.data import DataLoader
import pandas as pd
import numpy as np
from tqdm import tqdm

tokenizer = AutoTokenizer.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
model = AutoModelForSequenceClassification.from_pretrained("savasy/bert-base-turkish-sentiment-cased")

sa= pipeline("sentiment-analysis", tokenizer=tokenizer, model=model,device=0)
batcher = DataLoader(dataset=comments,
                      batch_size=100,
                      shuffle=True,
                      pin_memory=True)
predictions= []
for batch in tqdm(batcher):
     p = sa(batch)
     predictions.append(p)
 

У меня GTX 1060, python 3.8 и torch == 1.7.1, а моя ОС — Windows 10.
И количество комментариев составляет 187 тыс. Я хотел бы знать, есть ли какие-либо способы решения этой проблемы с памятью. Возможно, каким-то образом хранить тензоры на CPU и использовать пакет только на GPU. После использования и получения этой ошибки использование памяти все еще продолжается. Когда я закрываю свой блокнот jupyter, он исчезает. Есть ли какой — нибудь способ , которым я могу очистить это воспоминание? Есть ли какой-нибудь способ использовать общую память графического процессора?

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

1. Размер вашего пакета слишком велик для вашего GPU и трансформатора, такого как BERT. Попробуйте использовать batch_size 8 и перейти оттуда, если сможете. Кроме того, длина последовательности токенов играет важную роль в использовании памяти.

2. Вы также можете попробовать использовать pytorch automatic mixed precision library. Ваш графический процессор не имеет тензорных ядер, поэтому он не будет быстрее, но будет использовать меньше памяти. Ссылка