未验证 提交 34bd18ff 编写于 作者: B baoachun 提交者: GitHub

add skip case in trt converter ut (#36287)

* add skip case in trt converter ut

* disable group_norm trt plugin
上级 5690666c
...@@ -48,9 +48,11 @@ struct SimpleOpTypeSetTeller : public Teller { ...@@ -48,9 +48,11 @@ struct SimpleOpTypeSetTeller : public Teller {
int8_teller_set.insert("skip_layernorm"); int8_teller_set.insert("skip_layernorm");
int8_teller_set.insert("slice"); int8_teller_set.insert("slice");
#endif #endif
#if IS_TRT_VERSION_GE(7130) // TODO(baoachun) The group_norm trt plugin will check input's dim
teller_set.insert("group_norm"); // not -1 failed when dynamic shape mode.
#endif // #if IS_TRT_VERSION_GE(7130)
// teller_set.insert("group_norm");
// #endif
#if IS_TRT_VERSION_GE(7000) #if IS_TRT_VERSION_GE(7000)
teller_set.insert("tile"); teller_set.insert("tile");
#endif #endif
......
...@@ -65,12 +65,6 @@ nvinfer1::Dims ElementWisePlugin::getOutputDimensions( ...@@ -65,12 +65,6 @@ nvinfer1::Dims ElementWisePlugin::getOutputDimensions(
} }
int ElementWisePlugin::initialize() TRT_NOEXCEPT { int ElementWisePlugin::initialize() TRT_NOEXCEPT {
PADDLE_ENFORCE_GT(dims_y_.nbDims, 0,
platform::errors::InvalidArgument(
"The dimension of input Y of TRT elementwise op plugin "
"should be greater than 0, but got %d.",
dims_y_.nbDims));
axis_ = (axis_ == -1) ? dims_x_.nbDims - dims_y_.nbDims : axis_; axis_ = (axis_ == -1) ? dims_x_.nbDims - dims_y_.nbDims : axis_;
int trimed_nb_dims = dims_y_.nbDims; int trimed_nb_dims = dims_y_.nbDims;
for (; trimed_nb_dims > 0; --trimed_nb_dims) { for (; trimed_nb_dims > 0; --trimed_nb_dims) {
......
...@@ -32,8 +32,8 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest): ...@@ -32,8 +32,8 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest):
return np.random.randn(32).astype(np.float32) return np.random.randn(32).astype(np.float32)
for batch in [1, 2, 4]: for batch in [1, 2, 4]:
for shape in [[32], [batch, 32], [batch, 64, 32], for shape in [[32], [batch, 32], [batch, 32, 32],
[batch, 8, 16, 32]]: [batch, 32, 16, 32]]:
for op_type in ["elementwise_add", "elementwise_mul"]: for op_type in ["elementwise_add", "elementwise_mul"]:
for axis in [len(shape) - 1, -1]: for axis in [len(shape) - 1, -1]:
self.dims = len(shape) self.dims = len(shape)
...@@ -68,26 +68,27 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest): ...@@ -68,26 +68,27 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest):
def sample_predictor_configs( def sample_predictor_configs(
self, program_config) -> (paddle_infer.Config, List[int], float): self, program_config) -> (paddle_infer.Config, List[int], float):
def generate_dynamic_shape(attrs): def generate_dynamic_shape(attrs):
# The input.dims[1] must be equal to the weight's length.
if self.dims == 1: if self.dims == 1:
self.dynamic_shape.min_input_shape = {"input_data": [4]} self.dynamic_shape.min_input_shape = {"input_data": [4]}
self.dynamic_shape.max_input_shape = {"input_data": [256]} self.dynamic_shape.max_input_shape = {"input_data": [256]}
self.dynamic_shape.opt_input_shape = {"input_data": [16]} self.dynamic_shape.opt_input_shape = {"input_data": [16]}
elif self.dims == 2: elif self.dims == 2:
self.dynamic_shape.min_input_shape = {"input_data": [1, 4]} self.dynamic_shape.min_input_shape = {"input_data": [1, 32]}
self.dynamic_shape.max_input_shape = {"input_data": [4, 256]} self.dynamic_shape.max_input_shape = {"input_data": [4, 32]}
self.dynamic_shape.opt_input_shape = {"input_data": [2, 16]} self.dynamic_shape.opt_input_shape = {"input_data": [2, 32]}
elif self.dims == 3: elif self.dims == 3:
self.dynamic_shape.min_input_shape = {"input_data": [1, 4, 4]} self.dynamic_shape.min_input_shape = {"input_data": [1, 32, 4]}
self.dynamic_shape.max_input_shape = { self.dynamic_shape.max_input_shape = {
"input_data": [4, 256, 256] "input_data": [4, 32, 256]
} }
self.dynamic_shape.opt_input_shape = {"input_data": [2, 32, 16]} self.dynamic_shape.opt_input_shape = {"input_data": [2, 32, 16]}
elif self.dims == 4: elif self.dims == 4:
self.dynamic_shape.min_input_shape = { self.dynamic_shape.min_input_shape = {
"input_data": [1, 4, 4, 4] "input_data": [1, 32, 4, 4]
} }
self.dynamic_shape.max_input_shape = { self.dynamic_shape.max_input_shape = {
"input_data": [4, 256, 128, 256] "input_data": [4, 32, 128, 256]
} }
self.dynamic_shape.opt_input_shape = { self.dynamic_shape.opt_input_shape = {
"input_data": [2, 32, 32, 16] "input_data": [2, 32, 32, 16]
...@@ -98,6 +99,11 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest): ...@@ -98,6 +99,11 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest):
self.dynamic_shape.min_input_shape = {} self.dynamic_shape.min_input_shape = {}
self.dynamic_shape.opt_input_shape = {} self.dynamic_shape.opt_input_shape = {}
def generate_trt_nodes_num(attrs, dynamic_shape):
if self.dims == 1:
return 0, 3
return 1, 2
attrs = [ attrs = [
program_config.ops[i].attrs program_config.ops[i].attrs
for i in range(len(program_config.ops)) for i in range(len(program_config.ops))
...@@ -106,18 +112,52 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest): ...@@ -106,18 +112,52 @@ class TrtConvertElementwiseTest_one_input(TrtLayerAutoScanTest):
# for static_shape # for static_shape
clear_dynamic_shape() clear_dynamic_shape()
self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
yield self.create_inference_config(), (0, 3), 1e-5 yield self.create_inference_config(), generate_trt_nodes_num(
attrs, False), 1e-5
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (0, 3), 1e-5 yield self.create_inference_config(), generate_trt_nodes_num(
attrs, False), 1e-5
# for dynamic_shape # for dynamic_shape
generate_dynamic_shape(attrs) generate_dynamic_shape(attrs)
self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
yield self.create_inference_config(), (1, 2), 1e-5 yield self.create_inference_config(), generate_trt_nodes_num(attrs,
True), 1e-5
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 2), 1e-5 yield self.create_inference_config(), generate_trt_nodes_num(attrs,
True), 1e-5
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if self.dims == 2 and len(self.dynamic_shape.max_input_shape) == 0:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape are not equal between gpu and tensorrt when input dim is 2."
)
def teller2(program_config, predictor_config):
if self.dims == 3:
return True
return False
self.add_skip_case(
teller2, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output has diff between gpu and tensorrt when input dim is 3.")
def teller3(program_config, predictor_config):
if self.dims == 4:
return True
return False
self.add_skip_case(
teller3, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output has diff between gpu and tensorrt when input dim is 4.")
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
...@@ -245,15 +285,26 @@ class TrtConvertElementwiseTest_two_input_without_broadcast( ...@@ -245,15 +285,26 @@ class TrtConvertElementwiseTest_two_input_without_broadcast(
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 3), 1e-5 yield self.create_inference_config(), (1, 3), 1e-5
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if self.dims == 2:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape are not equal between gpu and tensorrt when input dim is 2."
)
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest): class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest):
def is_program_valid(self, program_config: ProgramConfig) -> bool: def is_program_valid(self, program_config: ProgramConfig) -> bool:
inputs = program_config.inputs inputs = program_config.inputs
if len(inputs['input_data1'].shape) == 1 or len(inputs['input_data2'] if len(inputs['input_data1'].shape) != len(inputs['input_data2'].shape):
.shape) == 1:
return False return False
return True return True
...@@ -264,24 +315,27 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest): ...@@ -264,24 +315,27 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest):
input1_shape_list = [[4, 32], [2, 4, 32], [4, 2, 4, 32]] input1_shape_list = [[4, 32], [2, 4, 32], [4, 2, 4, 32]]
input2_shape1_list = [[32], [4, 32], [2, 4, 32]] input2_shape1_list = [[32], [4, 32], [2, 4, 32]]
input2_shape2_list = [[1, 32], [1, 1, 32], [1, 1, 1, 32]] input2_shape2_list = [[4, 1], [2, 4, 1], [4, 2, 4, 1]]
input2_shape3_list = [[1, 32], [1, 4, 32], [4, 32]] input2_shape3_list = [[32], [2, 1, 1], [4, 2, 1, 1]]
input2_shape4_list = [[32], [4, 32], [4, 1, 1, 1]]
input2_shape_list = [ input2_shape_list = [
input2_shape1_list, input2_shape2_list, input2_shape3_list input2_shape1_list, input2_shape2_list, input2_shape3_list,
input2_shape4_list
] ]
axis1_list = [[-1], [1, -1], [1, -1]] axis1_list = [[-1], [1, -1], [1, -1]]
axis2_list = [[-1], [-1], [-1]] axis2_list = [[-1], [0], [0]]
axis3_list = [[-1], [-1], [2, -1]] axis3_list = [[-1], [0], [0]]
axis_list = [axis1_list, axis2_list, axis3_list] axis4_list = [[-1], [-1], [0]]
axis_list = [axis1_list, axis2_list, axis3_list, axis4_list]
for i in range(3): for i in range(3):
input1_shape = input1_shape_list[i] input1_shape = input1_shape_list[i]
for j in range(3): for j in range(4):
input2_shape = input2_shape_list[j][i] input2_shape = input2_shape_list[j][i]
for op_type in ["elementwise_add", "elementwise_mul"]: for op_type in ["elementwise_add", "elementwise_mul"]:
for axis in axis_list[j][i]: for axis in axis_list[j][i]:
self.dims1 = len(input1_shape) self.shape1 = input1_shape
self.dims2 = len(input2_shape) self.shape2 = input2_shape
dics = [{"axis": axis}] dics = [{"axis": axis}]
ops_config = [{ ops_config = [{
"op_type": op_type, "op_type": op_type,
...@@ -318,16 +372,16 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest): ...@@ -318,16 +372,16 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest):
opt_shape = [[32], [32, 32], [32, 32, 32], [32, 32, 32, 32]] opt_shape = [[32], [32, 32], [32, 32, 32], [32, 32, 32, 32]]
self.dynamic_shape.min_input_shape = { self.dynamic_shape.min_input_shape = {
"input_data1": min_shape[self.dims1 - 1], "input_data1": min_shape[len(self.shape1) - 1],
"input_data2": min_shape[self.dims2 - 1] "input_data2": min_shape[len(self.shape2) - 1]
} }
self.dynamic_shape.max_input_shape = { self.dynamic_shape.max_input_shape = {
"input_data1": max_shape[self.dims1 - 1], "input_data1": max_shape[len(self.shape1) - 1],
"input_data2": max_shape[self.dims2 - 1] "input_data2": max_shape[len(self.shape2) - 1]
} }
self.dynamic_shape.opt_input_shape = { self.dynamic_shape.opt_input_shape = {
"input_data1": opt_shape[self.dims1 - 1], "input_data1": opt_shape[len(self.shape1) - 1],
"input_data2": opt_shape[self.dims2 - 1] "input_data2": opt_shape[len(self.shape2) - 1]
} }
def clear_dynamic_shape(): def clear_dynamic_shape():
...@@ -342,10 +396,11 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest): ...@@ -342,10 +396,11 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest):
# for static_shape # for static_shape
clear_dynamic_shape() clear_dynamic_shape()
self.trt_param.precision = paddle_infer.PrecisionType.Float32 if self.shape1[0] == self.shape2[0]:
yield self.create_inference_config(), (1, 3), 1e-5 self.trt_param.precision = paddle_infer.PrecisionType.Float32
self.trt_param.precision = paddle_infer.PrecisionType.Half yield self.create_inference_config(), (1, 3), 1e-5
yield self.create_inference_config(), (1, 3), 1e-5 self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 3), 1e-5
# for dynamic_shape # for dynamic_shape
generate_dynamic_shape(attrs) generate_dynamic_shape(attrs)
...@@ -354,7 +409,19 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest): ...@@ -354,7 +409,19 @@ class TrtConvertElementwiseTest_two_input_with_broadcast(TrtLayerAutoScanTest):
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 3), 1e-5 yield self.create_inference_config(), (1, 3), 1e-5
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if len(self.shape1) == 2:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape are not equal between gpu and tensorrt when input dim is 2."
)
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
......
...@@ -252,7 +252,19 @@ class TrtConvertEmbEltwiseLayernormTest1(TrtLayerAutoScanTest): ...@@ -252,7 +252,19 @@ class TrtConvertEmbEltwiseLayernormTest1(TrtLayerAutoScanTest):
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 4), 1e-5 yield self.create_inference_config(), (1, 4), 1e-5
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if self.trt_param.precision == paddle_infer.PrecisionType.Half and len(
self.dynamic_shape.min_input_shape) != 0:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output has diff between gpu and trt when dynamic fp16 mode.")
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
......
...@@ -114,19 +114,33 @@ class TrtConvertGroupNormTest(TrtLayerAutoScanTest): ...@@ -114,19 +114,33 @@ class TrtConvertGroupNormTest(TrtLayerAutoScanTest):
clear_dynamic_shape() clear_dynamic_shape()
self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
yield self.create_inference_config(), generate_trt_nodes_num( yield self.create_inference_config(), generate_trt_nodes_num(
attrs, False), 1e-5 attrs, False), (1e-5, 1e-5)
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), generate_trt_nodes_num( yield self.create_inference_config(), generate_trt_nodes_num(
attrs, False), 1e-5 attrs, False), (1e-5, 1e-5)
# for dynamic_shape # for dynamic_shape
generate_dynamic_shape(attrs) generate_dynamic_shape(attrs)
# self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
# yield self.create_inference_config(), generate_trt_nodes_num(attrs, True), 1e-5 yield self.create_inference_config(), generate_trt_nodes_num(
# self.trt_param.precision = paddle_infer.PrecisionType.Half attrs, True), (1e-5, 1e-5)
# yield self.create_inference_config(), generate_trt_nodes_num(attrs, True), 1e-5 self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), generate_trt_nodes_num(
attrs, True), (1e-5, 1e-5)
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if len(self.dynamic_shape.min_input_shape) != 0:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The goup_norm plugin will check dim not -1 failed when dynamic fp16 mode."
)
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
......
...@@ -38,6 +38,7 @@ class TrtConvertMultiHeadMatmulTest(TrtLayerAutoScanTest): ...@@ -38,6 +38,7 @@ class TrtConvertMultiHeadMatmulTest(TrtLayerAutoScanTest):
return np.random.randn(768).astype(np.float32) return np.random.randn(768).astype(np.float32)
for batch in [1, 2, 4]: for batch in [1, 2, 4]:
self.batch = batch
for reshape_shape in [[0, 0, 12, 64]]: for reshape_shape in [[0, 0, 12, 64]]:
for dim1 in [128]: for dim1 in [128]:
input2_shapes = [[batch, reshape_shape[2], dim1, dim1], input2_shapes = [[batch, reshape_shape[2], dim1, dim1],
...@@ -417,18 +418,40 @@ class TrtConvertMultiHeadMatmulTest(TrtLayerAutoScanTest): ...@@ -417,18 +418,40 @@ class TrtConvertMultiHeadMatmulTest(TrtLayerAutoScanTest):
# for static_shape # for static_shape
clear_dynamic_shape() clear_dynamic_shape()
self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
yield self.create_inference_config(), (1, 4), 1e-5 yield self.create_inference_config(), (1, 4), (1e-5, 1e-5)
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 4), 1e-5 yield self.create_inference_config(), (1, 4), (1e-5, 1e-5)
# for dynamic_shape # for dynamic_shape
generate_dynamic_shape(attrs) generate_dynamic_shape(attrs)
self.trt_param.precision = paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
yield self.create_inference_config(), (1, 3), 1e-5 yield self.create_inference_config(), (1, 3), (1e-5, 1e-5)
self.trt_param.precision = paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
yield self.create_inference_config(), (1, 3), 1e-5 yield self.create_inference_config(), (1, 3), (1e-5, 1e-5)
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if self.trt_param.precision == paddle_infer.PrecisionType.Half:
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output has diff between gpu and trt in fp16 mode.")
def teller2(program_config, predictor_config):
if self.trt_param.precision == paddle_infer.PrecisionType.Float32 and len(
self.dynamic_shape.min_input_shape) != 0 and self.batch > 2:
return True
return False
self.add_skip_case(
teller2, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output has diff between gpu and trt when dynamic fp32 mode and batch size > 2."
)
def test(self): def test(self):
self.add_skip_trt_case()
self.run_test() self.run_test()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册