@@ -191,21 +191,25 @@ graphStatus aclgrphParseTensorFlow(const char *model_file, const std::map<Ascend | |||||
GELOGI("AclgrphParse graph %s success.", ParserUtils::GetGraphName(graph).c_str()); | GELOGI("AclgrphParse graph %s success.", ParserUtils::GetGraphName(graph).c_str()); | ||||
return ge::SUCCESS; | return ge::SUCCESS; | ||||
} | } | ||||
void AddDumpOriginName(const std::string& subgraph_name, const ge::NodePtr parent_node, ge::NodePtr node) | |||||
{ | |||||
void AddDumpOriginName(const ge::NodePtr parent_node, const std::string& subgraph_name, ge::ComputeGraphPtr graph) { | |||||
if (parent_node == nullptr) { | |||||
return; // Root graph no need set dump origin name as parser always keep the origin node name | |||||
} | |||||
std::vector<std::string> original_names; | std::vector<std::string> original_names; | ||||
auto parend_desc = parent_node->GetOpDesc(); | |||||
(void)ge::AttrUtils::GetListStr(parend_desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
(void)ge::AttrUtils::GetListStr(parent_node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
if (original_names.empty()) { | if (original_names.empty()) { | ||||
original_names.emplace_back(parent_node->GetName()); | original_names.emplace_back(parent_node->GetName()); | ||||
} | } | ||||
// for fusion node also used original_names[0] | // for fusion node also used original_names[0] | ||||
(void)original_names[0].append("/").append(subgraph_name).append("/").append(node->GetName()); | |||||
if (!ge::AttrUtils::SetListStr(node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names)) { | |||||
GELOGW("Set %s to %s fail.", ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES.c_str(), node->GetOpDesc()->GetName().c_str()); | |||||
std::string prefix = original_names[0].append("/").append(subgraph_name).append("/"); | |||||
for (const ge::NodePtr &node : graph->GetDirectNode()) { | |||||
original_names[0] = prefix + node->GetName(); | |||||
if (!ge::AttrUtils::SetListStr(node->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names)) { | |||||
GELOGW("Set dump origin name to %s fail.", node->GetOpDesc()->GetName().c_str()); | |||||
} | |||||
GELOGD("Add dump origin name %s for node %s.", original_names[0].c_str(), node->GetName().c_str()); | |||||
} | } | ||||
GELOGD("Add dump origin name %s for node %s.", original_names[0].c_str(), node->GetName().c_str()); | |||||
} | } | ||||
} // namespace ge | } // namespace ge | ||||
@@ -273,6 +277,7 @@ Status GenSubgraphParseTasks(const ge::ComputeGraphPtr &parent_graph, std::deque | |||||
} | } | ||||
Status PostOpProcessForSubgraph(const ParseArg &arg) { | Status PostOpProcessForSubgraph(const ParseArg &arg) { | ||||
AddDumpOriginName(arg.parent_node, arg.subgraph_name, arg.graph); | |||||
if (arg.parent_node == nullptr) { | if (arg.parent_node == nullptr) { | ||||
return SUCCESS; | return SUCCESS; | ||||
} | } | ||||
@@ -297,7 +302,6 @@ Status PostOpProcessForSubgraph(const ParseArg &arg) { | |||||
if ((node->GetOpDesc() == nullptr) || (node->GetType() == "Variable") || (node->GetType() == "VariableV2")) { | if ((node->GetOpDesc() == nullptr) || (node->GetType() == "Variable") || (node->GetType() == "VariableV2")) { | ||||
continue; | continue; | ||||
} | } | ||||
AddDumpOriginName(arg.subgraph_name, arg.parent_node, node); | |||||
node->GetOpDesc()->SetName(node->GetOwnerComputeGraph()->GetName() + "/" + node->GetName()); | node->GetOpDesc()->SetName(node->GetOwnerComputeGraph()->GetName() + "/" + node->GetName()); | ||||
} | } | ||||
@@ -158,7 +158,7 @@ void STestTensorflowParser::RegisterCustomOp() { | |||||
domi::OpRegistry::Instance()->registrationDatas.clear(); | domi::OpRegistry::Instance()->registrationDatas.clear(); | ||||
} | } | ||||
extern void AddDumpOriginName(const std::string& subgraph_name, const ge::NodePtr parent_node, ge::NodePtr node); | |||||
void AddDumpOriginName(const ge::NodePtr parent_node, const std::string& subgraph_name, ge::ComputeGraphPtr graph); | |||||
namespace { | namespace { | ||||
NodeDef* AddNode(GraphDef& graph, string type, string name) { | NodeDef* AddNode(GraphDef& graph, string type, string name) { | ||||
@@ -4291,35 +4291,43 @@ TEST_F(STestTensorflowParser, tensorflow_optimizer_fmk_fusion_op) { | |||||
TEST_F(STestTensorflowParser, AddDumpOriginName_test) | TEST_F(STestTensorflowParser, AddDumpOriginName_test) | ||||
{ | { | ||||
GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||||
ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | |||||
ge::OpDescPtr data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::WHILE); | |||||
data_op->SetName("WHILE0"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr while0 = graph->AddNode(data_op); | |||||
data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::LOOPCOND); | |||||
data_op->SetName("COND0"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr cond0 = graph->AddNode(data_op); | |||||
AddDumpOriginName(std::string("while"), while0, cond0); | |||||
data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::DATA); | |||||
data_op->SetName("Data1"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr data1 = graph->AddNode(data_op); | |||||
AddDumpOriginName(std::string("cond"), cond0, data1); | |||||
auto desc = data1->GetOpDesc(); | |||||
ge::ComputeGraphPtr parent_graph = std::make_shared<ge::ComputeGraph>("parent_graph"); | |||||
ge::OpDescPtr parent = std::make_shared<ge::OpDesc>(); | |||||
parent->SetType("Foo"); | |||||
parent->SetName("foo"); | |||||
ge::NodePtr foo = parent_graph->AddNode(parent); | |||||
ge::ComputeGraphPtr sub_graph = std::make_shared<ge::ComputeGraph>("sub_graph"); | |||||
auto child = std::make_shared<ge::OpDesc>(); | |||||
child->SetType("Bar"); | |||||
child->SetName("bar"); | |||||
ge::NodePtr bar = sub_graph->AddNode(child); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
std::vector<std::string> original_names; | std::vector<std::string> original_names; | ||||
(void)ge::AttrUtils::GetListStr(desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.empty(), false); | |||||
EXPECT_EQ(original_names[0], "WHILE0/while/COND0/cond/Data1"); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 1U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar"); | |||||
(void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
original_names.clear(); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 1U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar/f/bar"); | |||||
original_names.push_back("abc"); | |||||
(void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
original_names.clear(); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 2U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar/f/bar/f/bar"); | |||||
EXPECT_EQ(original_names[1], "abc"); | |||||
} | } | ||||
} // namespace ge | } // namespace ge |
@@ -169,7 +169,7 @@ static Status ParseParamByOpFunc(const ge::Operator &op_src, ge::Operator& op_de | |||||
return SUCCESS; | return SUCCESS; | ||||
} | } | ||||
extern void AddDumpOriginName(const std::string& subgraph_name, const ge::NodePtr parent_node, ge::NodePtr node); | |||||
void AddDumpOriginName(const ge::NodePtr parent_node, const std::string& subgraph_name, ge::ComputeGraphPtr graph); | |||||
void UtestTensorflowParser::RegisterCustomOp() { | void UtestTensorflowParser::RegisterCustomOp() { | ||||
REGISTER_CUSTOM_OP("Add") | REGISTER_CUSTOM_OP("Add") | ||||
@@ -4779,35 +4779,43 @@ TEST_F(UtestTensorflowParser, tensorflow_ComputeArgRange) | |||||
TEST_F(UtestTensorflowParser, AddDumpOriginName_test) | TEST_F(UtestTensorflowParser, AddDumpOriginName_test) | ||||
{ | { | ||||
GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||||
ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | |||||
ge::OpDescPtr data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::WHILE); | |||||
data_op->SetName("WHILE0"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr while0 = graph->AddNode(data_op); | |||||
ge::ComputeGraphPtr parent_graph = std::make_shared<ge::ComputeGraph>("parent_graph"); | |||||
ge::OpDescPtr parent = std::make_shared<ge::OpDesc>(); | |||||
parent->SetType("Foo"); | |||||
parent->SetName("foo"); | |||||
ge::NodePtr foo = parent_graph->AddNode(parent); | |||||
data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::LOOPCOND); | |||||
data_op->SetName("COND0"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr cond0 = graph->AddNode(data_op); | |||||
AddDumpOriginName(std::string("while"), while0, cond0); | |||||
data_op = std::make_shared<ge::OpDesc>(); | |||||
data_op->SetType(parser::DATA); | |||||
data_op->SetName("Data1"); | |||||
data_op->AddInputDesc(ge::GeTensorDesc()); | |||||
data_op->AddOutputDesc(ge::GeTensorDesc()); | |||||
ge::NodePtr data1 = graph->AddNode(data_op); | |||||
AddDumpOriginName(std::string("cond"), cond0, data1); | |||||
ge::ComputeGraphPtr sub_graph = std::make_shared<ge::ComputeGraph>("sub_graph"); | |||||
auto child = std::make_shared<ge::OpDesc>(); | |||||
child->SetType("Bar"); | |||||
child->SetName("bar"); | |||||
ge::NodePtr bar = sub_graph->AddNode(child); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
auto desc = data1->GetOpDesc(); | |||||
std::vector<std::string> original_names; | std::vector<std::string> original_names; | ||||
(void)ge::AttrUtils::GetListStr(desc, ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.empty(), false); | |||||
EXPECT_EQ(original_names[0], "WHILE0/while/COND0/cond/Data1"); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 1U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar"); | |||||
(void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
original_names.clear(); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 1U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar/f/bar"); | |||||
original_names.push_back("abc"); | |||||
(void)ge::AttrUtils::SetListStr(foo->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
AddDumpOriginName(foo, "f", sub_graph); | |||||
original_names.clear(); | |||||
(void)ge::AttrUtils::GetListStr(bar->GetOpDesc(), ge::ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_names); | |||||
EXPECT_EQ(original_names.size(), 2U); | |||||
EXPECT_EQ(original_names[0], "foo/f/bar/f/bar/f/bar"); | |||||
EXPECT_EQ(original_names[1], "abc"); | |||||
} | } | ||||
} // namespace ge | } // namespace ge |