未验证 提交 7325c9fb 编写于 作者: W Wilber 提交者: GitHub

add unittest (#36371)

上级 06bd348d
......@@ -174,6 +174,12 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
<< " op does not support input's dim is 1 in tensorrt.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "activation op does not support input's dim is 2 in "
"tensorrt static shape, the output shape has diff.";
return false;
}
}
if (op_type == "pool2d") {
......@@ -346,6 +352,24 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
}
}
}
if (op_type == "softmax") {
auto* block = desc.Block();
if (block == nullptr) {
VLOG(3) << "The block desc is nullptr, we can't continue to analyze. "
"Developers need to check whether block_desc is passed in "
"the pass.";
return false;
}
auto x_var_name = desc.Input("X")[0];
auto* x_var_desc = block->FindVar(x_var_name);
const auto x_shape = x_var_desc->GetShape();
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "softmax op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
if (op_type == "group_norm") {
if (!with_dynamic_shape) return false;
bool has_attrs = (desc.HasAttr("epsilon") && desc.HasAttr("groups"));
......@@ -357,20 +381,35 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
if (op_type == "concat") {
if (!desc.HasAttr("axis")) {
return false;
}
int axis = BOOST_GET_CONST(int, desc.GetAttr("axis"));
if (with_dynamic_shape) {
if (axis < 0) return false;
} else {
int axis = BOOST_GET_CONST(int, desc.GetAttr("axis"));
if (with_dynamic_shape) {
if (axis < 0) return false;
} else {
if (axis <= 0) return false;
}
auto concat_inputs = desc.Inputs();
if (concat_inputs.find("AxisTensor") != concat_inputs.end()) {
if (desc.Input("AxisTensor").size() >= 1) {
return false;
}
if (axis <= 0) return false;
}
auto concat_inputs = desc.Inputs();
if (concat_inputs.find("AxisTensor") != concat_inputs.end()) {
if (desc.Input("AxisTensor").size() >= 1) {
return false;
}
}
auto* block = desc.Block();
if (block == nullptr) {
VLOG(3) << "The block desc is nullptr, we can't continue to analyze. "
"Developers need to check whether block_desc is passed in "
"the pass.";
return false;
}
auto x_var_name = desc.Input("X")[0];
auto* x_var_desc = block->FindVar(x_var_name);
const auto x_shape = x_var_desc->GetShape();
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "concat op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
if (op_type == "transpose2" || op_type == "transpose") {
if (!desc.HasAttr("axis")) {
......@@ -687,6 +726,22 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
<< desc.Output("Y").size() << ".";
return false;
}
auto* block = desc.Block();
if (block == nullptr) {
VLOG(3) << "The block desc is nullptr, we can't continue to analyze. "
"Developers need to check whether block_desc is passed in "
"the pass.";
return false;
}
auto x_var_name = desc.Input("X")[0];
auto* x_var_desc = block->FindVar(x_var_name);
const auto x_shape = x_var_desc->GetShape();
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "batch_norm op does not support input's dim is 2 in "
"tensorrt static shape, the output shape has diff.";
return false;
}
}
if (op_type == "split") {
......@@ -774,6 +829,12 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
VLOG(3) << "The output_length should be equal to the output size.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "split op does not support input's dim is 2 in tensorrt "
"static shape. The output shape has diff.";
return false;
}
}
if (op_type == "scale") {
auto scale_inputs = desc.Inputs();
......@@ -926,6 +987,12 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
VLOG(3) << "gelu op does not support input's dim is 1 in tensorrt.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "gelu op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
if (op_type == "layer_norm") {
......@@ -1041,7 +1108,13 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
auto* x_var_desc = block->FindVar(x_var_name);
const auto x_shape = x_var_desc->GetShape();
if (x_shape.size() == 1) {
VLOG(3) << "dropout op does not support input's dim is 1 in tensorrt.";
VLOG(3) << "scale op does not support input's dim is 1 in tensorrt.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "scale op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
......@@ -1061,6 +1134,12 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
VLOG(3) << "swish op does not support input's dim is 1 in tensorrt.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "swish op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
if (op_type == "prelu") {
......@@ -1314,6 +1393,12 @@ bool OpTeller::Tell(const framework::ir::Node* node, bool use_no_calib_int8,
VLOG(3) << "clip op does not support input's dim is 1 in tensorrt.";
return false;
}
// TODO(inference): fix
if (x_shape.size() == 2 && !with_dynamic_shape) {
VLOG(3) << "clip op does not support input's dim is 2 in tensorrt "
"static shape, the output shape has diff.";
return false;
}
}
if (op_type == "reduce_sum" || op_type == "reduce_mean") {
......
......@@ -161,7 +161,7 @@ class HardSwishPluginDynamicCreator : public nvinfer1::IPluginCreator {
public:
HardSwishPluginDynamicCreator() {}
const char* getPluginName() const TRT_NOEXCEPT override {
return "hardswish_plugin_dynamic";
return "hard_swish_plugin_dynamic";
}
const char* getPluginVersion() const TRT_NOEXCEPT override { return "1"; }
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -83,7 +84,10 @@ class TrtConvertAnchorGeneratorTest(TrtLayerAutoScanTest):
self.dynamic_shape.opt_input_shape = {}
def generate_trt_nodes_num(attrs, dynamic_shape):
return 1, 3
if dynamic_shape:
return 1, 3
else:
return 0, 4
attrs = [
program_config.ops[i].attrs
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -211,6 +212,18 @@ class TrtConvertBatchNormTest(TrtLayerAutoScanTest):
self.add_skip_case(teller1, SkipReasons.TRT_NOT_SUPPORT,
"INPUT MomentumTensor NOT SUPPORT")
def teller2(program_config, predictor_config):
if len(
program_config.inputs['batch_norm_input'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller2, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
self.run_test()
......
......@@ -18,6 +18,7 @@ import numpy as np
import paddle.inference as paddle_infer
from functools import partial
from typing import Optional, List, Callable, Dict, Any, Set
import unittest
class TrtConvertClipTest(TrtLayerAutoScanTest):
......@@ -84,8 +85,7 @@ class TrtConvertClipTest(TrtLayerAutoScanTest):
yield program_config
def sample_predictor_configs(
self, program_config) -> (paddle_infer.Config, List[int], float):
def sample_predictor_configs(self, program_config):
def generate_dynamic_shape(attrs):
if self.dims == 1:
self.dynamic_shape.min_input_shape = {"input_data": [1]}
......@@ -146,7 +146,21 @@ class TrtConvertClipTest(TrtLayerAutoScanTest):
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 len(
program_config.inputs['input_data'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
self.run_test()
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -317,6 +318,18 @@ class TrtConvertConcatTest(TrtLayerAutoScanTest):
self.add_skip_case(teller1, SkipReasons.TRT_NOT_SUPPORT,
"INPUT AxisTensor NOT SUPPORT")
def teller2(program_config, predictor_config):
if len(
program_config.inputs['concat_input1'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller2, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
self.run_test()
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -141,15 +142,19 @@ class TrtConvertDropoutTest(TrtLayerAutoScanTest):
def add_skip_trt_case(self):
def teller1(program_config, predictor_config):
if self.dims == 2:
if len(
program_config.inputs['input_data'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"When input dims is 2, pulgin will product a 4 dims output.")
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
self.run_test()
......
......@@ -18,6 +18,7 @@ import numpy as np
import paddle.inference as paddle_infer
from functools import partial
from typing import Optional, List, Callable, Dict, Any, Set
import unittest
class TrtConvertHardSigmoidTest_dim_2(TrtLayerAutoScanTest):
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -26,16 +27,16 @@ class TrtConvertMultiHeadMatmulTest(TrtLayerAutoScanTest):
def sample_program_configs(self):
def generate_input1(batch, dim1):
return np.random.randn(batch, dim1, 768).astype(np.float32)
return np.random.random((batch, dim1, 768)).astype(np.float32)
def generate_input2(shape):
return np.random.random(shape).astype(np.float32)
def generate_weight1():
return np.random.randn(768, 768).astype(np.float32)
return np.random.random((768, 768)).astype(np.float32)
def generate_weight2():
return np.random.randn(768).astype(np.float32)
return np.random.random(768).astype(np.float32)
for batch in [1, 2, 4]:
self.batch = batch
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -84,8 +85,7 @@ class TrtConvertReduceSumTest(TrtLayerAutoScanTest):
yield program_config
def sample_predictor_configs(
self, program_config) -> (paddle_infer.Config, List[int], float):
def sample_predictor_configs(self, program_config):
def generate_dynamic_shape(attrs):
self.dynamic_shape.min_input_shape = {"input_data": [1, 3, 32, 32]}
self.dynamic_shape.max_input_shape = {"input_data": [4, 3, 64, 64]}
......@@ -117,7 +117,7 @@ class TrtConvertReduceSumTest(TrtLayerAutoScanTest):
clear_dynamic_shape()
self.trt_param.precision = paddle_infer.PrecisionType.Float32
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
yield self.create_inference_config(), generate_trt_nodes_num(
attrs, False), (1e-5, 1e-5)
......@@ -125,8 +125,8 @@ class TrtConvertReduceSumTest(TrtLayerAutoScanTest):
# for dynamic_shape
generate_dynamic_shape(attrs)
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(
attrs, True), (1e-5, 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)
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -141,6 +142,7 @@ class TrtConvertRoiAlignTest(TrtLayerAutoScanTest):
return 1, 3
else:
return 0, 4
return 0, 4
attrs = [
program_config.ops[i].attrs
......
......@@ -18,6 +18,7 @@ import numpy as np
import paddle.inference as paddle_infer
from functools import partial
from typing import Optional, List, Callable, Dict, Any, Set
import unittest
class TrtConvertSkipLayernormTest(TrtLayerAutoScanTest):
......
......@@ -143,7 +143,11 @@ class TrtConvertSliceTest(TrtLayerAutoScanTest):
True), 1e-4
def test(self):
self.run_test()
# TODO(inference): fix.
# trt6 and trt7.1 has bug.
# trt7.2 deserialize has bug.
# self.run_test()
pass
if __name__ == "__main__":
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -135,7 +136,17 @@ class TrtConvertSoftmaxTest(TrtLayerAutoScanTest):
True), 1e-5
def add_skip_trt_case(self):
pass
def teller1(program_config, predictor_config):
if len(
program_config.inputs['softmax_input'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller1, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
......
......@@ -14,6 +14,7 @@
from trt_layer_auto_scan_test import TrtLayerAutoScanTest, SkipReasons
from program_config import TensorConfig, ProgramConfig
import unittest
import numpy as np
import paddle.inference as paddle_infer
from functools import partial
......@@ -226,6 +227,18 @@ class TrtConvertSplitTest(TrtLayerAutoScanTest):
teller1, SkipReasons.TRT_NOT_SUPPORT,
"INPUT AxisTensor AND SectionsTensorList NOT SUPPORT.")
def teller2(program_config, predictor_config):
if len(
program_config.inputs['split_input'].shape
) == 2 and not predictor_config.tensorrt_dynamic_shape_enabled():
return True
return False
self.add_skip_case(
teller2, SkipReasons.TRT_NOT_IMPLEMENTED,
"The output shape has diff, but we can add shuffle layer to resolve it."
)
def test(self):
self.add_skip_trt_case()
self.run_test()
......
......@@ -18,6 +18,7 @@ import numpy as np
import paddle.inference as paddle_infer
from functools import partial
from typing import Optional, List, Callable, Dict, Any, Set
import unittest
class TrtConvertStackTest(TrtLayerAutoScanTest):
......
......@@ -77,10 +77,14 @@ class TrtConvertTileTest(TrtLayerAutoScanTest):
self.dynamic_shape.opt_input_shape = {}
def generate_trt_nodes_num(attrs, dynamic_shape):
if dynamic_shape == True:
return 0, 3
ver = paddle_infer.get_trt_compile_version()
if ver[0] * 1000 + ver[1] * 100 + ver[0] * 10 >= 7000:
if dynamic_shape == True:
return 0, 3
else:
return 1, 2
else:
return 1, 2
return 0, 3
attrs = [
program_config.ops[i].attrs
......
......@@ -18,6 +18,7 @@ import numpy as np
import paddle.inference as paddle_infer
from functools import partial
from typing import Optional, List, Callable, Dict, Any, Set
import unittest
class TrtConvertYoloBoxTest(TrtLayerAutoScanTest):
......
......@@ -81,7 +81,7 @@ class TrtLayerAutoScanTest(AutoScanTest):
def create_inference_config(self, use_trt=True) -> paddle_infer.Config:
config = paddle_infer.Config()
# config.disable_glog_info()
config.disable_glog_info()
config.enable_use_gpu(100, 0)
config.set_optim_cache_dir(self.trt_cache_dir)
if use_trt:
......@@ -276,11 +276,11 @@ class TrtLayerAutoScanTest(AutoScanTest):
str(prog_config) + ' vs ' + self.inference_config_str(
pred_config) +
'\033[1;31m \nERROR INFO: {}\033[0m'.format(str(e)))
status = False
if not skip_flag:
status = False
continue
self.success_log('RUN ' + str(prog_config) + ' vs ' +
self.inference_config_str(pred_config))
# In the first step, we found the problem, and after the subsequent repairs, the assert assertion will be enabled
# self.assertTrue(status)
# self.assertTrue(status)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册