From bf4c4aabf84a574fc339ea1c4c6abe89660432ca Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 17 Mar 2021 20:22:31 +0800 Subject: [PATCH 1/9] Fix bug of single_op inferdepend. --- ge/single_op/single_op_model.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 49dde9c4..31b51e61 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -44,6 +44,7 @@ namespace ge { namespace { const size_t kDataOutputNum = 1; + bool NeedHybridModel(GeModelPtr &ge_model) { auto tasks = ge_model->GetModelTaskDefPtr()->task(); int32_t kernel_task_num = 0; From 751079bdcdf4a792cf2fab7a0e9b96cb325503e9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 17 Mar 2021 20:57:03 +0800 Subject: [PATCH 2/9] Fix bug of single_op inferdepend. --- ge/generator/ge_generator.cc | 18 +++++++++++++++++- ge/single_op/single_op_model.cc | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index d7bdbdae..875cb396 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -663,6 +663,20 @@ namespace { } return SUCCESS; } + + Status CheckNoAicore(const ComputeGraphPtr &graph, bool &no_aicore) { + no_aicore = true; + for (const auto &node : graph->GetDirectNode()) { + GE_CHECK_NOTNULL(node); + auto op_desc = node->GetOpDesc(); + GE_CHECK_NOTNULL(op_desc); + if (op_desc->GetOpEngineName() == kAIcoreEngine) { + no_aicore = false; + return SUCCESS; + } + } + return SUCCESS; + } } Status GeGenerator::CheckForSingleOp(OpDescPtr &op_desc, const vector &inputs, @@ -745,7 +759,9 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in bool all_shape = false; (void)AttrUtils::GetBool(op_desc, kAicpuAllshape, all_shape); - if (all_shape) { + bool no_aicore = true; + GE_CHK_STATUS_RET_NOLOG(CheckNoAicore(root_graph, no_aicore)); + if (all_shape && no_aicore) { GELOGD("Get aicpu all_shape kernel!"); vector inputs_dynamic; vector outputs_dynamic; diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 31b51e61..840a7183 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -44,20 +44,46 @@ namespace ge { namespace { const size_t kDataOutputNum = 1; +Status IfInferDepend(GeModelPtr &ge_model, bool &flag) { + auto comp_graph = GraphUtils::GetComputeGraph(ge_model->GetGraph()); + GE_CHECK_NOTNULL(comp_graph); + for (const auto &node : comp_graph->GetAllNodes()) { + auto op_desc = node->GetOpDesc(); + GE_CHECK_NOTNULL(op_desc); + const auto &depends = op_desc->GetOpInferDepends(); + if (!depends.empty()) { + flag = true; + return SUCCESS; + } + } + return SUCCESS; +} -bool NeedHybridModel(GeModelPtr &ge_model) { +Status NeedHybridModel(GeModelPtr &ge_model, bool &flag) { + bool infer_depend_flag = false; + GE_CHK_STATUS_RET_NOLOG(IfInferDepend(ge_model, infer_depend_flag)); auto tasks = ge_model->GetModelTaskDefPtr()->task(); int32_t kernel_task_num = 0; for (int i = 0; i < tasks.size(); ++i) { auto task_type = static_cast(tasks[i].type()); if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { - kernel_task_num++; - if (kernel_task_num > 1) { - return true; + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : + task_def.kernel_with_handle().context(); + auto kernel_type = static_cast(context.kernel_type()); + if (kernel_type == ccKernelType::TE) { + if (infer_depend_flag) { + flag = true; + return SUCCESS; + } + kernel_task_num++; + if (kernel_task_num > 1) { + flag = true; + return SUCCESS; + } } } } - return false; + return SUCCESS; } } // namespace @@ -504,7 +530,9 @@ Status SingleOpModel::BuildDynamicOp(StreamResource &resource, DynamicSingleOp & auto ge_model = model_helper_.GetGeModel(); GE_CHECK_NOTNULL(ge_model); - if (NeedHybridModel(ge_model)) { + bool need_hybrid_model = false; + GE_CHK_STATUS_RET_NOLOG(NeedHybridModel(ge_model, need_hybrid_model)); + if (need_hybrid_model) { GELOGD("Build single op HybridModel."); GE_CHK_STATUS_RET_NOLOG(hybrid::NodeExecutorManager::GetInstance().EnsureInitialized()); auto root_model = model_helper_.GetGeRootModel(); From a53a705c6fa10913acc9805b07e721e6ea411cb2 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 11:24:16 +0800 Subject: [PATCH 3/9] Add ut. --- ge/generator/ge_generator.cc | 1 - ge/single_op/single_op_model.cc | 4 ++-- tests/ut/ge/single_op/single_op_model_unittest.cc | 28 ++++++++++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index 875cb396..b6047a45 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -665,7 +665,6 @@ namespace { } Status CheckNoAicore(const ComputeGraphPtr &graph, bool &no_aicore) { - no_aicore = true; for (const auto &node : graph->GetDirectNode()) { GE_CHECK_NOTNULL(node); auto op_desc = node->GetOpDesc(); diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 840a7183..3446e12b 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -61,7 +61,7 @@ Status IfInferDepend(GeModelPtr &ge_model, bool &flag) { Status NeedHybridModel(GeModelPtr &ge_model, bool &flag) { bool infer_depend_flag = false; - GE_CHK_STATUS_RET_NOLOG(IfInferDepend(ge_model, infer_depend_flag)); + GE_CHK_STATUS_RET(IfInferDepend(ge_model, infer_depend_flag), "[Check][IfInferDepend] failed."); auto tasks = ge_model->GetModelTaskDefPtr()->task(); int32_t kernel_task_num = 0; for (int i = 0; i < tasks.size(); ++i) { @@ -531,7 +531,7 @@ Status SingleOpModel::BuildDynamicOp(StreamResource &resource, DynamicSingleOp & auto ge_model = model_helper_.GetGeModel(); GE_CHECK_NOTNULL(ge_model); bool need_hybrid_model = false; - GE_CHK_STATUS_RET_NOLOG(NeedHybridModel(ge_model, need_hybrid_model)); + GE_CHK_STATUS_RET_NOLOG(NeedHybridModel(ge_model, need_hybrid_model), "[Check][NeedHybridModel] failed."); if (need_hybrid_model) { GELOGD("Build single op HybridModel."); GE_CHK_STATUS_RET_NOLOG(hybrid::NodeExecutorManager::GetInstance().EnsureInitialized()); diff --git a/tests/ut/ge/single_op/single_op_model_unittest.cc b/tests/ut/ge/single_op/single_op_model_unittest.cc index eaf4564a..dadabaf6 100644 --- a/tests/ut/ge/single_op/single_op_model_unittest.cc +++ b/tests/ut/ge/single_op/single_op_model_unittest.cc @@ -17,7 +17,6 @@ #include #include -//#include "cce/taskdown_common.hpp" #include "graph/load/model_manager/model_utils.h" #include "graph/utils/graph_utils.h" #include "runtime/rt.h" @@ -196,4 +195,31 @@ TEST_F(UtestSingleOpModel, test_op_task_get_profiler_args) { ASSERT_EQ(model_id, 1); } +TEST_F(UtestSingleOpModel, test_build_dynamic_op) { + string model_data_str = "123456789"; + SingleOpModel model("model", model_data_str.c_str(), model_data_str.size()); + model.netoutput_op_ = make_shared("NetOutput", "NetOutput"); + model.model_helper_.model_ = ge::MakeShared(); + + // make graph + auto compute_graph = make_shared("graph"); + auto data_op = make_shared("Data", DATA); + auto data_node = compute_graph->AddNode(data_op); + auto graph = GraphUtils::CreateGraphFromComputeGraph(compute_graph); + model.model_helper_.model_->SetGraph(graph); + + // set task_def + auto model_task_def = make_shared(); + domi::TaskDef *task_def = model_task_def->add_task(); + task_def->set_type(RT_MODEL_TASK_KERNEL); + domi::KernelDef *kernel_def = task_def->mutable_kernel(); + domi::KernelContext *context = kernel_def->mutable_context(); + context->set_kernel_type(2); // ccKernelType::TE + model.model_helper_.model_->SetModelTaskDef(model_task_def); + + std::mutex stream_mu_; + DynamicSingleOp dynamic_single_op(0, &stream_mu_, nullptr); + StreamResource res((uintptr_t)1); + model.BuildDynamicOp(res, dynamic_single_op); +} From 0a79ca0a06115b075711eeea24404d43d16e90a1 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 11:29:15 +0800 Subject: [PATCH 4/9] Add ut. --- ge/generator/ge_generator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index b6047a45..d9d56085 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -759,7 +759,7 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in bool all_shape = false; (void)AttrUtils::GetBool(op_desc, kAicpuAllshape, all_shape); bool no_aicore = true; - GE_CHK_STATUS_RET_NOLOG(CheckNoAicore(root_graph, no_aicore)); + GE_CHK_STATUS_RET(CheckNoAicore(root_graph, no_aicore), "[Check][NoAicore] failed."); if (all_shape && no_aicore) { GELOGD("Get aicpu all_shape kernel!"); vector inputs_dynamic; From fc4b153af0d21d742a8e84a92e185b7b6802666d Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 13:53:42 +0800 Subject: [PATCH 5/9] Add ut. --- ge/single_op/single_op_model.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 3446e12b..558c2a14 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -61,7 +61,7 @@ Status IfInferDepend(GeModelPtr &ge_model, bool &flag) { Status NeedHybridModel(GeModelPtr &ge_model, bool &flag) { bool infer_depend_flag = false; - GE_CHK_STATUS_RET(IfInferDepend(ge_model, infer_depend_flag), "[Check][IfInferDepend] failed."); + GE_CHK_STATUS_RET(IfInferDepend(ge_model, infer_depend_flag), "[Check][InferDepend] failed."); auto tasks = ge_model->GetModelTaskDefPtr()->task(); int32_t kernel_task_num = 0; for (int i = 0; i < tasks.size(); ++i) { @@ -531,7 +531,7 @@ Status SingleOpModel::BuildDynamicOp(StreamResource &resource, DynamicSingleOp & auto ge_model = model_helper_.GetGeModel(); GE_CHECK_NOTNULL(ge_model); bool need_hybrid_model = false; - GE_CHK_STATUS_RET_NOLOG(NeedHybridModel(ge_model, need_hybrid_model), "[Check][NeedHybridModel] failed."); + GE_CHK_STATUS_RET(NeedHybridModel(ge_model, need_hybrid_model), "[Check][NeedHybridModel] failed."); if (need_hybrid_model) { GELOGD("Build single op HybridModel."); GE_CHK_STATUS_RET_NOLOG(hybrid::NodeExecutorManager::GetInstance().EnsureInitialized()); From 94a3855182d4b907ca7dd9149877ff985c31f690 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 13:55:42 +0800 Subject: [PATCH 6/9] Fix error. --- ge/single_op/single_op_model.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index 558c2a14..a5550deb 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -67,8 +67,8 @@ Status NeedHybridModel(GeModelPtr &ge_model, bool &flag) { for (int i = 0; i < tasks.size(); ++i) { auto task_type = static_cast(tasks[i].type()); if (task_type == RT_MODEL_TASK_KERNEL || task_type == RT_MODEL_TASK_ALL_KERNEL) { - const auto &context = task_type == RT_MODEL_TASK_KERNEL ? task_def.kernel().context() : - task_def.kernel_with_handle().context(); + const auto &context = task_type == RT_MODEL_TASK_KERNEL ? tasks[i].kernel().context() : + tasks[i].kernel_with_handle().context(); auto kernel_type = static_cast(context.kernel_type()); if (kernel_type == ccKernelType::TE) { if (infer_depend_flag) { From d7a758da6402e1ebfa981a15647905a8ffa9732f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 15:09:52 +0800 Subject: [PATCH 7/9] Fix error. --- ge/generator/ge_generator.cc | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index d9d56085..2dc9c810 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -664,19 +664,22 @@ namespace { return SUCCESS; } - Status CheckNoAicore(const ComputeGraphPtr &graph, bool &no_aicore) { + bool CheckNoAicore(const ComputeGraphPtr &graph) { for (const auto &node : graph->GetDirectNode()) { - GE_CHECK_NOTNULL(node); + if (node == nullptr) { + continue; + } auto op_desc = node->GetOpDesc(); - GE_CHECK_NOTNULL(op_desc); + if (op_desc == nullptr) { + continue; + } if (op_desc->GetOpEngineName() == kAIcoreEngine) { - no_aicore = false; - return SUCCESS; + return false; } } - return SUCCESS; + return true; } -} +} // namespace Status GeGenerator::CheckForSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs) { @@ -758,9 +761,7 @@ Status GeGenerator::BuildSingleOp(OpDescPtr &op_desc, const vector &in bool all_shape = false; (void)AttrUtils::GetBool(op_desc, kAicpuAllshape, all_shape); - bool no_aicore = true; - GE_CHK_STATUS_RET(CheckNoAicore(root_graph, no_aicore), "[Check][NoAicore] failed."); - if (all_shape && no_aicore) { + if (all_shape && CheckNoAicore(root_graph)) { GELOGD("Get aicpu all_shape kernel!"); vector inputs_dynamic; vector outputs_dynamic; From bdb093ea8aa6b720ed9670d4db7e3e327cce5030 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 16:34:53 +0800 Subject: [PATCH 8/9] Fix error. --- ge/generator/ge_generator.cc | 28 +++++++++++++------------- inc/framework/generator/ge_generator.h | 1 + tests/ut/ge/generator/ge_generator_unittest.cc | 7 +++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/ge/generator/ge_generator.cc b/ge/generator/ge_generator.cc index 2dc9c810..075cd922 100644 --- a/ge/generator/ge_generator.cc +++ b/ge/generator/ge_generator.cc @@ -663,23 +663,23 @@ namespace { } return SUCCESS; } +} - bool CheckNoAicore(const ComputeGraphPtr &graph) { - for (const auto &node : graph->GetDirectNode()) { - if (node == nullptr) { - continue; - } - auto op_desc = node->GetOpDesc(); - if (op_desc == nullptr) { - continue; - } - if (op_desc->GetOpEngineName() == kAIcoreEngine) { - return false; - } +bool GeGenerator::CheckNoAicore(const ComputeGraphPtr &graph) { + for (const auto &node : graph->GetDirectNode()) { + if (node == nullptr) { + continue; + } + auto op_desc = node->GetOpDesc(); + if (op_desc == nullptr) { + continue; + } + if (op_desc->GetOpEngineName() == kAIcoreEngine) { + return false; } - return true; } -} // namespace + return true; +} Status GeGenerator::CheckForSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs) { diff --git a/inc/framework/generator/ge_generator.h b/inc/framework/generator/ge_generator.h index 2d7d007b..77109e5f 100644 --- a/inc/framework/generator/ge_generator.h +++ b/inc/framework/generator/ge_generator.h @@ -97,6 +97,7 @@ class GE_FUNC_VISIBILITY GeGenerator { Status BuildSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs, const string &model_file_name, OpEngineType engine_type, ModelBufferData &model_buff, bool is_offline = true); + bool CheckNoAicore(const ComputeGraphPtr &graph); Status CheckForSingleOp(OpDescPtr &op_desc, const vector &inputs, const vector &outputs); class Impl; diff --git a/tests/ut/ge/generator/ge_generator_unittest.cc b/tests/ut/ge/generator/ge_generator_unittest.cc index 598ac8dd..775cf2f3 100644 --- a/tests/ut/ge/generator/ge_generator_unittest.cc +++ b/tests/ut/ge/generator/ge_generator_unittest.cc @@ -87,6 +87,13 @@ TEST_F(UtestGeGenerator, test_build_single_op_online) { EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, ENGINE_AIVECTOR, model_buffer), FAILED); } +TEST_F(UtestGeGenerator, test_build_single_op_online) { + GeGenerator generator; + generator.Initialize({}); + auto graph = MakeGraph(); + EXPECT_EQ(generator.CheckNoAicore(graph), true); +} + TEST_F(UtestGeGenerator, test_graph_manager) { GraphManager graph_manager; GraphPartitioner graph_partitioner; From d865ad49bf9e7a8e23f907cb1dd651ff48b63775 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Mar 2021 16:38:02 +0800 Subject: [PATCH 9/9] Fix error. --- tests/ut/ge/generator/ge_generator_unittest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ut/ge/generator/ge_generator_unittest.cc b/tests/ut/ge/generator/ge_generator_unittest.cc index 775cf2f3..d80281c3 100644 --- a/tests/ut/ge/generator/ge_generator_unittest.cc +++ b/tests/ut/ge/generator/ge_generator_unittest.cc @@ -87,7 +87,7 @@ TEST_F(UtestGeGenerator, test_build_single_op_online) { EXPECT_EQ(generator.BuildSingleOpModel(op_desc, inputs, outputs, ENGINE_AIVECTOR, model_buffer), FAILED); } -TEST_F(UtestGeGenerator, test_build_single_op_online) { +TEST_F(UtestGeGenerator, test_check_aicore) { GeGenerator generator; generator.Initialize({}); auto graph = MakeGraph();