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

new executor support compiled_program constructed by graph (#45836)

上级 ef53e1b4
...@@ -708,6 +708,11 @@ class _ExecutorCache(object): ...@@ -708,6 +708,11 @@ class _ExecutorCache(object):
# NOTE(Ruibiao): Not all changeable item is considered for key at present, # NOTE(Ruibiao): Not all changeable item is considered for key at present,
# ONLY: program, feed, and fetch_list # ONLY: program, feed, and fetch_list
if isinstance(self.program, compiler.CompiledProgram): if isinstance(self.program, compiler.CompiledProgram):
if not self.program._program:
# The program holds no _program, maybe it is constructed by graph.
# Convert graph to program in order to generate key.
self.program._program = framework.IrGraph(
self.program._graph).to_program()
self.key = hash( self.key = hash(
_get_strong_program_cache_key_for_new_exe( _get_strong_program_cache_key_for_new_exe(
self.program._program, feed, fetch_list)) self.program._program, feed, fetch_list))
...@@ -1125,6 +1130,7 @@ class Executor(object): ...@@ -1125,6 +1130,7 @@ class Executor(object):
warnings.warn( warnings.warn(
"The program holds no _program, maybe it is constructed by graph." "The program holds no _program, maybe it is constructed by graph."
) )
return feed
else: else:
global_block = program.global_block() global_block = program.global_block()
...@@ -1566,13 +1572,7 @@ class Executor(object): ...@@ -1566,13 +1572,7 @@ class Executor(object):
if compiled: if compiled:
compiled_program = program if isinstance( compiled_program = program if isinstance(
program, compiler.CompiledProgram) else program._graph program, compiler.CompiledProgram) else program._graph
# Unsupported case 1 : the CompiledProgram is constructed by Graph # Unsupported case 1: data parallel
if compiled_program._program is None:
warnings.warn("Standalone executor is not used for Graph",
UserWarning)
return False
# Unsupported case 2: data parallel
if compiled_program._is_data_parallel and len( if compiled_program._is_data_parallel and len(
compiled_program._get_places( compiled_program._get_places(
place, compiled_program._places)) != 1: place, compiled_program._places)) != 1:
...@@ -1581,7 +1581,7 @@ class Executor(object): ...@@ -1581,7 +1581,7 @@ class Executor(object):
UserWarning) UserWarning)
return False return False
# Unsupported case 3 : parallel graph # Unsupported case 2: parallel graph
if core.globals()['FLAGS_enable_parallel_graph'] in [ if core.globals()['FLAGS_enable_parallel_graph'] in [
1, '1', True, 'True', 'true' 1, '1', True, 'True', 'true'
]: ]:
...@@ -1590,21 +1590,21 @@ class Executor(object): ...@@ -1590,21 +1590,21 @@ class Executor(object):
UserWarning) UserWarning)
return False return False
# Unsupported case 4: inference # Unsupported case 3: inference
if compiled_program._is_inference: if compiled_program._is_inference:
warnings.warn( warnings.warn(
"Standalone executor is not used for inference", "Standalone executor is not used for inference",
UserWarning) UserWarning)
return False return False
# Unsupported case 5: CUDA Graph # Unsupported case 4: CUDA Graph
if compiled_program._build_strategy is not None and compiled_program._build_strategy.allow_cuda_graph_capture: if compiled_program._build_strategy is not None and compiled_program._build_strategy.allow_cuda_graph_capture:
warnings.warn( warnings.warn(
"Standalone executor is not used for CUDA Graph", "Standalone executor is not used for CUDA Graph",
UserWarning) UserWarning)
return False return False
# Unsupported case 6: async mode # Unsupported case 5: async mode
if compiled_program._build_strategy is not None and compiled_program._build_strategy.async_mode: if compiled_program._build_strategy is not None and compiled_program._build_strategy.async_mode:
warnings.warn( warnings.warn(
"Standalone executor is not used for async mode", "Standalone executor is not used for async mode",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册