我正在使用 BERT Squad 模型对一组文档 (>20,000) 提出相同的问题。该模型目前在我的 CPU 上运行,处理一个文档大约需要一分钟 - 这意味着我需要几天时间才能完成该程序。
我想知道是否可以通过在 GPU 上运行模型来加快速度。但是,我是 GPU 新手,我不知道如何将这些输入和模型发送到设备 (Titan xp)。
该代码是从 Chris McChormick 那里借来的。
import torch
import tensorflow as tf
from transformers import BertForQuestionAnswering
from transformers import BertTokenizer
model = BertForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
'question' 和 'answer_text' 分别是问题和上下文字符串。
input_ids = tokenizer.encode(question, answer_text)
# ======== Set Segment IDs ========
# Search the input_ids for the first instance of the `[SEP]` token.
sep_index = input_ids.index(tokenizer.sep_token_id)
if len(input_ids)>512:
input_ids=input_ids[:512]
num_seg_a = sep_index + 1
num_seg_b = len(input_ids) - num_seg_a
# Construct the list of 0s and 1s.
segment_ids = [0]*num_seg_a + [1]*num_seg_b
# There should be a segment_id for every input token.
assert len(segment_ids) == len(input_ids)
# ======== Evaluate ========
# Run our example through the model.
outputs = model(torch.tensor([input_ids]), # The tokens representing our input text.
token_type_ids=torch.tensor([segment_ids]), # The segment IDs to differentiate question from answer_text
return_dict=True)
start_scores = outputs.start_logits
end_scores = outputs.end_logits
我知道我可以使用 model.tocuda() 将模型发送到 GPU。但是如何发送输入、训练模型以及从 GPU 检索输出?