wav*_*per 5 python deep-learning torchscript huggingface-transformers
尝试将 t5 模型转换question-generation为torchscript model,同时执行此操作时遇到此错误
ValueError:您必须指定decoder_input_ids或decoder_inputs_embeds
这是我在 colab 上运行的代码。
!pip install -U transformers==3.0.0
!python -m nltk.downloader punkt
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch
model = AutoModelForSeq2SeqLM.from_pretrained('valhalla/t5-base-qg-hl')
t_input = 'Python is a programming language. It is developed by <hl> Guido Van Rossum <hl>. </s>'
tokenizer = AutoTokenizer.from_pretrained('valhalla/t5-base-qg-hl', return_tensors = 'pt')
def _tokenize(
inputs,
padding=True,
truncation=True,
add_special_tokens=True,
max_length=64
):
inputs = tokenizer.batch_encode_plus(
inputs,
max_length=max_length,
add_special_tokens=add_special_tokens,
truncation=truncation,
padding="max_length" if padding else False,
pad_to_max_length=padding,
return_tensors="pt"
)
return inputs
token = _tokenize(t_input, padding=True, truncation=True)
traced_model = torch.jit.trace(model, [token['input_ids'], token['attention_mask']] )
torch.jit.save(traced_model, "traced_t5.pt")
Run Code Online (Sandbox Code Playgroud)
出现这个错误
!pip install -U transformers==3.0.0
!python -m nltk.downloader punkt
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch
model = AutoModelForSeq2SeqLM.from_pretrained('valhalla/t5-base-qg-hl')
t_input = 'Python is a programming language. It is developed by <hl> Guido Van Rossum <hl>. </s>'
tokenizer = AutoTokenizer.from_pretrained('valhalla/t5-base-qg-hl', return_tensors = 'pt')
def _tokenize(
inputs,
padding=True,
truncation=True,
add_special_tokens=True,
max_length=64
):
inputs = tokenizer.batch_encode_plus(
inputs,
max_length=max_length,
add_special_tokens=add_special_tokens,
truncation=truncation,
padding="max_length" if padding else False,
pad_to_max_length=padding,
return_tensors="pt"
)
return inputs
token = _tokenize(t_input, padding=True, truncation=True)
traced_model = torch.jit.trace(model, [token['input_ids'], token['attention_mask']] )
torch.jit.save(traced_model, "traced_t5.pt")
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?或者是否有更好的方法将 t5 模型转换为torchscript.
谢谢。
更新:请参阅此答案,如果您要导出t5到onnxfastT5,可以使用该库轻松完成。
我弄清楚是什么导致了这个问题。由于上述模型是顺序的,因此它同时具有编码器和解码器。我们需要将特征传递到编码器,将标签(目标)传递到解码器。
traced_model = torch.jit.trace(model,
(input_ids, attention_mask, decoder_input_ids, decoder_attention_mask)
)
torch.jit.save(traced_model, "qg_model.pt")
Run Code Online (Sandbox Code Playgroud)
decoder_input_ids问题的标记化 ID(这里的问题是一个标签)。
即使torchscript创建了模型,它也没有generate()像huggingface't5那样的方法。