| @@ -917,6 +917,15 @@ Status GeGenerator::Impl::BuildModel(const Graph &graph, const vector<GeTensor> | |||
| static std::atomic<uint64_t> atomic_session_id(0); | |||
| auto session_id = atomic_session_id.fetch_add(1); | |||
| // This is a temporary add for graph with variable | |||
| auto version = static_cast<int32_t>(SessionVersion::ClOUD_VERSION); | |||
| const int DEFAULT_DEVICE_ID = 0; | |||
| const int DEFAULT_JOB_ID= 0; | |||
| ret = VarManager::Instance(session_id)->Init(version, session_id, DEFAULT_DEVICE_ID, DEFAULT_JOB_ID); | |||
| GELOGI("Start init var instance, session_id %lu", session_id); | |||
| if (ret != SUCCESS) { | |||
| GELOGE(ret, "Failed init var instance, session_id %lu", session_id); | |||
| } | |||
| if (is_singleop_unregistered_) { | |||
| ret = graph_manager_.BuildGraphForUnregisteredOp(graph_id, inputs, ge_root_model, session_id); | |||
| } else { | |||
| @@ -359,7 +359,10 @@ Status GraphManager::AddGraph(const GraphId &graph_id, const Graph &graph, | |||
| std::shared_ptr<Graph> graph_ptr = MakeShared<ge::Graph>(graph); | |||
| GE_IF_BOOL_EXEC(graph_ptr == nullptr, GELOGE(FAILED, "GraphPtr make shared failed"); | |||
| return FAILED); | |||
| // update option about tuning graph | |||
| ParseOption(options, BUILD_MODE, options_.build_mode); | |||
| ParseOption(options, BUILD_STEP, options_.build_step); | |||
| ParseOption(options, TUNING_PATH, options_.tuning_path); | |||
| graph_node->SetGraph(graph_ptr); | |||
| graph_node->SetOptions(options); | |||
| AddGraphNode(graph_id, graph_node); | |||
| @@ -433,6 +436,10 @@ Status GraphManager::AddGraphWithCopy(const GraphId &graph_id, const Graph &grap | |||
| GELOGE(FAILED, "GraphPtr make shared failed"); | |||
| return FAILED; | |||
| } | |||
| // update option about tuning graph | |||
| ParseOption(options, BUILD_MODE, options_.build_mode); | |||
| ParseOption(options, BUILD_STEP, options_.build_step); | |||
| ParseOption(options, TUNING_PATH, options_.tuning_path); | |||
| graph_node->SetGraph(graph_ptr); | |||
| graph_node->SetOptions(options); | |||
| @@ -1466,6 +1473,10 @@ Status GraphManager::ParseOptions(const std::map<std::string, std::string> &opti | |||
| GE_IF_BOOL_EXEC(ret != SUCCESS, | |||
| GELOGE(GE_GRAPH_OPTIONS_INVALID, "Key:ge.compressFlag value is invalid, must be 0 or 1."); | |||
| return GE_GRAPH_OPTIONS_INVALID); | |||
| // Set Build model and step | |||
| ParseOption(options, BUILD_MODE, options_.build_mode); | |||
| ParseOption(options, BUILD_STEP, options_.build_step); | |||
| ParseOption(options, BUILD_STEP, options_.tuning_path); | |||
| // ge.graphType. | |||
| options_.run_graph_flag = true; | |||
| @@ -1514,10 +1525,6 @@ Status GraphManager::ParseOptions(const std::map<std::string, std::string> &opti | |||
| GELOGD("Dynamic dims params: input shape is %s, dynamic dims is %s, dynamic node type is %d", | |||
| options_.input_shape.c_str(), options_.dynamic_dims.c_str(), options_.dynamic_node_type); | |||
| // Set Build model and step | |||
| ParseOption(options, BUILD_MODE, options_.build_mode); | |||
| ParseOption(options, BUILD_STEP, options_.build_step); | |||
| return SUCCESS; | |||
| } | |||
| @@ -1549,6 +1556,7 @@ void GraphManager::ParseOption(const std::map<std::string, std::string> &options | |||
| std::string &option) { | |||
| auto iter = options.find(key); | |||
| if (iter != options.end()) { | |||
| GELOGD("Set option %s from value %s to value%s", key.c_str(), option.c_str(), iter->second.c_str()); | |||
| option = iter->second; | |||
| } | |||
| } | |||
| @@ -3132,6 +3140,21 @@ Status GraphManager::ConvertGraphToFile(ComputeGraphPtr &compute_graph, GraphPar | |||
| non_tuning_subgraphs.push_back(sub_graph_tmp); | |||
| } | |||
| } | |||
| // for function graphs to tune | |||
| for (auto &function_graph : compute_graph->GetAllSubgraphs()) { | |||
| auto subgraph_list = sub_graph_map[function_graph]; | |||
| for (const auto &sub_graph_info_ptr : subgraph_list) { | |||
| GE_CHECK_NOTNULL(sub_graph_info_ptr); | |||
| ComputeGraphPtr sub_graph_tmp = sub_graph_info_ptr->GetSubGraph(); | |||
| // need to tuning | |||
| if (sub_graph_info_ptr->GetEngineName() == kVectorEngine || | |||
| sub_graph_info_ptr->GetEngineName() == kAIcoreEngine) { | |||
| tuning_subgraphs.push_back(sub_graph_tmp); | |||
| } else { | |||
| non_tuning_subgraphs.push_back(sub_graph_tmp); | |||
| } | |||
| } | |||
| } | |||
| return TuningUtils::ConvertGraphToFile(tuning_subgraphs, non_tuning_subgraphs, exe_flag, path); | |||
| } | |||
| @@ -249,6 +249,7 @@ struct GraphManagerOptions { | |||
| std::string save_original_model; | |||
| std::string build_mode; | |||
| std::string build_step; | |||
| std::string tuning_path; | |||
| std::string input_shape; | |||
| std::string dynamic_dims; | |||
| int32_t dynamic_node_type = -1; | |||
| @@ -275,7 +276,8 @@ struct GraphManagerOptions { | |||
| is_single_op(false), | |||
| save_original_model("false"), | |||
| build_mode(""), | |||
| build_step("") {} | |||
| build_step(""), | |||
| tuning_path(""){} | |||
| }; | |||
| } // namespace ge | |||
| @@ -347,14 +347,18 @@ ge::Status VarManager::Init(const uint32_t &version, const uint64_t &session_id, | |||
| const uint64_t &job_id) { | |||
| std::lock_guard<std::recursive_mutex> lock(mutex_); | |||
| GELOGI("VarManager::Init, session id = %lu.", session_id); | |||
| version_ = version; | |||
| device_id_ = device_id; | |||
| session_id_ = session_id; | |||
| job_id_ = job_id; | |||
| var_resource_ = std::unique_ptr<VarResource>(new (std::nothrow) VarResource(session_id_)); | |||
| if (var_resource_ == nullptr) { | |||
| GELOGW("VarManager has not been init."); | |||
| return ge::INTERNAL_ERROR; | |||
| version_ = version; | |||
| device_id_ = device_id; | |||
| session_id_ = session_id; | |||
| job_id_ = job_id; | |||
| var_resource_ = std::unique_ptr<VarResource>(new (std::nothrow) VarResource(session_id_)); | |||
| if (var_resource_ == nullptr) { | |||
| GELOGW("VarManager init failed session id = %lu.", session_id); | |||
| return ge::INTERNAL_ERROR; | |||
| } | |||
| } else { | |||
| GELOGW("VarManager::has been inited, session id = %lu.", session_id); | |||
| } | |||
| return SUCCESS; | |||
| } | |||
| @@ -1304,7 +1304,8 @@ Status GraphPrepare::UpdateInput(const std::vector<GeTensor> &user_input, | |||
| auto format = desc.GetFormat(); | |||
| auto origin_format = desc.GetOriginFormat(); | |||
| // data maybe internal format [FRACTAL_NZ] at singleop process such as GEMM. | |||
| bool need_check_internal_format = (!IsTansDataOpData(input_node)) && (!options_.is_single_op); | |||
| auto tune_flag = (options_.build_mode == BUILD_MODE_TUNING) && (options_.build_step == BUILD_STEP_AFTER_BUILDER); | |||
| bool need_check_internal_format = (!IsTansDataOpData(input_node)) && (!options_.is_single_op) && (!tune_flag); | |||
| if (need_check_internal_format) { | |||
| bool is_internal = TypeUtils::IsInternalFormat(format) || TypeUtils::IsInternalFormat(origin_format); | |||
| if (is_internal) { | |||
| @@ -1346,19 +1347,22 @@ Status GraphPrepare::UpdateInput(const std::vector<GeTensor> &user_input, | |||
| return FAILED; | |||
| } | |||
| ge::TensorUtils::SetSize(desc, shape_size); | |||
| graphStatus graph_ret = op->UpdateInputDesc(0, desc); | |||
| if (graph_ret != GRAPH_SUCCESS) { | |||
| GELOGE(graph_ret, "UpdateInputDesc fail, graph_ret:%u", graph_ret); | |||
| return graph_ret; | |||
| } | |||
| // Size will be recalculated in the build stage | |||
| ge::TensorUtils::SetSize(desc, 0); | |||
| graph_ret = op->UpdateOutputDesc(0, desc); | |||
| if (graph_ret != GRAPH_SUCCESS) { | |||
| GELOGE(graph_ret, "UpdateOutputDesc fail, graph_ret:%u", graph_ret); | |||
| return graph_ret; | |||
| if (!tune_flag) { | |||
| graphStatus graph_ret = op->UpdateInputDesc(0, desc); | |||
| if (graph_ret != GRAPH_SUCCESS) { | |||
| GELOGE(graph_ret, "UpdateInputDesc fail, graph_ret:%u", graph_ret); | |||
| return graph_ret; | |||
| } | |||
| // Size will be recalculated in the build stage | |||
| ge::TensorUtils::SetSize(desc, 0); | |||
| graph_ret = op->UpdateOutputDesc(0, desc); | |||
| if (graph_ret != GRAPH_SUCCESS) { | |||
| GELOGE(graph_ret, "UpdateOutputDesc fail, graph_ret:%u", graph_ret); | |||
| return graph_ret; | |||
| } | |||
| } else { | |||
| GELOGI("data %s skip update info in tune mode", op->GetName().c_str()); | |||
| } | |||
| if (!dynamic_shape_range_vec.empty()) { | |||
| ret = UpdateDynamicInputShapeRange(index, dynamic_shape_range_vec, op, desc); | |||
| GE_CHK_STATUS_RET(ret, "Fail to update dynamic input shape range on %s.", op->GetName().c_str()); | |||