diff --git a/ge/graph/preprocess/graph_preprocess.cc b/ge/graph/preprocess/graph_preprocess.cc index 24a0384d..d033c924 100644 --- a/ge/graph/preprocess/graph_preprocess.cc +++ b/ge/graph/preprocess/graph_preprocess.cc @@ -967,6 +967,13 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range, // unknown dim, should get range. auto range_left = StringToLongNoThrow(range_pair_set.at(0).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); } else { GELOGE(PARAM_INVALID, @@ -983,22 +990,27 @@ Status ParseDynamicInputShapeRange(const std::string &shape_range, Status GetDynamicInputShapeRange(const std::vector &user_input, const std::map &graph_option, vector>> &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); - 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); - return SUCCESS; - } - GELOGD("Graph Option: dynamic_input_mode value is %s.", mode_iter->second.c_str()); - if (mode_iter->second != "dynamic_execute") { - return SUCCESS; + enable_dynamic_execute_mode = false; } + auto iter = graph_option.find(OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE); - if (iter == graph_option.end()) { - GELOGE(PARAM_INVALID, "Graph option %s is required when %s is dynamic_execute", OPTION_EXEC_DATA_INPUTS_SHAPE_RANGE, - OPTION_EXEC_DYNAMIC_EXECUTE_MODE); + bool enable_input_shape_range = (iter != graph_option.end()); + if (enable_dynamic_execute_mode && enable_input_shape_range) { + 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; } - GELOGD("GraphOption: dynamic_inputs_shape_range value is %s.", iter->second.c_str()); + auto ret = ParseDynamicInputShapeRange(iter->second, range_vec); GE_CHK_STATUS_RET(ret, "Parse dynamic input shape range failed."); if (range_vec.size() != user_input.size()) {