From ed143cf998e6fd4c77bd7e68e5896a89f689a43c Mon Sep 17 00:00:00 2001 From: lichun Date: Sat, 26 Jun 2021 16:57:40 +0800 Subject: [PATCH 1/3] ReshapeRemovePass_not_remove_reshape_in_dynamic_subgraph --- ge/graph/passes/reshape_remove_pass.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ge/graph/passes/reshape_remove_pass.cc b/ge/graph/passes/reshape_remove_pass.cc index 10937cf1..856fda71 100755 --- a/ge/graph/passes/reshape_remove_pass.cc +++ b/ge/graph/passes/reshape_remove_pass.cc @@ -45,6 +45,25 @@ Status ReshapeRemovePass::Run(NodePtr &node) { int key = kToBeDeleteOp.find(node->GetType()) == kToBeDeleteOp.end() ? kOpNoDelete : kToBeDeleteOp[node->GetType()]; switch (key) { case kReshapeType: { + bool is_in_unknown_shape_graph = false; + bool forced_unknown = false; + for (const auto &node : graph->GetDirectNode()) { + GE_CHK_GRAPH_STATUS_RET(ge::NodeUtils::GetNodeUnknownShapeStatus(*node, is_in_unknown_shape_graph), + "[Get][ShapeStatus] of node[%s] failed!", node->GetName().c_str()); + if (is_in_unknown_shape_graph) { + break; + } + if (AttrUtils::GetBool(node->GetOpDesc(), ATTR_NAME_FORCE_UNKNOWN_SHAPE, forced_unknown) && forced_unknown) { + GELOGD("node %s was marked as unknown shape.", node->GetName().c_str()); + is_in_unknown_shape_graph = true; + break; + } + } + if (is_in_unknown_shape_graph) { + GELOGI("op:%s is in unknown shape graph, can not be deleted.", node->GetName().c_str()); + return SUCCESS; + } + bool is_shape_unknown = false; if (NodeUtils::GetNodeUnknownShapeStatus(*node, is_shape_unknown) == GRAPH_SUCCESS) { if (is_shape_unknown) { From d9916526deb062129c8692499e33ac6d7ba1deae Mon Sep 17 00:00:00 2001 From: lichun Date: Sat, 26 Jun 2021 17:04:34 +0800 Subject: [PATCH 2/3] ReshapeRemovePass_not_remove_reshape_in_dynamic_subgraph --- ge/graph/passes/reshape_remove_pass.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/graph/passes/reshape_remove_pass.cc b/ge/graph/passes/reshape_remove_pass.cc index 856fda71..7d79a3c3 100755 --- a/ge/graph/passes/reshape_remove_pass.cc +++ b/ge/graph/passes/reshape_remove_pass.cc @@ -47,7 +47,7 @@ Status ReshapeRemovePass::Run(NodePtr &node) { case kReshapeType: { bool is_in_unknown_shape_graph = false; bool forced_unknown = false; - for (const auto &node : graph->GetDirectNode()) { + for (const auto &node : node->GetOwnerComputeGraph()->GetDirectNode()) { GE_CHK_GRAPH_STATUS_RET(ge::NodeUtils::GetNodeUnknownShapeStatus(*node, is_in_unknown_shape_graph), "[Get][ShapeStatus] of node[%s] failed!", node->GetName().c_str()); if (is_in_unknown_shape_graph) { From b58cf1bc60d84ad2ed1ffadc8e4c8a5a57f00edc Mon Sep 17 00:00:00 2001 From: lichun Date: Sat, 26 Jun 2021 17:19:02 +0800 Subject: [PATCH 3/3] ReshapeRemovePass_not_remove_reshape_in_dynamic_subgraph --- ge/graph/passes/reshape_remove_pass.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/ge/graph/passes/reshape_remove_pass.cc b/ge/graph/passes/reshape_remove_pass.cc index 7d79a3c3..79ab88b5 100755 --- a/ge/graph/passes/reshape_remove_pass.cc +++ b/ge/graph/passes/reshape_remove_pass.cc @@ -27,6 +27,7 @@ namespace ge { namespace { const int kReshapeDataIndex = 0; +const char* const ATTR_NAME_FORCE_UNKNOWN_SHAPE = "_force_unknown_shape"; enum OpHashValue { kReshapeType = 0, kReformatType = 1,