Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleOCR
提交
cdf6d1fb
P
PaddleOCR
项目概览
PaddlePaddle
/
PaddleOCR
大约 1 年 前同步成功
通知
1528
Star
32962
Fork
6643
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
108
列表
看板
标记
里程碑
合并请求
7
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleOCR
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
108
Issue
108
列表
看板
标记
里程碑
合并请求
7
合并请求
7
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
cdf6d1fb
编写于
6月 08, 2023
作者:
G
gmm
提交者:
GitHub
6月 08, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix profile (#10121)
上级
69494485
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
49 addition
and
24 deletion
+49
-24
ppocr/utils/profiler.py
ppocr/utils/profiler.py
+29
-11
test_tipc/benchmark_train.sh
test_tipc/benchmark_train.sh
+20
-13
未找到文件。
ppocr/utils/profiler.py
浏览文件 @
cdf6d1fb
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
# limitations under the License.
# limitations under the License.
import
sys
import
sys
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 +21,7 @@ _profiler_step_id = 0
...
@@ -21,7 +21,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
):
'''
'''
...
@@ -31,6 +31,7 @@ class ProfilerOptions(object):
...
@@ -31,6 +31,7 @@ class ProfilerOptions(object):
"profile_path=model.profile"
"profile_path=model.profile"
"batch_range=[50, 60]; profile_path=model.profile"
"batch_range=[50, 60]; profile_path=model.profile"
"batch_range=[50, 60]; tracer_option=OpDetail; profile_path=model.profile"
"batch_range=[50, 60]; tracer_option=OpDetail; profile_path=model.profile"
ProfilerOptions supports following key-value pair:
ProfilerOptions supports following key-value pair:
batch_range - a integer list, e.g. [100, 110].
batch_range - a integer list, e.g. [100, 110].
state - a string, the optional values are 'CPU', 'GPU' or 'All'.
state - a string, the optional values are 'CPU', 'GPU' or 'All'.
...
@@ -52,7 +53,8 @@ class ProfilerOptions(object):
...
@@ -52,7 +53,8 @@ class ProfilerOptions(object):
'sorted_key'
:
'total'
,
'sorted_key'
:
'total'
,
'tracer_option'
:
'Default'
,
'tracer_option'
:
'Default'
,
'profile_path'
:
'/tmp/profile'
,
'profile_path'
:
'/tmp/profile'
,
'exit_on_finished'
:
True
'exit_on_finished'
:
True
,
'timer_only'
:
True
}
}
self
.
_parse_from_string
(
options_str
)
self
.
_parse_from_string
(
options_str
)
...
@@ -71,6 +73,8 @@ class ProfilerOptions(object):
...
@@ -71,6 +73,8 @@ class ProfilerOptions(object):
'state'
,
'sorted_key'
,
'tracer_option'
,
'profile_path'
'state'
,
'sorted_key'
,
'tracer_option'
,
'profile_path'
]:
]:
self
.
_options
[
key
]
=
value
self
.
_options
[
key
]
=
value
elif
key
==
'timer_only'
:
self
.
_options
[
key
]
=
value
def
__getitem__
(
self
,
name
):
def
__getitem__
(
self
,
name
):
if
self
.
_options
.
get
(
name
,
None
)
is
None
:
if
self
.
_options
.
get
(
name
,
None
)
is
None
:
...
@@ -84,7 +88,6 @@ def add_profiler_step(options_str=None):
...
@@ -84,7 +88,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.
...
@@ -92,18 +95,33 @@ def add_profiler_step(options_str=None):
...
@@ -92,18 +95,33 @@ 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 : 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 only the model's throughput and time overhead are displayed
paddle
.
utils
.
profiler
.
start_profiler
(
# timer_only = False calling summary can print a statistical form that presents performance data from different perspectives.
_profiler_options
[
'state'
],
_profiler_options
[
'tracer_option'
])
# timer_only = False the output Timeline information can be found in the profiler_log directory
elif
_profiler_step_id
==
_profiler_options
[
'batch_range'
][
1
]:
if
_prof
is
None
:
paddle
.
utils
.
profiler
.
stop_profiler
(
_profiler_options
[
'sorted_key'
],
_timer_only
=
str
(
_profiler_options
[
'timer_only'
])
==
str
(
True
)
_profiler_options
[
'profile_path'
])
_prof
=
profiler
.
Profiler
(
scheduler
=
(
_profiler_options
[
'batch_range'
][
0
],
_profiler_options
[
'batch_range'
][
1
]),
on_trace_ready
=
profiler
.
export_chrome_tracing
(
'./profiler_log'
),
timer_only
=
_timer_only
)
_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
)
...
...
test_tipc/benchmark_train.sh
浏览文件 @
cdf6d1fb
...
@@ -130,7 +130,8 @@ repo_name=$(get_repo_name )
...
@@ -130,7 +130,8 @@ repo_name=$(get_repo_name )
SAVE_LOG
=
${
BENCHMARK_LOG_DIR
:-
$(
pwd
)
}
# */benchmark_log
SAVE_LOG
=
${
BENCHMARK_LOG_DIR
:-
$(
pwd
)
}
# */benchmark_log
mkdir
-p
"
${
SAVE_LOG
}
/benchmark_log/"
mkdir
-p
"
${
SAVE_LOG
}
/benchmark_log/"
status_log
=
"
${
SAVE_LOG
}
/benchmark_log/results.log"
status_log
=
"
${
SAVE_LOG
}
/benchmark_log/results.log"
# get benchmark profiling params : PROFILING_TIMER_ONLY=no|True|False
PROFILING_TIMER_ONLY
=
${
PROFILING_TIMER_ONLY
:-
"True"
}
# The number of lines in which train params can be replaced.
# The number of lines in which train params can be replaced.
line_python
=
3
line_python
=
3
line_gpuid
=
4
line_gpuid
=
4
...
@@ -199,19 +200,25 @@ for batch_size in ${batch_size_list[*]}; do
...
@@ -199,19 +200,25 @@ for batch_size in ${batch_size_list[*]}; do
gpu_id
=
$(
set_gpu_id
$device_num
)
gpu_id
=
$(
set_gpu_id
$device_num
)
if
[
${#
gpu_id
}
-le
1
]
;
then
if
[
${#
gpu_id
}
-le
1
]
;
then
log_path
=
"
$SAVE_LOG
/profiling_log"
mkdir
-p
$log_path
log_name
=
"
${
repo_name
}
_
${
model_name
}
_bs
${
batch_size
}
_
${
precision
}
_
${
run_mode
}
_
${
device_num
}
_
${
to_static
}
profiling"
func_sed_params
"
$FILENAME
"
"
${
line_gpuid
}
"
"0"
# sed used gpu_id
func_sed_params
"
$FILENAME
"
"
${
line_gpuid
}
"
"0"
# sed used gpu_id
# set profile_option params
if
[[
${
PROFILING_TIMER_ONLY
}
!=
"no"
]]
;
then
tmp
=
`
sed
-i
"
${
line_profile
}
s/.*/
${
profile_option
}
/"
"
${
FILENAME
}
"
`
echo
"run profile"
# The default value of profile_option's timer_only parameter is True
# run test_train_inference_python.sh
if
[[
${
PROFILING_TIMER_ONLY
}
=
"False"
]]
;
then
cmd
=
"bash test_tipc/test_train_inference_python.sh
${
FILENAME
}
benchmark_train >
${
log_path
}
/
${
log_name
}
2>&1 "
profile_option
=
"
${
profile_option
}
;timer_only=False"
echo
$cmd
fi
eval
$cmd
log_path
=
"
$SAVE_LOG
/profiling_log"
eval
"cat
${
log_path
}
/
${
log_name
}
"
mkdir
-p
$log_path
log_name
=
"
${
repo_name
}
_
${
model_name
}
_bs
${
batch_size
}
_
${
precision
}
_
${
run_mode
}
_
${
device_num
}
_
${
to_static
}
profiling"
# set profile_option params
tmp
=
`
sed
-i
"
${
line_profile
}
s/.*/
\"
${
profile_option
}
\"
/"
"
${
FILENAME
}
"
`
# run test_train_inference_python.sh
cmd
=
"timeout 5m bash test_tipc/test_train_inference_python.sh
${
FILENAME
}
benchmark_train >
${
log_path
}
/
${
log_name
}
2>&1 "
echo
$cmd
eval
${
cmd
}
eval
"cat
${
log_path
}
/
${
log_name
}
"
fi
echo
"run without profile"
# without profile
# without profile
log_path
=
"
$SAVE_LOG
/train_log"
log_path
=
"
$SAVE_LOG
/train_log"
speed_log_path
=
"
$SAVE_LOG
/index"
speed_log_path
=
"
$SAVE_LOG
/index"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录