Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一WILLPOWER一
Paddle
提交
5df92262
P
Paddle
项目概览
一WILLPOWER一
/
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
5df92262
编写于
5月 30, 2022
作者:
H
huzhiqiang
提交者:
GitHub
5月 30, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Framework]accelerate inference period (#42400)
上级
8cc40f47
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
41 addition
and
5 deletion
+41
-5
paddle/fluid/framework/operator.cc
paddle/fluid/framework/operator.cc
+37
-5
paddle/fluid/framework/operator.h
paddle/fluid/framework/operator.h
+4
-0
未找到文件。
paddle/fluid/framework/operator.cc
浏览文件 @
5df92262
...
...
@@ -1116,6 +1116,21 @@ class RuntimeInferShapeContext : public InferShapeContext {
const
RuntimeContext
&
ctx_
;
};
struct
OperatorWithKernel
::
CacheImpl
{
explicit
CacheImpl
(
phi
::
KernelContext
*
kernel_ctx
,
RuntimeInferShapeContext
*
infer_shape_ctx
)
:
kernel_ctx_
(
kernel_ctx
),
infer_shape_ctx_
(
infer_shape_ctx
)
{}
phi
::
KernelContext
*
getKernelContext
()
{
return
kernel_ctx_
.
get
();
}
RuntimeInferShapeContext
*
getRuntimeInferShapeContext
()
{
return
infer_shape_ctx_
.
get
();
}
private:
std
::
unique_ptr
<
phi
::
KernelContext
>
kernel_ctx_
;
std
::
unique_ptr
<
RuntimeInferShapeContext
>
infer_shape_ctx_
;
};
static
void
CheckTensorNANOrInf
(
const
std
::
string
&
op_type
,
const
std
::
string
&
name
,
const
framework
::
Tensor
&
tensor
)
{
...
...
@@ -1244,6 +1259,11 @@ void OperatorWithKernel::RunImpl(const Scope& scope,
RuntimeContext
ctx
(
Inputs
(),
Outputs
(),
scope
);
RunImpl
(
scope
,
place
,
&
ctx
);
pre_scope_
=
cur_scope
;
}
else
if
(
run_phi_kernel_
&&
impl_
!=
nullptr
&&
!
need_prepare_data_
&&
!
need_prepare_phi_data_
)
{
if
(
!
all_kernels_must_compute_runtime_shape_
)
this
->
Info
().
infer_shape_
(
impl_
->
getRuntimeInferShapeContext
());
(
*
pt_kernel_
)(
impl_
->
getKernelContext
());
}
else
{
if
(
runtime_ctx_
.
get
()
==
nullptr
||
pre_scope_
!=
cur_scope
)
{
std
::
lock_guard
<
std
::
mutex
>
lock
(
cache_update_mutex_
);
...
...
@@ -1508,12 +1528,22 @@ void OperatorWithKernel::RunImpl(const Scope& scope,
platform
::
TracerEventType
::
OperatorInner
,
1
,
platform
::
EventRole
::
kInnerOp
);
if
(
run_phi_kernel_
)
{
phi
::
KernelContext
pt_kernel_context
;
// Do data transform before building KernelContext
// TODO(zhiqiu): support TransferInplaceVarsBack
PreparePhiData
(
exec_scope
,
*
pt_kernel_
,
*
kernel_signature_
,
runtime_ctx
);
BuildPhiKernelContext
(
*
runtime_ctx
,
dev_ctx
,
&
pt_kernel_context
);
(
*
pt_kernel_
)(
&
pt_kernel_context
);
if
(
enable_cache_runtime_context_
&&
!
need_prepare_phi_data_
&&
!
need_prepare_data_
)
{
impl_
=
new
CacheImpl
(
new
phi
::
KernelContext
(),
new
RuntimeInferShapeContext
(
*
this
,
*
runtime_ctx
));
BuildPhiKernelContext
(
*
runtime_ctx
,
dev_ctx
,
impl_
->
getKernelContext
());
(
*
pt_kernel_
)(
impl_
->
getKernelContext
());
}
else
{
phi
::
KernelContext
pt_kernel_context
;
// Do data transform before building KernelContext
// TODO(zhiqiu): support TransferInplaceVarsBack
BuildPhiKernelContext
(
*
runtime_ctx
,
dev_ctx
,
&
pt_kernel_context
);
(
*
pt_kernel_
)(
&
pt_kernel_context
);
}
}
else
{
(
*
kernel_func_
)(
ExecutionContext
(
*
this
,
exec_scope
,
*
dev_ctx
,
*
runtime_ctx
));
...
...
@@ -2323,6 +2353,8 @@ Scope* OperatorWithKernel::PreparePhiData(
Tensor
out
;
framework
::
TensorCopySync
(
*
tensor_in
,
expected_place
,
&
out
);
SetTensorToVariable
(
*
var
,
out
,
trans_var
);
need_prepare_phi_data_
=
true
;
}
}
...
...
paddle/fluid/framework/operator.h
浏览文件 @
5df92262
...
...
@@ -698,6 +698,7 @@ class OperatorWithKernel : public OperatorBase {
mutable
std
::
unique_ptr
<
RuntimeContext
>
runtime_ctx_
;
mutable
const
Scope
*
pre_scope_
=
nullptr
;
mutable
bool
need_prepare_data_
=
true
;
mutable
bool
need_prepare_phi_data_
=
false
;
mutable
bool
enable_cache_runtime_context_
=
false
;
mutable
bool
all_kernels_must_compute_runtime_shape_
=
false
;
mutable
std
::
mutex
cache_update_mutex_
;
...
...
@@ -710,6 +711,9 @@ class OperatorWithKernel : public OperatorBase {
mutable
std
::
unique_ptr
<
phi
::
KernelSignature
>
kernel_signature_
;
mutable
std
::
unique_ptr
<
phi
::
Kernel
>
pt_kernel_
;
mutable
std
::
unique_ptr
<
phi
::
ArgumentMappingFn
>
arg_map_fn_
;
struct
CacheImpl
;
mutable
CacheImpl
*
impl_
{
nullptr
};
};
extern
bool
OpSupportGPU
(
const
std
::
string
&
op_type
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录