变形金刚:如何使用 CUDA 进行推理?
Transformers: How to use CUDA for inferencing?
我已经用 GPU 微调了我的模型,但推理过程非常慢,我认为这是因为推理默认使用 CPU。这是我的推理代码:
txt = "This was nice place"
model = transformers.BertForSequenceClassification.from_pretrained(model_path, num_labels=24)
tokenizer = transformers.BertTokenizer.from_pretrained('TurkuNLP/bert-base-finnish-cased-v1')
encoding = tokenizer.encode_plus(txt, add_special_tokens = True, truncation = True, padding = "max_length", return_attention_mask = True, return_tensors = "pt")
output = model(**encoding)
output = output.logits.softmax(dim=-1).detach().cpu().flatten().numpy().tolist()
这是我的第二个推理代码,它使用管道(针对不同的模型):
classifier = transformers.pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
result = classifier(txt)
如何强制 transformers 库在 GPU 上进行更快的推理?我尝试添加 model.to(torch.device("cuda"))
但会引发错误:
Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu
我想这个问题与没有发送到 GPU 的数据有关。这里有一个类似的问题:
我如何使用和不使用管道将数据发送到 GPU?非常感谢任何建议。
在执行推理之前,您还应该将输入传输到 CUDA:
device = torch.device('cuda')
# transfer model
model.to(device)
# define input and transfer to device
encoding = tokenizer.encode_plus(txt,
add_special_tokens=True,
truncation=True,
padding="max_length",
return_attention_mask=True,
return_tensors="pt")
encoding = encoding.to(device)
# inference
output = model(**encoding)
请注意 nn.Module.to
is in-place, while torch.Tensor.to
不是(它会复制!)。
我已经用 GPU 微调了我的模型,但推理过程非常慢,我认为这是因为推理默认使用 CPU。这是我的推理代码:
txt = "This was nice place"
model = transformers.BertForSequenceClassification.from_pretrained(model_path, num_labels=24)
tokenizer = transformers.BertTokenizer.from_pretrained('TurkuNLP/bert-base-finnish-cased-v1')
encoding = tokenizer.encode_plus(txt, add_special_tokens = True, truncation = True, padding = "max_length", return_attention_mask = True, return_tensors = "pt")
output = model(**encoding)
output = output.logits.softmax(dim=-1).detach().cpu().flatten().numpy().tolist()
这是我的第二个推理代码,它使用管道(针对不同的模型):
classifier = transformers.pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
result = classifier(txt)
如何强制 transformers 库在 GPU 上进行更快的推理?我尝试添加 model.to(torch.device("cuda"))
但会引发错误:
Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu
我想这个问题与没有发送到 GPU 的数据有关。这里有一个类似的问题:
我如何使用和不使用管道将数据发送到 GPU?非常感谢任何建议。
在执行推理之前,您还应该将输入传输到 CUDA:
device = torch.device('cuda')
# transfer model
model.to(device)
# define input and transfer to device
encoding = tokenizer.encode_plus(txt,
add_special_tokens=True,
truncation=True,
padding="max_length",
return_attention_mask=True,
return_tensors="pt")
encoding = encoding.to(device)
# inference
output = model(**encoding)
请注意 nn.Module.to
is in-place, while torch.Tensor.to
不是(它会复制!)。