Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
cf3c51a6
P
Paddle
项目概览
机器未来
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
cf3c51a6
编写于
7月 16, 2020
作者:
A
Aurelius84
提交者:
GitHub
7月 16, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Dy2Stat] Remove op call stack in PartialProgram (#25420)
* remove op call stack test=develop * fix typo test=develop
上级
848aca7a
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
28 addition
and
8 deletion
+28
-8
python/paddle/fluid/dygraph/dygraph_to_static/partial_program.py
...paddle/fluid/dygraph/dygraph_to_static/partial_program.py
+28
-8
未找到文件。
python/paddle/fluid/dygraph/dygraph_to_static/partial_program.py
浏览文件 @
cf3c51a6
...
...
@@ -112,14 +112,7 @@ class PartialProgramLayer(layers.Layer):
self
.
_outputs
=
NestSequence
(
outputs
,
need_check
=
True
)
self
.
_params
=
parameters
if
parameters
is
not
None
else
[]
# Check all params from main program can be found in self._params:
# 1. parameter in self._params should be type `framework.ParamBase` which are created in dygraph.
# 2. parameter from transformed program shall be found in self._params.
# Because they share same data with ParamBase of original dygraph.
self
.
_check_params_all_inited
(
main_program
)
self
.
_prune_unused_params
(
main_program
)
self
.
_infer_program
=
main_program
self
.
_infer_program
=
self
.
_verify_program
(
main_program
)
self
.
_train_program
=
self
.
_append_backward_desc
()
# Switch infer or train by train() and eval()
self
.
_trace_program
=
None
...
...
@@ -128,6 +121,20 @@ class PartialProgramLayer(layers.Layer):
# Set default mode to train
self
.
train
()
def
_verify_program
(
self
,
main_program
):
"""
Verify that the program parameter is initialized, prune some unused params,
and remove redundant op callstack.
"""
# 1. Check all params from main program can be found in self._params
self
.
_check_params_all_inited
(
main_program
)
# 2. Prune the parameters not used anywhere in the program.
self
.
_prune_unused_params
(
main_program
)
# 3. Remove op's python call stack with redundant low-level error messages.
main_program
=
self
.
_remove_op_call_stack
(
main_program
)
return
main_program
@
switch_to_static_graph
def
_append_backward_desc
(
self
):
program
=
self
.
_infer_program
.
clone
()
...
...
@@ -295,6 +302,19 @@ class PartialProgramLayer(layers.Layer):
continue
param
.
_set_grad_type
(
grad_var
.
type
())
def
_remove_op_call_stack
(
self
,
main_program
):
"""
Remove op's python call stack with redundant low-level error messages related to
transforamtions to avoid confusing users.
"""
assert
isinstance
(
main_program
,
framework
.
Program
)
for
block
in
main_program
.
blocks
:
for
op
in
block
.
ops
:
if
op
.
has_attr
(
"op_callstack"
):
op
.
_remove_attr
(
"op_callstack"
)
return
main_program
def
_check_params_all_inited
(
self
,
main_program
):
"""
Check all params from main program are already initialized, see details as follows:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录