提交 7ab44afb 编写于 作者: Z zhupengyang 提交者: hong19860320

check op tests' shape should be 100+ (#22047)

上级 36afdbd3
...@@ -70,10 +70,8 @@ def get_numeric_gradient(place, ...@@ -70,10 +70,8 @@ def get_numeric_gradient(place,
tensor_to_check = scope.find_var(input_to_check).get_tensor() tensor_to_check = scope.find_var(input_to_check).get_tensor()
tensor_size = product(tensor_to_check.shape()) tensor_size = product(tensor_to_check.shape())
if not hasattr(get_numeric_gradient, 'check_shape_time'): if tensor_size < 100:
get_numeric_gradient.check_shape_time = 0 get_numeric_gradient.is_large_shape = False
if tensor_size >= 100:
get_numeric_gradient.check_shape_time += 1
tensor_to_check_dtype = tensor_to_check._dtype() tensor_to_check_dtype = tensor_to_check._dtype()
if tensor_to_check_dtype == core.VarDesc.VarType.FP32: if tensor_to_check_dtype == core.VarDesc.VarType.FP32:
tensor_to_check_dtype = np.float32 tensor_to_check_dtype = np.float32
...@@ -186,6 +184,8 @@ class OpTest(unittest.TestCase): ...@@ -186,6 +184,8 @@ class OpTest(unittest.TestCase):
cls._use_system_allocator = _set_use_system_allocator(True) cls._use_system_allocator = _set_use_system_allocator(True)
get_numeric_gradient.is_large_shape = True
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
"""Restore random seeds""" """Restore random seeds"""
...@@ -231,13 +231,12 @@ class OpTest(unittest.TestCase): ...@@ -231,13 +231,12 @@ class OpTest(unittest.TestCase):
"This test of %s op needs check_grad with fp64 precision." % "This test of %s op needs check_grad with fp64 precision." %
cls.op_type) cls.op_type)
if hasattr(get_numeric_gradient, 'check_shape_time') \ if not get_numeric_gradient.is_large_shape \
and get_numeric_gradient.check_shape_time == 0 \ and cls.op_type not in check_shape_white_list.NOT_CHECK_OP_LIST \
and OpTest.op_type not in check_shape_white_list.NOT_CHECK_OP_LIST \ and cls.op_type not in check_shape_white_list.NEED_TO_FIX_OP_LIST:
and OpTest.op_type not in check_shape_white_list.NEED_TO_FIX_OP_LIST:
raise AssertionError( raise AssertionError(
"At least one input's shape should be large than or equal to 100 for " "Input's shape should be large than or equal to 100 for " +
+ OpTest.op_type + " Op.") cls.op_type + " Op.")
def try_call_once(self, data_type): def try_call_once(self, data_type):
if not self.call_once: if not self.call_once:
...@@ -1269,7 +1268,6 @@ class OpTest(unittest.TestCase): ...@@ -1269,7 +1268,6 @@ class OpTest(unittest.TestCase):
max_relative_error=0.005, max_relative_error=0.005,
user_defined_grads=None, user_defined_grads=None,
check_dygraph=True): check_dygraph=True):
OpTest.op_type = self.op_type
self.scope = core.Scope() self.scope = core.Scope()
op_inputs = self.inputs if hasattr(self, "inputs") else dict() op_inputs = self.inputs if hasattr(self, "inputs") else dict()
op_outputs = self.outputs if hasattr(self, "outputs") else dict() op_outputs = self.outputs if hasattr(self, "outputs") else dict()
......
...@@ -79,7 +79,7 @@ class TestMatchMatrixTensorOp(OpTest): ...@@ -79,7 +79,7 @@ class TestMatchMatrixTensorOp(OpTest):
class TestMatchMatrixTensorOpCase1(TestMatchMatrixTensorOp): class TestMatchMatrixTensorOpCase1(TestMatchMatrixTensorOp):
def set_data(self): def set_data(self):
ix, iy, h, dim_t = [5, 8, 16, 4] ix, iy, h, dim_t = [5, 8, 25, 4]
x_lod = [[5]] x_lod = [[5]]
y_lod = [[8]] y_lod = [[8]]
self.init_data(ix, x_lod, iy, y_lod, h, dim_t) self.init_data(ix, x_lod, iy, y_lod, h, dim_t)
......
...@@ -14,10 +14,37 @@ ...@@ -14,10 +14,37 @@
NOT_CHECK_OP_LIST = [ NOT_CHECK_OP_LIST = [
# The increment's input must be 1-d and only has one data # The increment's input must be 1-d and only has one data
'increment' 'increment',
# elementwise ops have cases(y_shape: (1) or (1,1)) to test broadcast
'elementwise_add',
'elementwise_sub',
'elementwise_mul',
'elementwise_div',
'elementwise_max',
'elementwise_min',
'elementwise_pow',
'fused_elemwise_activation',
# prelu op's input alpha must be 1-d and only has one data in 'all' mode
'prelu'
] ]
NEED_TO_FIX_OP_LIST = [ NEED_TO_FIX_OP_LIST = [
'sequence_topk_avg_pooling', 'matmul', 'add_position_encoding', 'bilinear_tensor_product',
'margin_rank_loss', 'elementwise_pow', 'fused_elemwise_activation', 'mul' 'conv2d_transpose',
'deformable_conv',
'depthwise_conv2d_transpose',
'grid_sampler',
'hierarchical_sigmoid',
'lstmp',
'margin_rank_loss',
'matmul',
'mul',
'row_conv',
'scatter',
'smooth_l1_loss',
'soft_relu',
'spp',
'squared_l2_distance',
'tree_conv',
'var_conv_2d',
] ]
...@@ -110,7 +110,7 @@ for API_FILE in ${API_FILES[*]}; do ...@@ -110,7 +110,7 @@ for API_FILE in ${API_FILES[*]}; do
echo_line="You must have one RD (zhiqiu (Recommend) , sneaxiy or luotao1) approval for the paddle/fluid/framework/unused_var_check.cc, which manages the white list of operators that have unused input variables. Before change the white list, please read the specification [https://github.com/PaddlePaddle/Paddle/wiki/OP-Should-Not-Have-Unused-Input] and try to refine code first. \n" echo_line="You must have one RD (zhiqiu (Recommend) , sneaxiy or luotao1) approval for the paddle/fluid/framework/unused_var_check.cc, which manages the white list of operators that have unused input variables. Before change the white list, please read the specification [https://github.com/PaddlePaddle/Paddle/wiki/OP-Should-Not-Have-Unused-Input] and try to refine code first. \n"
check_approval 1 6888866 32832641 6836917 check_approval 1 6888866 32832641 6836917
elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/check_shape_white_list.py" ];then elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/check_shape_white_list.py" ];then
echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (hong19860320 (Recommend), luotao1, phlrain) approval for the changes of check_shape_white_list.py, which manages the white list of operators with limited input size. The op test must have at least one test case with input size greater than or equal to 100. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/OP-Test-Input-Shape-Requirements. \n" echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (hong19860320 (Recommend), luotao1, phlrain) approval for the changes of check_shape_white_list.py, which manages the white list of operators with limited input size. Inputs size of all cases in the op test must be greater than or equal to 100. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/OP-Test-Input-Shape-Requirements. \n"
check_approval 1 9973393 6836917 43953930 check_approval 1 9973393 6836917 43953930
elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/op_accuracy_white_list.py" ];then elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/op_accuracy_white_list.py" ];then
echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (juncaipeng (Recommend), zhangting2020 (Recommend) or luotao1) approval for the python/paddle/fluid/tests/unittests/white_list/op_accuracy_white_list.py, which manages the white list of upgrading the precision of op test to float64. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/Upgrade-OP-Precision-to-Float64. \n" echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (juncaipeng (Recommend), zhangting2020 (Recommend) or luotao1) approval for the python/paddle/fluid/tests/unittests/white_list/op_accuracy_white_list.py, which manages the white list of upgrading the precision of op test to float64. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/Upgrade-OP-Precision-to-Float64. \n"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册