Browse Source

!27323 move EliminateRedundantParameters to graph_builder

Merge pull request !27323 from DeshiChen/1206_elim_params
tags/v1.6.0
i-robot Gitee 4 years ago
parent
commit
4711194524
5 changed files with 26 additions and 30 deletions
  1. +0
    -1
      mindspore/ccsrc/backend/optimizer/graph_kernel/arithmetic_simplify.cc
  2. +26
    -0
      mindspore/ccsrc/backend/optimizer/graph_kernel/core/graph_builder.cc
  3. +0
    -3
      mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_expander.cc
  4. +0
    -23
      mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_helper.cc
  5. +0
    -3
      mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_helper.h

+ 0
- 1
mindspore/ccsrc/backend/optimizer/graph_kernel/arithmetic_simplify.cc View File

@@ -650,7 +650,6 @@ bool ArithmeticSimplify::Run(const FuncGraphPtr &func_graph) {
new_funcgraph->set_attr(FUNC_GRAPH_ATTR_GRAPH_KERNEL, sub_graph->get_attr(FUNC_GRAPH_ATTR_GRAPH_KERNEL));
auto cnode = node->cast<CNodePtr>();
AnfNodePtrList inputs(cnode->inputs().begin() + 1, cnode->inputs().end());
EliminateRedundantParameters(new_funcgraph, &inputs);
auto new_node = CreateNewFuseCNode(func_graph, new_funcgraph, inputs);
mng->Replace(node, new_node);
mng->AddFuncGraph(new_funcgraph);


+ 26
- 0
mindspore/ccsrc/backend/optimizer/graph_kernel/core/graph_builder.cc View File

@@ -187,6 +187,31 @@ void ReplaceNewFuseCNode(const FuncGraphPtr &func_graph, const AnfNodePtr &new_f
offset += real_outs.size() - 1;
}
}

// remove parameter which is not used
void EliminateRedundantParameters(const FuncGraphPtr &func_graph, AnfNodePtrList *inputs) {
MS_EXCEPTION_IF_NULL(inputs);
const auto &ori_parameter = func_graph->parameters();
auto todos = TopoSort(func_graph->get_return());
std::set<AnfNodePtr> used_param;
for (auto node : todos) {
if (node->isa<Parameter>()) {
(void)used_param.insert(node);
}
}
if (used_param.size() == ori_parameter.size()) {
return;
}
AnfNodePtrList new_parameter, new_inputs{(*inputs)[0]};
for (size_t i = 0; i < ori_parameter.size(); ++i) {
if (used_param.count(ori_parameter[i])) {
new_parameter.push_back(ori_parameter[i]);
new_inputs.push_back((*inputs)[i + 1]);
}
}
func_graph->set_parameters(new_parameter);
*inputs = std::move(new_inputs);
}
} // namespace

std::tuple<FuncGraphPtr, AnfNodePtrList, AnfNodePtrList> BuildGraphFromNodes(const AnfNodePtrList &nodes) {
@@ -250,6 +275,7 @@ std::tuple<FuncGraphPtr, AnfNodePtrList, AnfNodePtrList> BuildSingleGraphFromNod
AnfNodePtr CreateNewFuseCNode(const FuncGraphPtr &main_fg, const FuncGraphPtr &sub_fg, const AnfNodePtrList &inputs) {
std::vector<AnfNodePtr> fn_inputs{NewValueNode(sub_fg)};
fn_inputs.insert(fn_inputs.end(), inputs.begin(), inputs.end());
EliminateRedundantParameters(sub_fg, &fn_inputs);
auto fuse_cnode = main_fg->NewCNode(fn_inputs);
fuse_cnode->set_abstract(sub_fg->output()->abstract());
Callback::Instance()->SetGraphKernelNodeKernelInfo(fuse_cnode);


+ 0
- 3
mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_expander.cc View File

@@ -172,9 +172,6 @@ FuncGraphPtr DefaultExpander::CreateExpandFuncGraph(const CNodePtr &node) {
AnfNodePtr PyExpander::CreateExpandGraphKernel(const FuncGraphPtr &new_func_graph, const CNodePtr &old_node) {
auto func_graph = old_node->func_graph();
std::vector<AnfNodePtr> inputs(old_node->inputs().begin() + 1, old_node->inputs().end());
AnfNodePtrList kernel_nodes;
EliminateRedundantParameters(new_func_graph, &inputs);
kernel::GetValidKernelNodes(new_func_graph, &kernel_nodes);
auto graph_kernel_node = CreateNewFuseCNode(func_graph, new_func_graph, inputs);
MS_LOG(DEBUG) << "Expand node: " << old_node->fullname_with_scope()
<< " with: " << graph_kernel_node->fullname_with_scope();


+ 0
- 23
mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_helper.cc View File

@@ -564,29 +564,6 @@ FuncGraphPtr LiteGraph2AnfGraph(const inner::LiteGraphPtr &lite_graph, AnfNodePt
return func_graph;
}

void EliminateRedundantParameters(const FuncGraphPtr &func_graph, AnfNodePtrList *inputs) {
const auto &ori_parameter = func_graph->parameters();
auto todos = TopoSort(func_graph->get_return());
std::set<AnfNodePtr> used_param;
for (auto node : todos) {
if (node->isa<Parameter>()) {
(void)used_param.insert(node);
}
}
if (used_param.size() == ori_parameter.size()) {
return;
}
AnfNodePtrList new_parameter, new_inputs;
for (size_t i = 0; i < ori_parameter.size(); ++i) {
if (used_param.count(ori_parameter[i])) {
new_parameter.push_back(ori_parameter[i]);
new_inputs.push_back((*inputs)[i]);
}
}
func_graph->set_parameters(new_parameter);
*inputs = std::move(new_inputs);
}

FuncGraphManagerPtr GetFuncGraphManager(const FuncGraphPtr &func_graph) {
MS_EXCEPTION_IF_NULL(func_graph);
FuncGraphManagerPtr manager = func_graph->manager();


+ 0
- 3
mindspore/ccsrc/backend/optimizer/graph_kernel/graph_kernel_helper.h View File

@@ -119,9 +119,6 @@ AbstractBasePtr GetOutputAbstract(const AnfNodePtr &node, size_t output_idx);
inner::LiteGraphPtr AnfGraph2LiteGraph(const FuncGraphPtr &func_graph);
FuncGraphPtr LiteGraph2AnfGraph(const inner::LiteGraphPtr &lite_graph, AnfNodePtrList *outputs = nullptr);

// remove parameter which is not used
void EliminateRedundantParameters(const FuncGraphPtr &func_graph, AnfNodePtrList *inputs);

// return a func_graph's manager
FuncGraphManagerPtr GetFuncGraphManager(const FuncGraphPtr &func_graph);



Loading…
Cancel
Save