From 980292c2039b53649611c10bd7dccb635ef9a07c Mon Sep 17 00:00:00 2001 From: xiongkun Date: Fri, 23 Sep 2022 15:44:53 +0800 Subject: [PATCH] fix bug in convert call: tranform the static func. (#46278) (#46365) --- .../fluid/dygraph/dygraph_to_static/program_translator.py | 5 ++++- python/paddle/fluid/dygraph/dygraph_to_static/utils.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/python/paddle/fluid/dygraph/dygraph_to_static/program_translator.py b/python/paddle/fluid/dygraph/dygraph_to_static/program_translator.py index 2a098947413f9..fbaa4b9f0ef52 100644 --- a/python/paddle/fluid/dygraph/dygraph_to_static/program_translator.py +++ b/python/paddle/fluid/dygraph/dygraph_to_static/program_translator.py @@ -42,7 +42,7 @@ from paddle.fluid.dygraph.dygraph_to_static.utils import input_specs_compatible from paddle.fluid.dygraph.dygraph_to_static.utils import type_name from paddle.fluid.dygraph.dygraph_to_static.utils import unwrap -from paddle.fluid.dygraph.dygraph_to_static.utils import make_hashable +from paddle.fluid.dygraph.dygraph_to_static.utils import make_hashable, ALREADY_D2S from paddle.fluid.dygraph.dygraph_to_static.function_spec import FunctionSpec, _hash_spec_names from paddle.fluid.dygraph.dygraph_to_static.function_spec import get_buffers, get_parameters from paddle.fluid.wrapped_decorator import signature_safe_contextmanager @@ -136,8 +136,11 @@ def convert_to_static(function): Args: function(callable): The function with dygraph layers that will be converted into static layers. """ + if getattr(function, ALREADY_D2S, None): + return function with _CACHE_LOCK: static_func = _FUNCTION_CACHE.convert_with_cache(function) + setattr(static_func, ALREADY_D2S, True) return static_func diff --git a/python/paddle/fluid/dygraph/dygraph_to_static/utils.py b/python/paddle/fluid/dygraph/dygraph_to_static/utils.py index a8b372c28ce4b..acd4b3552aba5 100644 --- a/python/paddle/fluid/dygraph/dygraph_to_static/utils.py +++ b/python/paddle/fluid/dygraph/dygraph_to_static/utils.py @@ -44,6 +44,7 @@ DYGRAPH_TO_STATIC_MODULE_PREFIX = 'paddle.fluid.dygraph.dygraph_to_static' GET_ARGS_FUNC_PREFIX = 'get_args' SET_ARGS_FUNC_PREFIX = 'set_args' +ALREADY_D2S = '__already_d2s' ARGS_NAME = '__args' # NOTE(liym27): Please use `getattr(ast_node, ORIGI_INFO)` instead of . operation to get the original information of ast node. ORIGI_INFO = "Original information of source code for ast node."