!1097 Bugfix: add check on dynamic input shape options

From: @hugo1
Reviewed-by: @xchu42,@wqtshg
Signed-off-by: @wqtshg
pull/1097/MERGE
mindspore-ci-bot 4 years ago committed by Gitee
commit 1dcceaf845

@ -967,6 +967,13 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range,
// unknown dim, should get range. // unknown dim, should get range.
auto range_left = StringToLongNoThrow(range_pair_set.at(0).c_str()); auto range_left = StringToLongNoThrow(range_pair_set.at(0).c_str());
auto range_right = StringToLongNoThrow(range_pair_set.at(1).c_str()); auto range_right = StringToLongNoThrow(range_pair_set.at(1).c_str());
if (range_left < 0 || range_right < 0) {
GELOGE(PARAM_INVALID,
"Shape range of input is invalid. Given range pair [%ld,%ld], while correct example: "
"\"[1~20,3,3~6,-1],[1~20,3,3~6,-1]\"",
range_left, range_right);
return PARAM_INVALID;
}
range_pair = std::make_pair(range_left, range_right); range_pair = std::make_pair(range_left, range_right);
} else { } else {
GELOGE(PARAM_INVALID, GELOGE(PARAM_INVALID,
@ -983,22 +990,27 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range,
Status GetDynamicInputShapeRange(const std::vector<GeTensor> &user_input, const std::map<string, string> &graph_option, Status GetDynamicInputShapeRange(const std::vector<GeTensor> &user_input, const std::map<string, string> &graph_option,
vector<vector<std::pair<int64_t, int64_t>>> &range_vec) { vector<vector<std::pair<int64_t, int64_t>>> &range_vec) {
// check both mode and shape_range option are all enabled
bool enable_dynamic_execute_mode = true;
auto mode_iter = graph_option.find(OPTION_EXEC_DYNAMIC_EXECUTE_MODE); auto mode_iter = graph_option.find(OPTION_EXEC_DYNAMIC_EXECUTE_MODE);
if (mode_iter == graph_option.end()) { if ((mode_iter == graph_option.end()) || (mode_iter->second != "dynamic_execute")) {
GELOGD("Graph Option: Can not find %s option in graph options.", OPTION_EXEC_DYNAMIC_EXECUTE_MODE); GELOGD("Graph Option: Can not find %s option in graph options.", OPTION_EXEC_DYNAMIC_EXECUTE_MODE);
return SUCCESS; enable_dynamic_execute_mode = false;
}
GELOGD("Graph Option: dynamic_input_mode value is %s.", mode_iter->second.c_str());
if (mode_iter->second != "dynamic_execute") {
return SUCCESS;
} }
auto iter = graph_option.find(OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE); auto iter = graph_option.find(OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE);
if (iter == graph_option.end()) { bool enable_input_shape_range = (iter != graph_option.end());
GELOGE(PARAM_INVALID, "Graph option %s is required when %s is dynamic_execute", OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE, if (enable_dynamic_execute_mode && enable_input_shape_range) {
OPTION_EXEC_DYNAMIC_EXECUTE_MODE); GELOGD("GraphOption: %s value is dynamic_execute, %s value is %s.", OPTION_EXEC_DYNAMIC_EXECUTE_MODE,
OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE, iter->second.c_str());
} else if (!enable_dynamic_execute_mode && !enable_input_shape_range) {
return SUCCESS;
} else {
GELOGE(PARAM_INVALID, "Graph option: %s and %s should be enabled at the same time.",
OPTION_EXEC_DYNAMIC_EXECUTE_MODE, OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE);
return PARAM_INVALID; return PARAM_INVALID;
} }
GELOGD("GraphOption: dynamic_inputs_shape_range value is %s.", iter->second.c_str());
auto ret = ParseDynamicInputShapeRange(iter->second, range_vec); auto ret = ParseDynamicInputShapeRange(iter->second, range_vec);
GE_CHK_STATUS_RET(ret, "Parse dynamic input shape range failed."); GE_CHK_STATUS_RET(ret, "Parse dynamic input shape range failed.");
if (range_vec.size() != user_input.size()) { if (range_vec.size() != user_input.size()) {

Loading…
Cancel
Save