将GPT2转换为ONNX和TF.js后,TF SavedModel具有固定的输入大小

2024-05-19 19:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

GPT-2的输入最多可以是1024个令牌,但是当我将拥抱面GPT-2模型导出为TFSavedModel时,如下所示:

pip install transformers
from transformers import TFGPT2LMHeadModel
model = TFGPT2LMHeadModel.from_pretrained('gpt2')
model.save("./gpt2_tf_saved_model", save_format="tf")

然后我将其转换为ONNX模型,如下所示:

pip install -U tf2onnx
python -m tf2onnx.convert --saved-model ./gpt2_tf_saved_model --output ./gpt2.onnx

然后我发现(当用netron.app可视化它时)结果模型有一个5个标记的固定输入大小。但是,批处理大小为-1/unk,因此转换器在创建变量输入形状方面似乎没有问题,但出于某种原因,它已将令牌上下文长度固定为5

我还尝试转换为TensorFlow.js:

pip install tensorflowjs
tensorflowjs_converter --input_format tf_saved_model ./gpt2_tf_saved_model ./gpt2_tfjs_model

我得到了同样的结果。我还尝试更改ONNX转换的opset版本,但这没有帮助。我无法使SavedModel.pb文件的可视化在Netron中正常工作,因此我不确定SavedModel本身、转换过程或我的新手对整个过程的理解是否有问题


Tags: installpipfrom模型formatmodelsavetf