为什么禁用缓存后 BERT 仍然存储缓存?

问题描述 投票:0回答:0

所以我试图从微调的 BERT 模型中提取隐藏状态特征,但每个文本条目都会消耗内存,并且在下次调用后不会释放它。我只能用 24gb 的 ram 内存运行 20-30 个句子。

from transformers import BertTokenizer, BertModel
import numpy as np


data = pd.read_csv('https://docs.google.com/spreadsheets/d/' + 
                   '1cFyUJdpFC3gpQsqjNc4D8ZCxBAMd_Pcpu8SlrsjAv-Q' +
                   '/export?gid=0&format=csv',
                  )
data = data.MESSAGES



# I will be using my own fine tuned model, but with bert-base-uncased i get the same problem
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased",from_tf=True,output_hidden_states=True,use_cache=False)



sentances = data[0:].tolist()
inputs = tokenizer(sentances,return_tensors='pt',padding=True,truncation=True,)
featuresINeed = model(inputs['input_ids'])['pooler_output']

在上面的例子中,我的内存用完了。我尝试将它分成块并使用 torch.cuda.empty_cache() 但它似乎并没有清除所有内存。我尝试使用和不使用 GPU。在我的例子中,我使用了一个大小为 60,000(将来可能更大)的数据集,并使用了 BERT large 的微调模型。我将有一个 24gb 的 gpu 可用。

有什么建议吗?

记住我的主要目标是让 1 个语言模型预测下一个标记并提取当前句子的特征。

caching huggingface-transformers torch bert-language-model transformer-model
© www.soinside.com 2019 - 2024. All rights reserved.