所以我试图从微调的 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 个语言模型预测下一个标记并提取当前句子的特征。