想在bml上部署模型,用一个只有一个2d卷积层的网络测试,发现加上动转静修饰符就报错:
Traceback (most recent call last):
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\IPython\core\interactiveshell.py", line 3437, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 53, in
pred = net(img)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\layers.py", line 902, in __call__
outputs = self.forward(*inputs, **kwargs)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 356, in __call__
raise e
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 333, in __call__
concrete_program, partial_program_layer = self.get_concrete_program(
File "c:\users\admin\appdata\local\programs\python\python39\lib\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 "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 714, in __getitem__
self._caches[item] = self._build_once(item)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 701, in _build_once
concrete_program = ConcreteProgram.from_func_spec(
File "", line 2, in from_func_spec
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\wrapped_decorator.py", line 25, in __impl__
return wrapped_func(*args, **kwargs)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\base.py", line 40, in __impl__
return func(*args, **kwargs)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 623, in from_func_spec
static_func = convert_to_static(dygraph_function)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 140, in convert_to_static
static_func = _FUNCTION_CACHE.convert_with_cache(function)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 77, in convert_with_cache
static_func = self._convert(func)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\paddle\fluid\dygraph\dygraph_to_static\program_translator.py", line 113, in _convert
root = gast.parse(source_code)
File "c:\users\admin\appdata\local\programs\python\python39\lib\site-packages\gast\gast.py", line 298, in parse
return ast_to_gast(_ast.parse(*args, **kwargs))
File "c:\users\admin\appdata\local\programs\python\python39\lib\ast.py", line 50, in parse
return compile(source, filename, mode, flags,
File "", line 1
@paddle.jit.to_static
^
IndentationError: unexpected indent
整个网络就一个2d卷积层
注释掉 @paddle.jit.to_static 就ok,加上就报错
不序列化哪个2d卷积层结果也是一样。之所以用是因为序列里加Linear层就能使用 @paddle.jit.to_static 修饰符。这是怎么回事?
而且奇怪的是在前面加上两个线性层也是可以使用 @paddle.jit.to_static 修饰符的。
去掉前面两个线性层,后面的前向函数,训练的数据形状也相应修改了,但就是用不了动转静修饰符,太奇怪了。。。
paddlecals套件里扒出这种动转静写法是可以的:
这个写法也不行
用了文档上的demo是可以用Conv2D的
最后使用这种方法解决了动转静:
out_dygraph, static_layer = TracedLayer.trace(layer, inputs=[input_tensor])
static_layer.save_inference_model("output/model", feed=[0], fetch=[0])