Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
机器未来
Paddle
提交
0bbaf9bd
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看板
未验证
提交
0bbaf9bd
编写于
9月 24, 2021
作者:
B
baoachun
提交者:
GitHub
9月 24, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add emb_eltwise_layernorm trt converter test case (#36027)
上级
fcaa64b3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
260 addition
and
0 deletion
+260
-0
python/paddle/fluid/tests/unittests/ir/inference/test_trt_convert_emb_eltwise_layernorm.py
...ts/ir/inference/test_trt_convert_emb_eltwise_layernorm.py
+260
-0
未找到文件。
python/paddle/fluid/tests/unittests/ir/inference/test_trt_convert_emb_eltwise_layernorm.py
0 → 100644
浏览文件 @
0bbaf9bd
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
trt_layer_auto_scan_test
import
TrtLayerAutoScanTest
,
SkipReasons
from
program_config
import
TensorConfig
,
ProgramConfig
import
numpy
as
np
import
paddle.inference
as
paddle_infer
from
functools
import
partial
from
typing
import
Optional
,
List
,
Callable
,
Dict
,
Any
,
Set
class
TrtConvertEmbEltwiseLayernormTest1
(
TrtLayerAutoScanTest
):
def
is_program_valid
(
self
,
program_config
:
ProgramConfig
)
->
bool
:
return
True
def
sample_program_configs
(
self
):
def
generate_input
(
batch
,
input_size
):
return
np
.
random
.
randint
(
0
,
7
,
size
=
(
batch
,
input_size
,
1
)).
astype
(
np
.
int64
)
def
generate_weight1
(
size11
,
size2
):
return
np
.
random
.
randn
(
size11
,
size2
).
astype
(
np
.
float32
)
def
generate_weight2
(
size12
,
size2
):
return
np
.
random
.
randn
(
size12
,
size2
).
astype
(
np
.
float32
)
def
generate_weight3
(
size13
,
size2
):
return
np
.
random
.
randn
(
size13
,
size2
).
astype
(
np
.
float32
)
def
generate_weight4
(
size2
):
return
np
.
random
.
randn
(
size2
).
astype
(
np
.
float32
)
for
input_size
in
[
16
,
128
]:
for
batch
in
[
1
,
2
,
4
]:
for
size1
in
[[
8
,
513
,
768
],
[
513
,
768
,
8
],
[
768
,
8
,
513
]]:
size11
=
size1
[
0
]
size12
=
size1
[
1
]
size13
=
size1
[
2
]
for
size2
in
[
32
,
768
]:
for
norm_axis
in
[
2
]:
for
epsilon
in
[
0.0001
,
0.0005
]:
for
axis1
in
[
0
,
-
1
]:
for
axis2
in
[
0
,
-
1
]:
for
type
in
[
"lookup_table"
,
"lookup_table_v2"
]:
dics
=
[{
"is_sparse"
:
False
,
"is_distributed"
:
False
,
"padding_idx"
:
-
1
,
"is_test"
:
True
},
{
"is_sparse"
:
False
,
"is_distributed"
:
False
,
"padding_idx"
:
-
1
,
},
{
"axis"
:
axis1
},
{
"axis"
:
axis2
},
{
"begin_norm_axis"
:
norm_axis
,
"epsilon"
:
epsilon
}]
ops_config
=
[{
"op_type"
:
type
,
"op_inputs"
:
{
"Ids"
:
[
"input_data1"
],
"W"
:
[
"embedding1_weight"
]
},
"op_outputs"
:
{
"Out"
:
[
"embedding1_output"
]
},
"op_attrs"
:
dics
[
0
]
if
type
==
"lookup_table"
else
dics
[
1
]
},
{
"op_type"
:
type
,
"op_inputs"
:
{
"Ids"
:
[
"input_data2"
],
"W"
:
[
"embedding2_weight"
]
},
"op_outputs"
:
{
"Out"
:
[
"embedding2_output"
]
},
"op_attrs"
:
dics
[
0
]
if
type
==
"lookup_table"
else
dics
[
1
]
},
{
"op_type"
:
type
,
"op_inputs"
:
{
"Ids"
:
[
"input_data3"
],
"W"
:
[
"embedding3_weight"
]
},
"op_outputs"
:
{
"Out"
:
[
"embedding3_output"
]
},
"op_attrs"
:
dics
[
0
]
if
type
==
"lookup_table"
else
dics
[
1
]
},
{
"op_type"
:
"elementwise_add"
,
"op_inputs"
:
{
"X"
:
[
"embedding2_output"
],
"Y"
:
[
"embedding3_output"
]
},
"op_outputs"
:
{
"Out"
:
[
"elementwise_add1_output"
]
},
"op_attrs"
:
dics
[
2
]
},
{
"op_type"
:
"elementwise_add"
,
"op_inputs"
:
{
"X"
:
[
"elementwise_add1_output"
],
"Y"
:
[
"embedding1_output"
]
},
"op_outputs"
:
{
"Out"
:
[
"elementwise_add2_output"
]
},
"op_attrs"
:
dics
[
3
]
},
{
"op_type"
:
"layer_norm"
,
"op_inputs"
:
{
"X"
:
[
"elementwise_add2_output"
],
"Bias"
:
[
"layer_norm_bias"
],
"Scale"
:
[
"layer_norm_scale"
]
},
"op_outputs"
:
{
"Y"
:
[
"layer_norm_output1"
],
"Mean"
:
[
"layer_norm_output2"
],
"Variance"
:
[
"layer_norm_output3"
]
},
"op_attrs"
:
dics
[
4
]
}]
ops
=
self
.
generate_op_config
(
ops_config
)
program_config
=
ProgramConfig
(
ops
=
ops
,
weights
=
{
"embedding1_weight"
:
TensorConfig
(
data_gen
=
partial
(
generate_weight1
,
size11
,
size2
)),
"embedding2_weight"
:
TensorConfig
(
data_gen
=
partial
(
generate_weight2
,
size12
,
size2
)),
"embedding3_weight"
:
TensorConfig
(
data_gen
=
partial
(
generate_weight3
,
size13
,
size2
)),
"layer_norm_bias"
:
TensorConfig
(
data_gen
=
partial
(
generate_weight4
,
size2
)),
"layer_norm_scale"
:
TensorConfig
(
data_gen
=
partial
(
generate_weight4
,
size2
))
},
inputs
=
{
"input_data1"
:
TensorConfig
(
data_gen
=
partial
(
generate_input
,
batch
,
input_size
)),
"input_data2"
:
TensorConfig
(
data_gen
=
partial
(
generate_input
,
batch
,
input_size
)),
"input_data3"
:
TensorConfig
(
data_gen
=
partial
(
generate_input
,
batch
,
input_size
))
},
outputs
=
[
"layer_norm_output1"
])
yield
program_config
def
sample_predictor_configs
(
self
,
program_config
)
->
(
paddle_infer
.
Config
,
List
[
int
],
float
):
def
generate_dynamic_shape
(
attrs
):
self
.
dynamic_shape
.
min_input_shape
=
{
"input_data1"
:
[
1
,
4
,
1
],
"input_data2"
:
[
1
,
4
,
1
],
"input_data3"
:
[
1
,
4
,
1
]
}
self
.
dynamic_shape
.
max_input_shape
=
{
"input_data1"
:
[
4
,
512
,
1
],
"input_data2"
:
[
4
,
512
,
1
],
"input_data3"
:
[
4
,
512
,
1
]
}
self
.
dynamic_shape
.
opt_input_shape
=
{
"input_data1"
:
[
2
,
128
,
1
],
"input_data2"
:
[
2
,
128
,
1
],
"input_data3"
:
[
2
,
128
,
1
]
}
def
clear_dynamic_shape
():
self
.
dynamic_shape
.
max_input_shape
=
{}
self
.
dynamic_shape
.
min_input_shape
=
{}
self
.
dynamic_shape
.
opt_input_shape
=
{}
attrs
=
[
program_config
.
ops
[
i
].
attrs
for
i
in
range
(
len
(
program_config
.
ops
))
]
# for static_shape
clear_dynamic_shape
()
self
.
trt_param
.
precision
=
paddle_infer
.
PrecisionType
.
Float32
yield
self
.
create_inference_config
(),
(
0
,
5
),
1e-5
self
.
trt_param
.
precision
=
paddle_infer
.
PrecisionType
.
Half
yield
self
.
create_inference_config
(),
(
0
,
5
),
1e-5
# for dynamic_shape
generate_dynamic_shape
(
attrs
)
self
.
trt_param
.
precision
=
paddle_infer
.
PrecisionType
.
Float32
yield
self
.
create_inference_config
(),
(
1
,
4
),
1e-5
self
.
trt_param
.
precision
=
paddle_infer
.
PrecisionType
.
Half
yield
self
.
create_inference_config
(),
(
1
,
4
),
1e-5
def
test
(
self
):
self
.
run_test
()
if
__name__
==
"__main__"
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录