未验证 提交 7f93e2b0 编写于 作者: Z zhangyikun02 提交者: GitHub

update unittests for tile op and silce op on XPU, test=kunlun (#40227)

上级 86919910
...@@ -18,169 +18,174 @@ import sys ...@@ -18,169 +18,174 @@ import sys
import unittest import unittest
sys.path.append("..") sys.path.append("..")
from op_test import OpTest from op_test import OpTest
from op_test_xpu import XPUOpTest
from xpu.get_test_cover_info import create_test_class, get_xpu_op_support_types, XPUOpTestWrapper
paddle.enable_static() paddle.enable_static()
# Situation 1: starts(list, no tensor), ends(list, no tensor) # Situation 1: starts(list, no tensor), ends(list, no tensor)
# 1.1 without attr(decrease) # 1.1 without attr(decrease)
@unittest.skipIf(not paddle.is_compiled_with_xpu(), class XPUTestSliceOp(XPUOpTestWrapper):
"core is not compiled with XPU") def __init__(self):
class TestSliceOp(OpTest): self.op_name = 'slice'
def setUp(self): self.use_dynamic_create_class = False
self.op_type = "slice"
self.config() class TestSliceOp(XPUOpTest):
self.inputs = {'Input': self.input} def setUp(self):
self.outputs = {'Out': self.out} self.dtype = self.in_type
self.attrs = { self.place = paddle.XPUPlace(0)
'axes': self.axes, self.op_type = "slice"
'starts': self.starts, self.config()
'ends': self.ends, self.inputs = {'Input': self.input}
'infer_flags': self.infer_flags, self.outputs = {'Out': self.out}
"use_xpu": True self.attrs = {
} 'axes': self.axes,
'starts': self.starts,
def config(self): 'ends': self.ends,
self.input = np.random.random([3, 4, 5, 6]).astype("float32") 'infer_flags': self.infer_flags,
self.starts = [1, 0, 2] "use_xpu": True
self.ends = [3, 3, 4] }
self.axes = [0, 1, 2]
self.infer_flags = [1, 1, 1] def config(self):
self.out = self.input[1:3, 0:3, 2:4, :] self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.starts = [1, 0, 2]
def test_check_output(self): self.ends = [3, 3, 4]
place = paddle.XPUPlace(0) self.axes = [0, 1, 2]
self.check_output_with_place(place) self.infer_flags = [1, 1, 1]
self.out = self.input[1:3, 0:3, 2:4, :]
def test_check_grad_normal(self):
place = paddle.XPUPlace(0) def test_check_grad_normal(self):
self.check_grad_with_place(place, ['Input'], 'Out') if self.dtype == np.float16:
self.check_grad_with_place(self.place, ['Input'], 'Out')
else:
@unittest.skipIf(not paddle.is_compiled_with_xpu(), user_defined_grad_outputs = np.random.random(
"core is not compiled with XPU") self.out.shape).astype(self.dtype)
class TestCase1(TestSliceOp): self.check_grad_with_place(
def config(self): self.place, ['Input'],
self.input = np.random.random([3, 4, 5, 6]).astype("float32") 'Out',
self.starts = [-3, 0, 2] user_defined_grad_outputs=user_defined_grad_outputs)
self.ends = [3, 100, -1]
self.axes = [0, 1, 2] class TestCase1(TestSliceOp):
self.infer_flags = [1, 1, 1] def config(self):
self.out = self.input[-3:3, 0:100, 2:-1, :] self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.starts = [-3, 0, 2]
self.ends = [3, 100, -1]
@unittest.skipIf(not paddle.is_compiled_with_xpu(), self.axes = [0, 1, 2]
"core is not compiled with XPU") self.infer_flags = [1, 1, 1]
class TestCase2(TestSliceOp): self.out = self.input[-3:3, 0:100, 2:-1, :]
def config(self):
self.input = np.random.random([3, 4, 5, 6]).astype("float32") class TestCase2(TestSliceOp):
self.starts = [-3, 0, 2] def config(self):
self.ends = [3, 100, -1] self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.axes = [0, 1, 3] self.starts = [-3, 0, 2]
self.infer_flags = [1, 1, 1] self.ends = [3, 100, -1]
self.out = self.input[-3:3, 0:100, :, 2:-1] self.axes = [0, 1, 3]
self.infer_flags = [1, 1, 1]
self.out = self.input[-3:3, 0:100, :, 2:-1]
# 1.2 with attr(decrease) # 1.2 with attr(decrease)
@unittest.skipIf(not paddle.is_compiled_with_xpu(), class XPUTestSliceOp_decs_dim(XPUOpTestWrapper):
"core is not compiled with XPU") def __init__(self):
class TestSliceOp_decs_dim(OpTest): self.op_name = 'slice'
def setUp(self): self.use_dynamic_create_class = False
self.op_type = "slice"
self.config() class TestSliceOp_decs_dim(XPUOpTest):
self.inputs = {'Input': self.input} def setUp(self):
self.outputs = {'Out': self.out} self.dtype = self.in_type
self.attrs = { self.place = paddle.XPUPlace(0)
'axes': self.axes, self.op_type = "slice"
'starts': self.starts, self.config()
'ends': self.ends, self.inputs = {'Input': self.input}
'infer_flags': self.infer_flags, self.outputs = {'Out': self.out}
'decrease_axis': self.decrease_axis, self.attrs = {
"use_xpu": True 'axes': self.axes,
} 'starts': self.starts,
'ends': self.ends,
def config(self): 'infer_flags': self.infer_flags,
self.input = np.random.random([3, 4, 5, 6]).astype("float32") 'decrease_axis': self.decrease_axis,
self.starts = [1, 0, 2] "use_xpu": True
self.ends = [2, 3, 4] }
self.axes = [0, 1, 2]
self.decrease_axis = [0] def config(self):
self.infer_flags = [1, 1, 1] self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.out = self.input[1, 0:3, 2:4, :] self.starts = [1, 0, 2]
self.ends = [2, 3, 4]
def test_check_output(self): self.axes = [0, 1, 2]
place = paddle.XPUPlace(0) self.decrease_axis = [0]
self.check_output_with_place(place) self.infer_flags = [1, 1, 1]
self.out = self.input[1, 0:3, 2:4, :]
def test_check_grad_normal(self):
place = paddle.XPUPlace(0) def test_check_output(self):
self.check_grad_with_place(place, ['Input'], 'Out') self.check_output_with_place(self.place)
def test_check_grad_normal(self):
@unittest.skipIf(not paddle.is_compiled_with_xpu(), if self.dtype == np.float16:
"core is not compiled with XPU") self.check_grad_with_place(self.place, ['Input'], 'Out')
class TestSliceOp_decs_dim_2(TestSliceOp_decs_dim): else:
def config(self): user_defined_grad_outputs = np.random.random(
self.input = np.random.random([3, 4, 5, 6]).astype("float32") self.out.shape).astype(self.dtype)
self.starts = [1, 0, 2] self.check_grad_with_place(
self.ends = [2, 1, 4] self.place, ['Input'],
self.axes = [0, 1, 2] 'Out',
self.decrease_axis = [0, 1] user_defined_grad_outputs=user_defined_grad_outputs)
self.infer_flags = [1, 1, 1]
self.out = self.input[1, 0, 2:4, :] class TestSliceOp_decs_dim_2(TestSliceOp_decs_dim):
def config(self):
self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
@unittest.skipIf(not paddle.is_compiled_with_xpu(), self.starts = [1, 0, 2]
"core is not compiled with XPU") self.ends = [2, 1, 4]
class TestSliceOp_decs_dim_3(TestSliceOp_decs_dim): self.axes = [0, 1, 2]
def config(self): self.decrease_axis = [0, 1]
self.input = np.random.random([3, 4, 5, 6]).astype("float32") self.infer_flags = [1, 1, 1]
self.starts = [-1, 0, 2] self.out = self.input[1, 0, 2:4, :]
self.ends = [1000000, 1, 4]
self.axes = [0, 1, 2] class TestSliceOp_decs_dim_3(TestSliceOp_decs_dim):
self.decrease_axis = [0, 1] def config(self):
self.infer_flags = [1, 1, 1] self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.out = self.input[-1, 0, 2:4, :] self.starts = [-1, 0, 2]
self.ends = [1000000, 1, 4]
self.axes = [0, 1, 2]
@unittest.skipIf(not paddle.is_compiled_with_xpu(), self.decrease_axis = [0, 1]
"core is not compiled with XPU") self.infer_flags = [1, 1, 1]
class TestSliceOp_decs_dim_4(TestSliceOp_decs_dim): self.out = self.input[-1, 0, 2:4, :]
def config(self):
self.input = np.random.random([3, 4, 5, 7]).astype("float32") class TestSliceOp_decs_dim_4(TestSliceOp_decs_dim):
self.starts = [0, 1, 2, 3] def config(self):
self.ends = [1, 2, 3, 4] self.input = np.random.random([3, 4, 5, 7]).astype(self.dtype)
self.axes = [0, 1, 2, 3] self.starts = [0, 1, 2, 3]
self.decrease_axis = [0, 1, 2, 3] self.ends = [1, 2, 3, 4]
self.infer_flags = [1, 1, 1] self.axes = [0, 1, 2, 3]
self.out = self.input[0, 1, 2, 3:4] self.decrease_axis = [0, 1, 2, 3]
self.infer_flags = [1, 1, 1]
self.out = self.input[0, 1, 2, 3:4]
@unittest.skipIf(not paddle.is_compiled_with_xpu(),
"core is not compiled with XPU") class TestSliceOp_decs_dim_5(TestSliceOp_decs_dim):
class TestSliceOp_decs_dim_5(TestSliceOp_decs_dim): def config(self):
def config(self): self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
self.input = np.random.random([3, 4, 5, 6]).astype("float32") self.starts = [-1]
self.starts = [-1] self.ends = [1000000]
self.ends = [1000000] self.axes = [3]
self.axes = [3] self.decrease_axis = [3]
self.decrease_axis = [3] self.infer_flags = [1, 1, 1]
self.infer_flags = [1, 1, 1] self.out = self.input[:, :, :, -1]
self.out = self.input[:, :, :, -1]
class TestSliceOp_decs_dim_6(TestSliceOp_decs_dim):
def config(self):
@unittest.skipIf(not paddle.is_compiled_with_xpu(), self.input = np.random.random([3, 4, 5, 6]).astype(self.dtype)
"core is not compiled with XPU") self.starts = [0, 1, 2, 3]
class TestSliceOp_decs_dim_6(TestSliceOp_decs_dim): self.ends = [1, 2, 3, 4]
def config(self): self.axes = [0, 1, 2, 3]
self.input = np.random.random([3, 4, 5, 6]).astype("float32") self.decrease_axis = [0, 1, 2, 3]
self.starts = [0, 1, 2, 3] self.infer_flags = [1, 1, 1]
self.ends = [1, 2, 3, 4] self.out = self.input[0, 1, 2, 3:4]
self.axes = [0, 1, 2, 3]
self.decrease_axis = [0, 1, 2, 3]
self.infer_flags = [1, 1, 1] support_types = get_xpu_op_support_types('slice')
self.out = self.input[0, 1, 2, 3:4] for stype in support_types:
create_test_class(globals(), XPUTestSliceOp, stype)
create_test_class(globals(), XPUTestSliceOp_decs_dim, stype)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -24,221 +24,158 @@ import paddle ...@@ -24,221 +24,158 @@ import paddle
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid import compiler, Program, program_guard from paddle.fluid import compiler, Program, program_guard
from paddle.fluid import core from paddle.fluid import core
from xpu.get_test_cover_info import create_test_class, get_xpu_op_support_types, XPUOpTestWrapper
paddle.enable_static() paddle.enable_static()
np.random.seed(10) np.random.seed(10)
#Situation 1: repeat_times is a list (without tensor) #Situation 1: repeat_times is a list (without tensor)
class TestTileOpRank1(XPUOpTest): class XPUTestTileOpRank1(XPUOpTestWrapper):
def setUp(self): def __init__(self):
self.set_xpu() self.op_name = 'tile'
self.place = paddle.XPUPlace(0) self.use_dynamic_create_class = False
self.op_type = "tile"
self.init_data() class TestTileOpRank1(XPUOpTest):
def setUp(self):
self.inputs = {'X': np.random.random(self.ori_shape).astype("float32")} self.dtype = self.in_type
self.attrs = {'repeat_times': self.repeat_times} self.__class__.no_need_check_grad = True
output = np.tile(self.inputs['X'], self.repeat_times) self.place = paddle.XPUPlace(0)
self.outputs = {'Out': output} self.op_type = "tile"
self.init_data()
def set_xpu(self): self.inputs = {
self.__class__.use_xpu = True 'X': np.random.random(self.ori_shape).astype(self.dtype)
}
def init_data(self): self.attrs = {'repeat_times': self.repeat_times}
self.ori_shape = [100] output = np.tile(self.inputs['X'], self.repeat_times)
self.repeat_times = [2] self.outputs = {'Out': output}
def test_check_output(self): def init_data(self):
self.check_output_with_place(self.place) self.ori_shape = [100]
self.repeat_times = [2]
def test_check_grad(self):
pass def test_check_output(self):
self.check_output_with_place(self.place)
#with dimension expanding #with dimension expanding
class TestTileOpRank2Expanding(TestTileOpRank1): class TestTileOpRank2Expanding(TestTileOpRank1):
def init_data(self): def init_data(self):
self.ori_shape = [120] self.ori_shape = [120]
self.repeat_times = [2, 2] self.repeat_times = [2, 2]
class TestTileOpRank2(TestTileOpRank1):
class TestTileOpRank2(TestTileOpRank1): def init_data(self):
def init_data(self): self.ori_shape = [12, 14]
self.ori_shape = [12, 14] self.repeat_times = [2, 3]
self.repeat_times = [2, 3]
class TestTileOpRank3_Corner(TestTileOpRank1):
def init_data(self):
class TestTileOpRank3_Corner(TestTileOpRank1): self.ori_shape = (2, 10, 5)
def init_data(self): self.repeat_times = (1, 1, 1)
self.ori_shape = (2, 10, 5)
self.repeat_times = (1, 1, 1) class TestTileOpRank3_Corner2(TestTileOpRank1):
def init_data(self):
self.ori_shape = (2, 10, 5)
class TestTileOpRank3_Corner2(TestTileOpRank1): self.repeat_times = (2, 2)
def init_data(self):
self.ori_shape = (2, 10, 5) class TestTileOpRank3(TestTileOpRank1):
self.repeat_times = (2, 2) def init_data(self):
self.ori_shape = (2, 4, 15)
self.repeat_times = (2, 1, 4)
class TestTileOpRank3(TestTileOpRank1):
def init_data(self): class TestTileOpRank4(TestTileOpRank1):
self.ori_shape = (2, 4, 15) def init_data(self):
self.repeat_times = (2, 1, 4) self.ori_shape = (2, 4, 5, 7)
self.repeat_times = (3, 2, 1, 2)
class TestTileOpRank4(TestTileOpRank1):
def init_data(self):
self.ori_shape = (2, 4, 5, 7)
self.repeat_times = (3, 2, 1, 2)
# Situation 2: repeat_times is a list (with tensor) # Situation 2: repeat_times is a list (with tensor)
class TestTileOpRank1_tensor_attr(XPUOpTest): class XPUTestTileOpRank1_tensor_attr(XPUOpTestWrapper):
def setUp(self): def __init__(self):
self.set_xpu() self.op_name = 'tile'
self.place = paddle.XPUPlace(0) self.use_dynamic_create_class = False
self.op_type = "tile"
self.init_data() class TestTileOpRank1_tensor_attr(XPUOpTest):
repeat_times_tensor = [] def setUp(self):
for index, ele in enumerate(self.repeat_times): self.dtype = self.in_type
repeat_times_tensor.append(("x" + str(index), np.ones( self.__class__.no_need_check_grad = True
(1)).astype('int32') * ele)) self.place = paddle.XPUPlace(0)
self.op_type = "tile"
self.inputs = { self.init_data()
'X': np.random.random(self.ori_shape).astype("float32"), repeat_times_tensor = []
'repeat_times_tensor': repeat_times_tensor, for index, ele in enumerate(self.repeat_times):
} repeat_times_tensor.append(("x" + str(index), np.ones(
self.attrs = {"repeat_times": self.infer_repeat_times} (1)).astype('int32') * ele))
output = np.tile(self.inputs['X'], self.repeat_times)
self.outputs = {'Out': output} self.inputs = {
'X': np.random.random(self.ori_shape).astype(self.dtype),
def set_xpu(self): 'repeat_times_tensor': repeat_times_tensor,
self.__class__.use_xpu = True }
self.attrs = {"repeat_times": self.infer_repeat_times}
def init_data(self): output = np.tile(self.inputs['X'], self.repeat_times)
self.ori_shape = [100] self.outputs = {'Out': output}
self.repeat_times = [2]
self.infer_repeat_times = [-1] def init_data(self):
self.ori_shape = [100]
def test_check_output(self): self.repeat_times = [2]
self.check_output_with_place(self.place) self.infer_repeat_times = [-1]
def test_check_grad(self): def test_check_output(self):
pass self.check_output_with_place(self.place)
class TestTileOpRank2_Corner_tensor_attr(TestTileOpRank1_tensor_attr):
class TestTileOpRank2_Corner_tensor_attr(TestTileOpRank1_tensor_attr): def init_data(self):
def init_data(self): self.ori_shape = [12, 14]
self.ori_shape = [12, 14] self.repeat_times = [1, 1]
self.repeat_times = [1, 1] self.infer_repeat_times = [1, -1]
self.infer_repeat_times = [1, -1]
class TestTileOpRank2_attr_tensor(TestTileOpRank1_tensor_attr):
def init_data(self):
class TestTileOpRank2_attr_tensor(TestTileOpRank1_tensor_attr): self.ori_shape = [12, 14]
def init_data(self): self.repeat_times = [2, 3]
self.ori_shape = [12, 14] self.infer_repeat_times = [-1, 3]
self.repeat_times = [2, 3]
self.infer_repeat_times = [-1, 3]
# Situation 3: repeat_times is a tensor # Situation 3: repeat_times is a tensor
class TestTileOpRank1_tensor(XPUOpTest): class XPUTestTileOpRank1_tensor(XPUOpTestWrapper):
def setUp(self): def __init__(self):
self.set_xpu() self.op_name = 'tile'
self.place = paddle.XPUPlace(0) self.use_dynamic_create_class = False
self.op_type = "tile"
self.init_data() class TestTileOpRank1_tensor(XPUOpTest):
def setUp(self):
self.inputs = { self.dtype = self.in_type
'X': np.random.random(self.ori_shape).astype("float32"), self.__class__.no_need_check_grad = True
'RepeatTimes': np.array(self.repeat_times).astype("int32"), self.place = paddle.XPUPlace(0)
} self.op_type = "tile"
self.attrs = {} self.init_data()
output = np.tile(self.inputs['X'], self.repeat_times)
self.outputs = {'Out': output} self.inputs = {
'X': np.random.random(self.ori_shape).astype(self.dtype),
def set_xpu(self): 'RepeatTimes': np.array(self.repeat_times).astype("int32"),
self.__class__.use_xpu = True }
self.attrs = {}
def init_data(self): output = np.tile(self.inputs['X'], self.repeat_times)
self.ori_shape = [100] self.outputs = {'Out': output}
self.repeat_times = [2]
def init_data(self):
def test_check_output(self): self.ori_shape = [100]
self.check_output_with_place(self.place) self.repeat_times = [2]
def test_check_grad(self): def test_check_output(self):
pass self.check_output_with_place(self.place)
class TestTileOpRank2_tensor(TestTileOpRank1_tensor):
class TestTileOpRank2_tensor(TestTileOpRank1_tensor): def init_data(self):
def init_data(self): self.ori_shape = [12, 14]
self.ori_shape = [12, 14] self.repeat_times = [2, 3]
self.repeat_times = [2, 3]
support_types = get_xpu_op_support_types('tile')
# Situation 4: input x is Integer for stype in support_types:
class TestTileOpInteger(XPUOpTest): create_test_class(globals(), XPUTestTileOpRank1, stype)
def setUp(self): create_test_class(globals(), XPUTestTileOpRank1_tensor_attr, stype)
self.set_xpu() create_test_class(globals(), XPUTestTileOpRank1_tensor, stype)
self.place = paddle.XPUPlace(0)
self.op_type = "tile"
self.inputs = {
'X': np.random.randint(
10, size=(4, 4, 5)).astype("int32")
}
self.attrs = {'repeat_times': [2, 1, 4]}
output = np.tile(self.inputs['X'], (2, 1, 4))
self.outputs = {'Out': output}
def set_xpu(self):
self.__class__.use_xpu = True
def test_check_output(self):
self.check_output_with_place(self.place)
# Situation 5: input x is Integer
class TestTileOpInt64_t(XPUOpTest):
def setUp(self):
self.set_xpu()
self.place = paddle.XPUPlace(0)
self.op_type = "tile"
self.inputs = {
'X': np.random.randint(
10, size=(2, 4, 5)).astype("int64")
}
self.attrs = {'repeat_times': [2, 1, 4]}
output = np.tile(self.inputs['X'], (2, 1, 4))
self.outputs = {'Out': output}
def set_xpu(self):
self.__class__.use_xpu = True
def test_check_output(self):
self.check_output_with_place(self.place)
# Situation 6: input x is Bool
class TestTileOpBool(XPUOpTest):
def setUp(self):
self.set_xpu()
self.place = paddle.XPUPlace(0)
self.op_type = "tile"
self.inputs = {
'X': np.random.randint(
10, size=(2, 4, 5)).astype("bool")
}
self.attrs = {'repeat_times': [2, 1, 4]}
output = np.tile(self.inputs['X'], (2, 1, 4))
self.outputs = {'Out': output}
def set_xpu(self):
self.__class__.use_xpu = True
def test_check_output(self):
self.check_output_with_place(self.place)
# Test python API # Test python API
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册