Browse Source

add for optune dynamic shape support

tags/v1.2.0
gengchao4@huawei.com 3 years ago
parent
commit
bf14833ef4
5 changed files with 68 additions and 26 deletions
  1. +9
    -0
      ge/generator/ge_generator.cc
  2. +28
    -5
      ge/graph/manager/graph_manager.cc
  3. +3
    -1
      ge/graph/manager/graph_manager_utils.h
  4. +11
    -7
      ge/graph/manager/graph_var_manager.cc
  5. +17
    -13
      ge/graph/preprocess/graph_preprocess.cc

+ 9
- 0
ge/generator/ge_generator.cc View File

@@ -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 {


+ 28
- 5
ge/graph/manager/graph_manager.cc View File

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



+ 3
- 1
ge/graph/manager/graph_manager_utils.h View File

@@ -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



+ 11
- 7
ge/graph/manager/graph_var_manager.cc View File

@@ -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;
}


+ 17
- 13
ge/graph/preprocess/graph_preprocess.cc View File

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


Loading…
Cancel
Save