From 6d90feb0bd1084c4b38de9350ec76036ead546cc Mon Sep 17 00:00:00 2001 From: chenfei Date: Fri, 9 Jul 2021 20:25:32 +0800 Subject: [PATCH] clone graph if it is used by two partial --- .../frontend/optimizer/irpass/partial_eliminate.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mindspore/ccsrc/frontend/optimizer/irpass/partial_eliminate.h b/mindspore/ccsrc/frontend/optimizer/irpass/partial_eliminate.h index 9258b13f174..6338a382988 100644 --- a/mindspore/ccsrc/frontend/optimizer/irpass/partial_eliminate.h +++ b/mindspore/ccsrc/frontend/optimizer/irpass/partial_eliminate.h @@ -117,14 +117,19 @@ class ChoicePartialEliminater : public AnfVisitor { } // check funcgraph should be used once only. - for (auto &fg_node : fg_list_) { + for (size_t i = 0; i < fg_list_.size(); i++) { + auto fg_node = fg_list_[i]; auto fg = GetValueNode(fg_node); MS_EXCEPTION_IF_NULL(fg); if (fg->func_graph_cnodes_index().size() != 1) { for (auto iter : fg->func_graph_cnodes_index()) { - MS_LOG(ERROR) << "fg user: " << iter.first->first->DebugString(1) << ", index: " << iter.first->second; + MS_LOG(DEBUG) << "fg user: " << iter.first->first->DebugString(1) << ", index: " << iter.first->second; } - MS_LOG(EXCEPTION) << "fg is used multiple times: " << fg->ToString(); + // If a graph is used by 2 or more partial nodes at the same time, clone the graph. + auto new_fg = BasicClone(fg); + auto new_fg_node = NewValueNode(new_fg); + fg->manager()->Replace(fg_node, new_fg_node); + fg_list_[i] = new_fg_node; } } return true;