forked from huawei/mindspore2022
fix the dynamic shape with heterogeneity
This commit is contained in:
parent
9c0e3ca887
commit
90158f8aee
|
|
@ -39,9 +39,9 @@ void CustomActor::Run(OpContext<DeviceTensor> *const ctx) {
|
||||||
std::string error_info = "Launch custom kernel exception: " + node->fullname_with_scope();
|
std::string error_info = "Launch custom kernel exception: " + node->fullname_with_scope();
|
||||||
SET_OPCONTEXT_FAIL_RET_WITH_ERROR_BY_STRATEGY(strategy_, (*ctx), error_info);
|
SET_OPCONTEXT_FAIL_RET_WITH_ERROR_BY_STRATEGY(strategy_, (*ctx), error_info);
|
||||||
}
|
}
|
||||||
// update the output addr size after initop && updateop, because after the initop & updateop, the shape of output
|
// Update the output addr size after inferop && updateop, because after the inferop & updateop, the shape of output
|
||||||
// maybe changed
|
// maybe changed.
|
||||||
if (AnfUtils::GetCustomActorType(kernel_.lock()) == kInit ||
|
if (AnfUtils::GetCustomActorType(kernel_.lock()) == kInfer ||
|
||||||
AnfUtils::GetCustomActorType(kernel_.lock()) == kUpdate) {
|
AnfUtils::GetCustomActorType(kernel_.lock()) == kUpdate) {
|
||||||
auto base_node = AnfUtils::GetCustomActorBaseNode(kernel_.lock());
|
auto base_node = AnfUtils::GetCustomActorBaseNode(kernel_.lock());
|
||||||
auto kernel_info = dynamic_cast<KernelInfo *>(base_node->kernel_info());
|
auto kernel_info = dynamic_cast<KernelInfo *>(base_node->kernel_info());
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,19 @@ class UniqueSquare(nn.Cell):
|
||||||
return self.square(x)
|
return self.square(x)
|
||||||
|
|
||||||
|
|
||||||
|
class UniqueSquareRelu(nn.Cell):
|
||||||
|
def __init__(self):
|
||||||
|
super(UniqueSquareRelu, self).__init__()
|
||||||
|
self.unique_cpu = P.Unique().add_prim_attr("primitive_target", "CPU")
|
||||||
|
self.square_cpu = P.Square().add_prim_attr("primitive_target", "CPU")
|
||||||
|
self.relu = P.ReLU()
|
||||||
|
|
||||||
|
def construct(self, x):
|
||||||
|
x, _ = self.unique_cpu(x)
|
||||||
|
x = self.square_cpu(x)
|
||||||
|
return self.relu(x)
|
||||||
|
|
||||||
|
|
||||||
class UniqueReshapeAdd(nn.Cell):
|
class UniqueReshapeAdd(nn.Cell):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(UniqueReshapeAdd, self).__init__()
|
super(UniqueReshapeAdd, self).__init__()
|
||||||
|
|
@ -99,6 +112,24 @@ def test_unique_square():
|
||||||
assert (output.asnumpy() == expect).all()
|
assert (output.asnumpy() == expect).all()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.level0
|
||||||
|
@pytest.mark.platform_x86_gpu_training
|
||||||
|
@pytest.mark.platform_arm_ascend_training
|
||||||
|
@pytest.mark.platform_x86_ascend_training
|
||||||
|
@pytest.mark.env_onecard
|
||||||
|
def test_unique_square_relu():
|
||||||
|
"""
|
||||||
|
Feature: Dynamic shape with heterogeneity.
|
||||||
|
Description: Test unique, square and relu kernels in dynamic shape with heterogeneity scenarios.
|
||||||
|
Expectation: The value and shape of output are the expected values.
|
||||||
|
"""
|
||||||
|
x = Tensor(np.array([1, 1, 2, 2, 3, 3]), mstype.float32)
|
||||||
|
net = UniqueSquareRelu()
|
||||||
|
output = net(x)
|
||||||
|
expect = np.array([1, 4, 9])
|
||||||
|
assert (output.asnumpy() == expect).all()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.level0
|
@pytest.mark.level0
|
||||||
@pytest.mark.platform_x86_gpu_training
|
@pytest.mark.platform_x86_gpu_training
|
||||||
@pytest.mark.platform_arm_ascend_training
|
@pytest.mark.platform_arm_ascend_training
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue