diff --git a/ge/graph/build/graph_builder.cc b/ge/graph/build/graph_builder.cc index d3e11969..d8219c29 100644 --- a/ge/graph/build/graph_builder.cc +++ b/ge/graph/build/graph_builder.cc @@ -269,24 +269,7 @@ Status GraphBuilder::BuildForKnownShapeGraph(ComputeGraphPtr &comp_graph, std::v return SUCCESS; } -Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeModelPtr &ge_model_ptr, - uint64_t session_id) { - ModelPtr model_ptr = MakeShared(); - if (model_ptr == nullptr) { - return MEMALLOC_FAILED; - } - - Graph2SubGraphInfoList subgraph_map; - ge::ModelBuilder builder(session_id, comp_graph, subgraph_map, stream_max_parallel_num_, hcom_parallel_, build_mode_); - GE_CHK_STATUS_RET(builder.PreBuildModel(), "Failed to pre build model."); - - GELOGI("Begin to build unknown shape graph[%s].", comp_graph->GetName().c_str()); - GE_TIMESTAMP_START(CalcOpParam); - GE_CHK_STATUS_RET(CalcOpParam(comp_graph), "Graph[%s] builder CalcOpParam() return fail.", - comp_graph->GetName().c_str()); - GE_TIMESTAMP_END(CalcOpParam, "GraphBuilder::CalcOpParam"); - GE_DUMP(comp_graph, "AfterCalcOpParam"); - +Status GraphBuilder::SetConstantInputOffset(ComputeGraphPtr &comp_graph) { for (auto &node : comp_graph->GetDirectNode()) { GE_CHECK_NOTNULL(node); auto op_desc = node->GetOpDesc(); @@ -320,6 +303,7 @@ Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeMo GE_CHECK_NOTNULL(weight); int64_t input_offset = 0; (void) TensorUtils::GetDataOffset(weight->MutableTensorDesc(), input_offset); + // valid_input_index must smaller than num_inputs input_offsets[valid_input_index] = input_offset; GELOGD("[%s] input[%u] is const, offset = %ld", node->GetName().c_str(), valid_input_index, input_offset); } @@ -328,6 +312,27 @@ Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeMo std::vector output_offsets(op_desc->GetOutputsSize(), 0); op_desc->SetOutputOffset(output_offsets); } +} + +Status GraphBuilder::BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeModelPtr &ge_model_ptr, + uint64_t session_id) { + ModelPtr model_ptr = MakeShared(); + if (model_ptr == nullptr) { + return MEMALLOC_FAILED; + } + + Graph2SubGraphInfoList subgraph_map; + ge::ModelBuilder builder(session_id, comp_graph, subgraph_map, stream_max_parallel_num_, hcom_parallel_, build_mode_); + GE_CHK_STATUS_RET(builder.PreBuildModel(), "Failed to pre build model."); + + GELOGI("Begin to build unknown shape graph[%s].", comp_graph->GetName().c_str()); + GE_TIMESTAMP_START(CalcOpParam); + GE_CHK_STATUS_RET(CalcOpParam(comp_graph), "Graph[%s] builder CalcOpParam() return fail.", + comp_graph->GetName().c_str()); + GE_TIMESTAMP_END(CalcOpParam, "GraphBuilder::CalcOpParam"); + GE_DUMP(comp_graph, "AfterCalcOpParam"); + + GE_CHK_STATUS_RET(SetConstantInputOffset(comp_graph), "Failed to set constant input offset."); GE_CHK_STATUS_RET(builder.MergeWeights(), "Failed to merge weights."); GE_TIMESTAMP_START(BuildModelForGetDynShapeTask); diff --git a/ge/graph/build/graph_builder.h b/ge/graph/build/graph_builder.h index 329f3ebc..b828a80d 100644 --- a/ge/graph/build/graph_builder.h +++ b/ge/graph/build/graph_builder.h @@ -67,6 +67,7 @@ class GraphBuilder { GeModelPtr &ge_model_ptr, uint64_t session_id = INVALID_SESSION_ID); Status BuildForUnknownShapeGraph(ComputeGraphPtr &comp_graph, GeModelPtr &ge_model_ptr, uint64_t session_id = INVALID_SESSION_ID); + Status SetConstantInputOffset(ComputeGraphPtr &comp_graph); Status AddOutputMemTypeForNode(const NodePtr &node); Status BuildForHostCpuGraph(ComputeGraphPtr &comp_graph, GeModelPtr &ge_model_ptr, uint64_t session_id = INVALID_SESSION_ID);