From 421ad5b8fada2393026ac91c909c07d71dc7873e Mon Sep 17 00:00:00 2001 From: lichun Date: Wed, 30 Jun 2021 10:48:02 +0800 Subject: [PATCH 1/2] add global step info for known subgraph in unknown model and generate om for remained cases when some single op cases run atc failed --- ge/graph/load/model_manager/davinci_model.h | 1 + .../node_executor/compiledsubgraph/known_node_executor.cc | 2 ++ ge/offline/main.cc | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ge/graph/load/model_manager/davinci_model.h b/ge/graph/load/model_manager/davinci_model.h index 1e964855..daf0c7e6 100755 --- a/ge/graph/load/model_manager/davinci_model.h +++ b/ge/graph/load/model_manager/davinci_model.h @@ -300,6 +300,7 @@ class DavinciModel { return op_list_.at(index); } + void SetGlobalStep(void *global_step) { global_step_addr_ = global_step; } void *GetGlobalStep() const { return global_step_addr_; } // get task info for profiling diff --git a/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc b/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc index 4db223e0..4635ac69 100755 --- a/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc +++ b/ge/hybrid/node_executor/compiledsubgraph/known_node_executor.cc @@ -204,6 +204,8 @@ Status KnownNodeExecutor::LoadTask(const HybridModel &model, const NodePtr &node davinci_model->SetId(model.GetModelId()); davinci_model->SetDumpModelName(model.GetModelName()); davinci_model->SetOmName(model.GetOmName()); + TensorValue *global_step_var = model.GetVariable(NODE_NAME_GLOBAL_STEP); + davinci_model->SetGlobalStep(global_step_var->MutableData()); // set model id as root node's node id davinci_model->SetSubModelId(node->GetOpDesc()->GetId()); GELOGD("KnownNodeExecutor::LoadTask node id %ld.", node->GetOpDesc()->GetId()); diff --git a/ge/offline/main.cc b/ge/offline/main.cc index 4837653f..9171c716 100755 --- a/ge/offline/main.cc +++ b/ge/offline/main.cc @@ -1149,9 +1149,9 @@ domi::Status GenerateSingleOp(const std::string& json_file_path) { if (ret != SUCCESS) { DOMI_LOGE("Compile op failed. ge ret = %u, op index = %d", ret, index); ret = domi::FAILED; - break; + } else { + GELOGI("Compile op success. op index = %d, output = %s", index, output_path.c_str()); } - GELOGI("Compile op success. op index = %d, output = %s", index, output_path.c_str()); index += 1; } From af5f4c53d88457900e797fd850e0e31c31ea3a4d Mon Sep 17 00:00:00 2001 From: lichun Date: Wed, 30 Jun 2021 14:20:32 +0800 Subject: [PATCH 2/2] add global step info for known subgraph in unknown model and generate om for remained cases when some single op cases run atc failed --- .../ge/hybrid/known_node_executor_unittest.cc | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/ut/ge/hybrid/known_node_executor_unittest.cc b/tests/ut/ge/hybrid/known_node_executor_unittest.cc index 98e985f7..7d32f712 100644 --- a/tests/ut/ge/hybrid/known_node_executor_unittest.cc +++ b/tests/ut/ge/hybrid/known_node_executor_unittest.cc @@ -88,4 +88,33 @@ TEST_F(UnknownNodeExecutorTest, TestParseAttrForAllocatingOutputs) { ASSERT_EQ(node_item.ref_outputs[1], const_node); ASSERT_EQ(node_item.reuse_inputs.size(), 1); ASSERT_EQ(node_item.reuse_inputs[0], 0); +} + +TEST_F(UnknownNodeExecutorTest, TestSetGlobalStepInLoadTask) { +OpDescPtr op_desc = CreateOpDesc("PartitionedCall", "PartitionedCall"); +auto node = root_graph->AddNode(op_desc); +node->SetOwnerComputeGraph(root_graph); +auto sub_graph = BuildDataDirectConnectGraph(); +sub_graph->SetParentGraph(root_graph); +sub_graph->SetParentNode(node); +node->GetOpDesc()->AddSubgraphName("subgraph"); +node->GetOpDesc()->SetSubgraphInstanceName(0, "subgraph"); +root_graph->AddSubgraph("subgraph", sub_graph); + +ComputeGraphPtr root_graph = std::make_shared("root_graph"); +GeRootModelPtr ge_root_model = make_shared(root_graph); +HybridModel hybrid_model(ge_root_model); +hybrid_model.model_id_ = 0; +hybrid_model.model_name_ = "root_model"; +hybrid_model.om_name_ = "temp_om"; +auto *step_id = new int64_t[1]; +step_id[0] = 520; +TensorValue tensor_value((void *)step_id, sizeof(step_id)); +hybrid_model.variable_tensors_.insert({"ge_global_step", make_unique(tensor_value)}); + +KnownNodeExecutor known_node_executor; +shared_ptr task = nullptr; +Status ret = known_node_executor.LoadTask(hybrid_model, node, task); +EXPECT_EQ(*(task->davinci_model_->global_step_addr_), 520); +EXPECT_EQ(known_node_executor.LoadTask(hybrid_model, node, task), SUCCESS); } \ No newline at end of file