提交 259c0ca9 编写于 作者: M mmglove 提交者: cuicheng01

fix profiler

上级 b795b674
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
import sys import sys
import paddle import paddle
import paddle.profiler as profiler
# A global variable to record the number of calling times for profiler # A global variable to record the number of calling times for profiler
# functions. It is used to specify the tracing range of training steps. # functions. It is used to specify the tracing range of training steps.
...@@ -21,7 +22,7 @@ _profiler_step_id = 0 ...@@ -21,7 +22,7 @@ _profiler_step_id = 0
# A global variable to avoid parsing from string every time. # A global variable to avoid parsing from string every time.
_profiler_options = None _profiler_options = None
_prof = None
class ProfilerOptions(object): class ProfilerOptions(object):
''' '''
...@@ -85,7 +86,6 @@ def add_profiler_step(options_str=None): ...@@ -85,7 +86,6 @@ def add_profiler_step(options_str=None):
Enable the operator-level timing using PaddlePaddle's profiler. Enable the operator-level timing using PaddlePaddle's profiler.
The profiler uses a independent variable to count the profiler steps. The profiler uses a independent variable to count the profiler steps.
One call of this function is treated as a profiler step. One call of this function is treated as a profiler step.
Args: Args:
profiler_options - a string to initialize the ProfilerOptions. profiler_options - a string to initialize the ProfilerOptions.
Default is None, and the profiler is disabled. Default is None, and the profiler is disabled.
...@@ -93,18 +93,32 @@ def add_profiler_step(options_str=None): ...@@ -93,18 +93,32 @@ def add_profiler_step(options_str=None):
if options_str is None: if options_str is None:
return return
global _prof
global _profiler_step_id global _profiler_step_id
global _profiler_options global _profiler_options
if _profiler_options is None: if _profiler_options is None:
_profiler_options = ProfilerOptions(options_str) _profiler_options = ProfilerOptions(options_str)
# profile 3个纬度打印性能数据 https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/performance_improving/profiling_model.html#chakanxingnengshujudetongjibiaodan
if _profiler_step_id == _profiler_options['batch_range'][0]: # timer_only = True 仅展示模型的吞吐量以及时间开销
paddle.utils.profiler.start_profiler( # timer_only = False 调用 summary 能够打印统计表单,通过不同角度的表单呈现性能数据
_profiler_options['state'], _profiler_options['tracer_option']) # timer_only = False 同时产出Timeline 信息在 profiler_log目录下
elif _profiler_step_id == _profiler_options['batch_range'][1]: if _prof is None:
paddle.utils.profiler.stop_profiler(_profiler_options['sorted_key'], _prof = profiler.Profiler(
_profiler_options['profile_path']) scheduler = (_profiler_options['batch_range'][0], _profiler_options['batch_range'][1]),
on_trace_ready = profiler.export_chrome_tracing('./profiler_log'),
timer_only = True)
_prof.start()
else:
_prof.step()
if _profiler_step_id == _profiler_options['batch_range'][1]:
_prof.stop()
_prof.summary(
op_detail=True,
thread_sep=False,
time_unit='ms')
_prof = None
if _profiler_options['exit_on_finished']: if _profiler_options['exit_on_finished']:
sys.exit(0) sys.exit(0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册