未验证 提交 eb4531f1 编写于 作者: P pangyoki 提交者: GitHub

new executor support program even if program._graph is CompiledProgram (#45296)

* new executor support program._graph

* fix program._program if program is Program()
上级 aecffe26
...@@ -1461,7 +1461,9 @@ class Executor(object): ...@@ -1461,7 +1461,9 @@ class Executor(object):
return use_standalone_executor_for_compiled_program return use_standalone_executor_for_compiled_program
else: else:
if isinstance(program._graph, compiler.CompiledProgram): if isinstance(
program._graph, compiler.CompiledProgram
) and not use_standalone_executor_for_compiled_program:
warnings.warn("Standalone executor is not used for Graph", warnings.warn("Standalone executor is not used for Graph",
UserWarning) UserWarning)
return False return False
...@@ -1510,14 +1512,20 @@ class Executor(object): ...@@ -1510,14 +1512,20 @@ class Executor(object):
# while use program to geet _StandaloneExecutor # while use program to geet _StandaloneExecutor
if key not in self._executor_cache._cached_executors: if key not in self._executor_cache._cached_executors:
# To apply IR pass, compile the Program to IrGraph and convert it back to Program # To apply IR pass, compile the Program to IrGraph and convert it back to Program
if isinstance(program, compiler.CompiledProgram): if isinstance(program,
build_strategy = program._build_strategy compiler.CompiledProgram) or isinstance(
program._graph, compiler.CompiledProgram):
compiled_program = program if isinstance(
program,
compiler.CompiledProgram) else program._graph
build_strategy = compiled_program._build_strategy
# print(f"Program before convert:\n {inner_program}", flush=True) # print(f"Program before convert:\n {inner_program}", flush=True)
program._compile(scope, self.place) compiled_program._compile(scope, self.place)
ir_graph = framework.IrGraph(program._graph) ir_graph = framework.IrGraph(compiled_program._graph)
inner_program = ir_graph.to_program() converted_program = ir_graph.to_program()
if hasattr(program._program, 'lr_sheduler'): if hasattr(inner_program, 'lr_sheduler'):
inner_program.lr_sheduler = program._program.lr_sheduler converted_program.lr_sheduler = inner_program.lr_sheduler
inner_program = converted_program
# print(f"Program after convert:\n {inner_program}", flush=True) # print(f"Program after convert:\n {inner_program}", flush=True)
logging.warning( logging.warning(
"FLAGS_USE_STANDALONE_EXECUTOR and FLAGS_CONVERT_GRAPH_TO_PROGRAM is set to 1. Graph will be converted to Program and executed using new executor." "FLAGS_USE_STANDALONE_EXECUTOR and FLAGS_CONVERT_GRAPH_TO_PROGRAM is set to 1. Graph will be converted to Program and executed using new executor."
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册