Я сталкиваюсь с классикой: CUDA не хватает памяти.
Что я хочу сделать: я хочу загрузить одну и ту же модель, используя каждый раз разные матрицы вложений.Я должен сделать это 300 раз, по одному для каждого измерения встраивания слова.
Я не тренирую модель, поэтому я использую model.eval()
, я подумал, что этого будет достаточно, чтобы удержать Pytorch отсоздание графа
Обратите внимание, что я никогда не передаю модель или данные в cuda.Фактически, я хотел отладить код с помощью cpu перед отправкой кода для выполнения графическим процессором.
Цикл, приведенный ниже, выполняется один раз, во второй итерации возникает RuntimeError
.
Я предполагаю, что код загружает новую модель в память GPU на каждой итерации (что, как я не знал, было возможно без явного указания на это).emb_matrix
довольно тяжелый и может вызвать сбой памяти GPU.
emb_dim = 300
acc_dim = torch.zeros((emb_dim, 4))
for d in range(emb_dim):
#create embeddings with one dimension shuffled
emb_matrix = text_f.vocab.vectors.clone()
#get a random permutation across one of the dimensions
rand_index = torch.randperm(text_f.vocab.vectors.shape[0])
emb_matrix[:, d] = text_f.vocab.vectors[rand_index, d]
#load model with the scrumbled embeddings
model = load_classifier(emb_matrix,
encoder_type = encoder_type)
model.eval()
for batch in batch_iters["test"]:
x_pre = batch.premise
x_hyp = batch.hypothesis
y = batch.label
#perform forward pass
y_pred = model.forward(x_pre, x_hyp)
#calculate accuracies
acc_dim[d] += accuracy(y_pred, y)/test_batches
#avoid memory issues
y_pred.detach()
print(f"Dimension {d} accuracies: {acc_dim[d]}")
Я получаю следующую ошибку: RuntimeError: CUDA out of memory. Tried to allocate 146.88 MiB (GPU 0; 2.00 GiB total capacity; 374.63 MiB already allocated; 0 bytes free; 1015.00 KiB cached)
Я попытался передать модель и данные в CPU, но я получаю точно такую же ошибку.
Iосмотрелся, как решить проблему, но не смог найти очевидного решения.Приветствуются любые предложения о том, как загрузить модель и данные в правильном месте или как очистить память графического процессора после каждой итерации.