@@ -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()); | |||