From 4839aca28a61fa8aa5fd546e59116690dec43f07 Mon Sep 17 00:00:00 2001 From: xiongkun Date: Wed, 21 Sep 2022 16:04:04 +0800 Subject: [PATCH] fix bug in convert call: tranform the static func. (#46278) --- .../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 b1f99cf491e..9a23a2a3e27 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 func_to_source_code 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 4719e4675b0..4a6e16e09ea 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_MODULE_PREFIX = 'paddle.fluid.dygraph' 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." -- GitLab