【发布时间】:2021-11-10 05:44:00
【问题描述】:
我想进一步改进 BERT 的推理时间。 下面是代码:
for sentence in list(data_dict.values()):
tokens = {'input_ids': [], 'attention_mask': []}
new_tokens = tokenizer.encode_plus(sentence, max_length=512,
truncation=True, padding='max_length',
return_tensors='pt',
return_attention_mask=True)
tokens['input_ids'].append(new_tokens['input_ids'][0])
tokens['attention_mask'].append(new_tokens['attention_mask'][0])
# reformat list of tensors into single tensor
tokens['input_ids'] = torch.stack(tokens['input_ids'])
tokens['attention_mask'] = torch.stack(tokens['attention_mask'])
outputs = model(**tokens)
embeddings = outputs[0]
有没有办法提供批次(例如在训练中)而不是整个数据集?
【问题讨论】:
-
如何在训练迭代中准备批次?此外,您是在示例中存储激活(缺少上下文),还是使用
with torch.no_grad()mode?批处理的推理方式与训练方式相同。 -
感谢您的回复!对于培训,我使用的是 Huggingface 的 TrainingArguments 和 Trainer。至于激活,我不存储它们,所以 torch.no_grad()。
-
您是否考虑过量化您的模型以使用具有低精度数据类型的权重。您可以使用精度影响最小的低精度数据类型。
标签: pytorch huggingface-transformers pytorch-dataloader