Browse Source

Pre Merge pull request !623 from 薛鹏/bugfix

pull/623/MERGE
薛鹏 Gitee 2 years ago
parent
commit
b30b9b7039
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 85 additions and 65 deletions
  1. +14
    -10
      parser/tensorflow/tensorflow_parser.cc
  2. +37
    -29
      tests/st/testcase/test_tensorflow_parser.cc
  3. +34
    -26
      tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc

+ 14
- 10
parser/tensorflow/tensorflow_parser.cc View File

@@ -191,21 +191,25 @@ graphStatus aclgrphParseTensorFlow(const char *model_file, const std::map<Ascend
GELOGI("AclgrphParse graph %s success.", ParserUtils::GetGraphName(graph).c_str());
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;
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()) {
original_names.emplace_back(parent_node->GetName());
}
// 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

@@ -273,6 +277,7 @@ Status GenSubgraphParseTasks(const ge::ComputeGraphPtr &parent_graph, std::deque
}

Status PostOpProcessForSubgraph(const ParseArg &arg) {
AddDumpOriginName(arg.parent_node, arg.subgraph_name, arg.graph);
if (arg.parent_node == nullptr) {
return SUCCESS;
}
@@ -297,7 +302,6 @@ Status PostOpProcessForSubgraph(const ParseArg &arg) {
if ((node->GetOpDesc() == nullptr) || (node->GetType() == "Variable") || (node->GetType() == "VariableV2")) {
continue;
}
AddDumpOriginName(arg.subgraph_name, arg.parent_node, node);
node->GetOpDesc()->SetName(node->GetOwnerComputeGraph()->GetName() + "/" + node->GetName());
}



+ 37
- 29
tests/st/testcase/test_tensorflow_parser.cc View File

@@ -158,7 +158,7 @@ void STestTensorflowParser::RegisterCustomOp() {
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 {
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)
{
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;
(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

+ 34
- 26
tests/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_parser_unittest.cc View File

@@ -169,7 +169,7 @@ static Status ParseParamByOpFunc(const ge::Operator &op_src, ge::Operator& op_de
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() {
REGISTER_CUSTOM_OP("Add")
@@ -4779,35 +4779,43 @@ TEST_F(UtestTensorflowParser, tensorflow_ComputeArgRange)
TEST_F(UtestTensorflowParser, AddDumpOriginName_test)
{
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;
(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

Loading…
Cancel
Save