From 9a9e3a751ec3f3a0018f1572d7dcf71aca376cd5 Mon Sep 17 00:00:00 2001 From: Xiaoda Zhang Date: Fri, 4 Dec 2020 15:59:44 +0800 Subject: [PATCH] set cnode's fullname when cloning --- .../optimizer/irpass/reshape_eliminate.h | 3 ++ .../frontend/parallel/step_auto_parallel.cc | 1 + mindspore/core/ir/func_graph_cloner.cc | 3 ++ .../parallel/test_auto_parallel_arithmetic.py | 33 ++++++++++++------- .../parallel/test_auto_parallel_cast.py | 10 +++--- .../parallel/test_auto_parallel_transpose.py | 8 ++--- .../parallel/test_auto_parallel_two_matmul.py | 7 ++-- 7 files changed, 41 insertions(+), 24 deletions(-) diff --git a/mindspore/ccsrc/frontend/optimizer/irpass/reshape_eliminate.h b/mindspore/ccsrc/frontend/optimizer/irpass/reshape_eliminate.h index bd5b7311ca..a3c9fadd1a 100644 --- a/mindspore/ccsrc/frontend/optimizer/irpass/reshape_eliminate.h +++ b/mindspore/ccsrc/frontend/optimizer/irpass/reshape_eliminate.h @@ -95,6 +95,9 @@ class TwoReshapeEliminater : public AnfVisitor { if (fg != nullptr && x_ != nullptr && shape_ != nullptr) { auto new_node = fg->NewCNode({NewValueNode(prim_), x_, shape_}); new_node->set_abstract(node->abstract()); + if (node->scope() != kDefaultScope) { + new_node->set_scope(node->scope()); + } new_node->set_fullname_with_scope(node->fullname_with_scope()); return new_node; } diff --git a/mindspore/ccsrc/frontend/parallel/step_auto_parallel.cc b/mindspore/ccsrc/frontend/parallel/step_auto_parallel.cc index abc59cdeed..c21bdac67f 100644 --- a/mindspore/ccsrc/frontend/parallel/step_auto_parallel.cc +++ b/mindspore/ccsrc/frontend/parallel/step_auto_parallel.cc @@ -689,6 +689,7 @@ Status ConstructCostGraphNodesByUniqueIdTC(const std::vector &all_no cnode->set_user_data(current_op_ptr); MS_LOG(INFO) << "The CNode with UniqueId: " << cnode->UniqueId() << " and UniqueIdThroughCopy: " << cnode->UniqueIdThroughCopy() + << ", CNode fullname_with_scope: " << cnode->fullname_with_scope() << " is set OperatorInfo: " << current_op_ptr->name() << ", Primitive: " << prim->name(); } } diff --git a/mindspore/core/ir/func_graph_cloner.cc b/mindspore/core/ir/func_graph_cloner.cc index f07ed171b2..c22299c968 100644 --- a/mindspore/core/ir/func_graph_cloner.cc +++ b/mindspore/core/ir/func_graph_cloner.cc @@ -91,6 +91,9 @@ void Cloner::CloneCNode(const AnfNodePtr &node, const FuncGraphPtr &target) { new_node->set_inputs_value(old_node->inputs_value()); ScopePtr scope = (node->scope() != kDefaultScope) ? node->scope() : this->scope(); new_node->set_scope(scope); + if (IsPrimitiveCNode(old_node, nullptr) && new_node->scope() == kDefaultScope) { + new_node->set_fullname_with_scope(old_node->fullname_with_scope()); + } new_node->set_kernel_info(old_node->kernel_info_ptr()); repl_node_[old_node] = new_node; nodes_.emplace_back(old_node, new_node); diff --git a/tests/ut/python/parallel/test_auto_parallel_arithmetic.py b/tests/ut/python/parallel/test_auto_parallel_arithmetic.py index fa9a601171..3ff2ac81d8 100644 --- a/tests/ut/python/parallel/test_auto_parallel_arithmetic.py +++ b/tests/ut/python/parallel/test_auto_parallel_arithmetic.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re import numpy as np import mindspore as ms @@ -78,9 +79,11 @@ def test_auto_parallel_arithmetic(): b = Tensor(np.ones([64, 128]), dtype=ms.float32) compile_net(net, x, y, b, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/FloorDiv-op0': [[2, 4], [2, 4]], - 'Default/network-Net/MatMul-op1': [[2, 1], [1, 4]]} - assert strategies == expected_strategies + for (k, v) in strategies.items(): + if re.search('FloorDiv-op', k) is not None: + assert v == [[2, 4], [2, 4]] + elif re.search('MatMul-op', k) is not None: + assert v == [[2, 1], [1, 4]] def test_auto_parallel_arithmetic_broadcast_both(): @@ -105,9 +108,11 @@ def test_auto_parallel_arithmetic_broadcast_both(): b = Tensor(np.ones([1, 64]), dtype=ms.float32) compile_net(net, x, y, b, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/FloorDiv-op0': [[8, 1], [1, 1]], - 'Default/network-Net/MatMul-op1': [[8, 1], [1, 1]]} - assert strategies == expected_strategies + for (k, v) in strategies.items(): + if re.search('FloorDiv-op', k) is not None: + assert v == [[8, 1], [1, 1]] + elif re.search('MatMul-op', k) is not None: + assert v == [[8, 1], [1, 1]] def test_auto_parallel_arithmetic_broadcast_right(): @@ -132,9 +137,11 @@ def test_auto_parallel_arithmetic_broadcast_right(): b = Tensor(np.ones([32]), dtype=ms.float32) compile_net(net, x, y, b, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/FloorDiv-op0': [[4, 2], [2]], - 'Default/network-Net/MatMul-op1': [[4, 1], [1, 2]]} - assert strategies == expected_strategies + for (k, v) in strategies.items(): + if re.search('FloorDiv-op', k) is not None: + assert v == [[4, 2], [2]] + elif re.search('MatMul-op', k) is not None: + assert v == [[4, 1], [1, 2]] def test_auto_parallel_arithmetic_broadcast_left(): @@ -159,6 +166,8 @@ def test_auto_parallel_arithmetic_broadcast_left(): b = Tensor(np.ones([128, 64, 32]), dtype=ms.float32) compile_net(net, x, y, b, phase="train") strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/FloorDiv-op0': [[4, 2], [1, 4, 2]], - 'Default/network-Net/MatMul-op1': [[4, 1], [1, 2]]} - assert strategies == expected_strategies + for (k, v) in strategies.items(): + if re.search('FloorDiv-op', k) is not None: + assert v == [[4, 2], [1, 4, 2]] + elif re.search('MatMul-op', k) is not None: + assert v == [[4, 1], [1, 2]] diff --git a/tests/ut/python/parallel/test_auto_parallel_cast.py b/tests/ut/python/parallel/test_auto_parallel_cast.py index a67bf7f9eb..723f08b08c 100644 --- a/tests/ut/python/parallel/test_auto_parallel_cast.py +++ b/tests/ut/python/parallel/test_auto_parallel_cast.py @@ -84,9 +84,9 @@ def test_double_star_graph(): net.set_train() _executor.compile(net, x, y, z, w, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/Cast-op1': [[8, 1]], - 'Default/network-Net/Cast-op3': [[1, 8]], - 'Default/network-Net/MatMul-op2': [[8, 1], [1, 1]], - 'Default/network-Net/MatMul-op4': [[1, 1], [1, 8]], - 'Default/network-Net/MatMul-op0': [[1, 8], [8, 1]]} + expected_strategies = {'Default/network-Net/Cast-op5': [[8, 1]], + 'Default/network-Net/Cast-op7': [[1, 8]], + 'Default/network-Net/MatMul-op6': [[8, 1], [1, 1]], + 'Default/network-Net/MatMul-op8': [[1, 1], [1, 8]], + 'Default/network-Net/MatMul-op4': [[1, 8], [8, 1]]} assert strategies == expected_strategies diff --git a/tests/ut/python/parallel/test_auto_parallel_transpose.py b/tests/ut/python/parallel/test_auto_parallel_transpose.py index 15cf788625..53a0efd378 100644 --- a/tests/ut/python/parallel/test_auto_parallel_transpose.py +++ b/tests/ut/python/parallel/test_auto_parallel_transpose.py @@ -79,8 +79,8 @@ def test_two_matmul_transpose(): net.set_train() _executor.compile(net, x, y, b, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/Transpose-op0': [[1, 16]], - 'Default/network-Net/Transpose-op1': [[16, 1]], - 'Default/network-Net/MatMul-op2': [[16, 1], [1, 1]], - 'Default/network-Net/MatMul-op3': [[16, 1], [1, 1]]} + expected_strategies = {'Default/network-Net/Transpose-op4': [[1, 16]], + 'Default/network-Net/Transpose-op5': [[16, 1]], + 'Default/network-Net/MatMul-op7': [[16, 1], [1, 1]], + 'Default/network-Net/MatMul-op6': [[16, 1], [1, 1]]} assert strategies == expected_strategies diff --git a/tests/ut/python/parallel/test_auto_parallel_two_matmul.py b/tests/ut/python/parallel/test_auto_parallel_two_matmul.py index 4ef067aed2..28ff079b91 100644 --- a/tests/ut/python/parallel/test_auto_parallel_two_matmul.py +++ b/tests/ut/python/parallel/test_auto_parallel_two_matmul.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re import numpy as np import mindspore as ms @@ -155,6 +156,6 @@ def test_two_matmul(): net.set_train() _executor.compile(net, x, y, b, phase='train') strategies = _executor._get_shard_strategy(net) - expected_strategies = {'Default/network-Net/MatMul-op0': [[16, 1], [1, 1]], - 'Default/network-Net/MatMul-op1': [[16, 1], [1, 1]]} - assert strategies == expected_strategies + for (k, v) in strategies.items(): + if re.search('MatMul-op', k) is not None: + assert v == [[16, 1], [1, 1]]