From eaa26d45e9cbed7f594b37b931ce318de8302fe5 Mon Sep 17 00:00:00 2001 From: wangzhengjun Date: Thu, 20 May 2021 22:08:25 +0800 Subject: [PATCH] add OptimizeAfterStage1 --- ge/graph/manager/graph_manager.cc | 1 + ge/graph/optimize/graph_optimize.cc | 42 +++++++++++++++++++++++++++++++++++-- ge/graph/optimize/graph_optimize.h | 3 +++ metadef | 2 +- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/ge/graph/manager/graph_manager.cc b/ge/graph/manager/graph_manager.cc index d90c03d9..47ce4e52 100755 --- a/ge/graph/manager/graph_manager.cc +++ b/ge/graph/manager/graph_manager.cc @@ -818,6 +818,7 @@ Status GraphManager::PreRunOptimizeOriginalGraph(const GraphNodePtr &graph_node, GM_RUN_AND_DUMP_PERF("OptimizeSwitchOp", stages.preparer.SwitchOpOptimize, compute_graph); } GM_RUN_AND_DUMP_PERF("Optimize1", OptimizeStage1, compute_graph); + GM_RUN_AND_DUMP_PERF("OptimizeAfterStage1", stages.optimizer.OptimizeAfterStage1, compute_graph); GM_RUN_AND_DUMP_PERF("InferShape2", compute_graph->InferShapeInNeed); PassManager graph_pass; diff --git a/ge/graph/optimize/graph_optimize.cc b/ge/graph/optimize/graph_optimize.cc index 8cca5b5d..623baf92 100644 --- a/ge/graph/optimize/graph_optimize.cc +++ b/ge/graph/optimize/graph_optimize.cc @@ -144,7 +144,7 @@ Status GraphOptimize::OptimizeOriginalGraph(ComputeGraphPtr &compute_graph) { } auto graph_optimizer = instance_ptr->OpsKernelManagerObj().GetAllGraphOptimizerObjsByPriority(); - GELOGI("optimize by opskernel in original graph optimize phase. num of graph_optimizer is %lu.", + GELOGI("optimize by opskernel in original graph optimize phase. num of graph_optimizer is %zu.", graph_optimizer.size()); string exclude_core_Type = (core_type_ == kVectorCore) ? kAicoreEngine : kVectorEngine; GELOGD("[OptimizeOriginalGraph]: engine type will exclude: %s", exclude_core_Type.c_str()); @@ -179,7 +179,7 @@ Status GraphOptimize::OptimizeOriginalGraphJudgeInsert(ComputeGraphPtr &compute_ } auto graph_optimizer = instance_ptr->OpsKernelManagerObj().GetAllGraphOptimizerObjsByPriority(); - GELOGI("optimize by opskernel in original graph optimize phase. num of graph_optimizer is %lu.", + GELOGI("optimize by opskernel in judging insert phase. num of graph_optimizer is %zu.", graph_optimizer.size()); string exclude_core_Type = (core_type_ == kVectorCore) ? kAicoreEngine : kVectorEngine; if (graph_optimizer.size() != 0) { @@ -266,6 +266,44 @@ Status GraphOptimize::OptimizeGraphBeforeBuildForRts(ComputeGraphPtr &compute_gr return ret; } +Status GraphOptimize::OptimizeAfterStage1(ComputeGraphPtr &compute_graph) { + GE_CHECK_NOTNULL(compute_graph); + GELOGD("OptimizeAfterStage1 in"); + if (GetContext().GetHostExecFlag()) { + // graph exec on host, no need OptimizeAfterStage1 + return SUCCESS; + } + + Status ret = SUCCESS; + std::shared_ptr instance_ptr = ge::GELib::GetInstance(); + if (instance_ptr == nullptr || !instance_ptr->InitFlag()) { + REPORT_INNER_ERROR("E19999", "Gelib not init before, check invalid"); + GELOGE(GE_CLI_GE_NOT_INITIALIZED, "OptimizeAfterStage1 failed."); + return GE_CLI_GE_NOT_INITIALIZED; + } + + auto graph_optimizer = instance_ptr->OpsKernelManagerObj().GetAllGraphOptimizerObjsByPriority(); + GELOGI("Optimize by ops kernel in after stage1 phase, num of graph_optimizer is %zu.", graph_optimizer.size()); + string exclude_core_type = (core_type_ == kVectorCore) ? kAicoreEngine : kVectorEngine; + if (graph_optimizer.size() != 0) { + for (auto iter = graph_optimizer.begin(); iter != graph_optimizer.end(); ++iter) { + if (iter->first == exclude_core_type) { + GELOGI("[OptimizeAfterStage1]: engine type will exclude:%s.", exclude_core_type.c_str()); + continue; + } + GELOGI("Begin to optimize graph after stage1 by engine %s.", iter->first.c_str()); + ret = (iter->second)->OptimizeAfterStage1(*compute_graph); + if (ret != SUCCESS) { + REPORT_INNER_ERROR("E19999", "Call OptimizeAfterStage1 failed, ret:%d, engine_name:%s, " + "graph_name:%s.", ret, iter->first.c_str(), compute_graph->GetName().c_str()); + GELOGE(ret, "[OptimizeAfterStage1]: graph optimize failed, ret:%d.", ret); + return ret; + } + } + } + return ret; +} + Status GraphOptimize::SetOptions(const ge::GraphManagerOptions &options) { if (options.framework_type >= static_cast(domi::FrameworkType::FRAMEWORK_RESERVED)) { GELOGE(GE_GRAPH_OPTIONS_INVALID, "Optimize Type %d invalid.", options.framework_type); diff --git a/ge/graph/optimize/graph_optimize.h b/ge/graph/optimize/graph_optimize.h index 3a1960f7..702b7e33 100755 --- a/ge/graph/optimize/graph_optimize.h +++ b/ge/graph/optimize/graph_optimize.h @@ -58,6 +58,9 @@ class GraphOptimize { // for rts optimize before build to add attr and insert memcpy op Status OptimizeGraphBeforeBuildForRts(ComputeGraphPtr &compute_graph); + // optimize whole graph, using after stage1 + Status OptimizeAfterStage1(ComputeGraphPtr &graph); + // set options Status SetOptions(const GraphManagerOptions &options); diff --git a/metadef b/metadef index 05b2882f..82d81684 160000 --- a/metadef +++ b/metadef @@ -1 +1 @@ -Subproject commit 05b2882f8d0364d295aae6ed4ab818a6dc83ad9a +Subproject commit 82d8168408306116c0d69227ec33956ff988b316