Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何转换HuggingFace';s Seq2seq型号为onnx格式_Python_Tensorflow_Pytorch_Huggingface Transformers_Onnx - Fatal编程技术网

Python 如何转换HuggingFace';s Seq2seq型号为onnx格式

Python 如何转换HuggingFace';s Seq2seq型号为onnx格式,python,tensorflow,pytorch,huggingface-transformers,onnx,Python,Tensorflow,Pytorch,Huggingface Transformers,Onnx,我正在尝试将HuggingFace变形金刚模型中的Pegasus新闻编辑室转换为ONNX格式。我遵循《拥抱之脸》出版的指南。安装prereqs后,我运行了以下代码: !rm -rf onnx/ from pathlib import Path from transformers.convert_graph_to_onnx import convert convert(framework="pt", model="google/pegasus-newsroom&qu

我正在尝试将HuggingFace变形金刚模型中的Pegasus新闻编辑室转换为ONNX格式。我遵循《拥抱之脸》出版的指南。安装prereqs后,我运行了以下代码:

!rm -rf onnx/
from pathlib import Path
from transformers.convert_graph_to_onnx import convert

convert(framework="pt", model="google/pegasus-newsroom", output=Path("onnx/google/pegasus-newsroom.onnx"), opset=11)

得到了这些错误:

ValueError                                Traceback (most recent call last)
<ipython-input-9-3b37ed1ceda5> in <module>()
      3 from transformers.convert_graph_to_onnx import convert
      4 
----> 5 convert(framework="pt", model="google/pegasus-newsroom", output=Path("onnx/google/pegasus-newsroom.onnx"), opset=11)
      6 
      7 

6 frames
/usr/local/lib/python3.6/dist-packages/transformers/models/pegasus/modeling_pegasus.py in forward(self, input_ids, attention_mask, encoder_hidden_states, encoder_attention_mask, head_mask, encoder_head_mask, past_key_values, inputs_embeds, use_cache, output_attentions, output_hidden_states, return_dict)
    938             input_shape = inputs_embeds.size()[:-1]
    939         else:
--> 940             raise ValueError("You have to specify either decoder_input_ids or decoder_inputs_embeds")
    941 
    942         # past_key_values_length

ValueError: You have to specify either decoder_input_ids or decoder_inputs_embeds

ValueError回溯(最近一次调用)
在()
3从transformers.convert\u图形\u到\u onnx导入转换
4.
---->5 convert(framework=“pt”,model=“google/pegasus newsroom”,output=Path(“onnx/google/pegasus newsroom.onnx”),opset=11)
6.
7.
6帧
/usr/local/lib/python3.6/dist-packages/transformers/models/pegasus/modeling\u pegasus.py in forward(self、输入ID、注意掩码、编码器隐藏状态、编码器注意掩码、头部掩码、编码器头部掩码、过去的密钥值、输入嵌入、使用缓存、输出注意、输出隐藏状态、返回dict)
938 input_shape=inputs_嵌入.size()[:-1]
939其他:
-->940 raise VALUERROR(“您必须指定解码器\u输入\u ID或解码器\u输入\u嵌入”)
941
942#过去_键_值_长度
ValueError:必须指定解码器\u输入\u ID或解码器\u输入\u嵌入
我以前从未见过这种错误。有什么想法吗?

Pegasus是一个模型,您不能使用此方法直接转换
seq2seq
模型(编码器-解码器模型)。这是针对BERT的,它是一种编码器模型。使用此方法可以转换任何仅编码器或仅解码器变压器模型

要转换
seq2seq
型号(编码器-解码器),您必须将其拆分并分别转换,编码器转换为onnx,解码器转换为onnx。您可以遵循(T5也是
seq2seq
model)

为什么会出现此错误?

转换时

您需要向编码器和解码器提供一个虚拟变量。默认情况下,使用此方法进行转换时,它向编码器提供虚拟变量。由于此转换方法不接受此seq2seq模型的解码器,因此它不会向解码器提供虚拟变量,您将得到上述错误。
ValueError:您必须指定解码器\u输入\u ID或解码器\u输入\u嵌入

_ = torch.onnx._export(
                        model,
                        dummy_input,
                        ...
                       )