ERNIE转静态图模型导出inference model时,出现错误
导出代码如下
model = ErnieModelForTokenClassification.from_pretrained(
"./model/pretrain",
num_labels=44,
name='',
has_pooler=False)
x_spec = InputSpec(shape=[None, 15], dtype='int64', name='src_ids') # 动态 shape
y_spec = InputSpec(shape=[None, 15], dtype='int64', name='sent_ids')
model = P.jit.to_static(model, input_spec=[x_spec, y_spec])
path = "./model/inference_model/ner"
P.jit.save(model, path)
倘若to_static里面参数为空,to_static(model, input_spec=[]),将报错TypeError: forward() missing 1 required positional argument: 'src_ids'
倘若改为to_static(model, input_spec=[x_spec, y_spec]),将报错ValueError: The decorated function `forward` requires 0 arguments: [], but received 2 with (InputSpec(shape=(-1, 15), dtype=paddle.int64, name=None), InputSpec(shape=(-1, 15), dtype=paddle.int64, name=None)).
所以,有没有参数都有错,我觉得这是个bug
如果改用别的方式导出inference model,则batchsize的维度没法设置为None
所用的项目地址是:https://github.com/PaddlePaddle/ERNIE/,动态图实现的ERNIE
下面是设置两个参数的详细报错信息:
Traceback (most recent call last):
File "predict.py", line 19, in
P.jit.save(layer, path)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
return func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py", line 726, in save
inner_input_spec)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 491, in concrete_program_specify_input_spec
*desired_input_spec)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 392, in get_concrete_program
kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/function_spec.py", line 82, in unified_args_and_kwargs
raise ValueError(error_msg)
ValueError: The decorated function `forward` requires 0 arguments: [], but received 2 with (InputSpec(shape=(-1, 15), dtype=paddle.int64, name=None), InputSpec(shape=(-1, 15), dtype=paddle.int64, name=None)).
下面是设置0个参数的详细报错信息:
Traceback (most recent call last):
File "predict.py", line 22, in
P.jit.save(model, path)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
return func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/jit.py", line 726, in save
inner_input_spec)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 491, in concrete_program_specify_input_spec
*desired_input_spec)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 401, in get_concrete_program
concrete_program, partial_program_layer = self._program_cache[cache_key]
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 714, in __getitem__
self._caches[item] = self._build_once(item)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 705, in _build_once
class_instance=cache_key.class_instance)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
return func(*args, **kwargs)
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 661, in from_func_spec
error_data.raise_new_exception()
File "/usr/local/python3.7.0/lib/python3.7/site-packages/paddle/fluid/dygraph/dygraph_to_static/error.py", line 192, in raise_new_exception
six.exec_("raise new_exception from None")
File "", line 1, in
TypeError: In transformed code:
File "/usr/local/python3.7.0/lib/python3.7/site-packages/ernie/modeling_ernie.py", line 565, in forward (* user code *)
self).forward(*args, **kwargs)
TypeError: forward() missing 1 required positional argument: 'src_ids'