From cceda6ca1ac4137a6713dd4da423d3459f540be7 Mon Sep 17 00:00:00 2001 From: l00444296 Date: Mon, 2 Nov 2020 16:09:37 +0800 Subject: [PATCH] Description:aclgrphParse IR interface Team:HISI_SW Feature or Bugfix:Feature --- parser/common/acl_graph_parser_util.cc | 40 +++++++++++++++++++++----- parser/common/acl_graph_parser_util.h | 4 ++- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/parser/common/acl_graph_parser_util.cc b/parser/common/acl_graph_parser_util.cc index b2ca885..a8481b3 100644 --- a/parser/common/acl_graph_parser_util.cc +++ b/parser/common/acl_graph_parser_util.cc @@ -26,8 +26,11 @@ #include "common/debug/log.h" #include "common/op/ge_op_utils.h" #include "common/properties_manager.h" +#include "common/type.h" +#include "common/util.h" #include "ge/ge_api_types.h" #include "graph/opsproto_manager.h" +#include "graph/utils/type_utils.h" #include "omg/parser/parser_inner_ctx.h" #include "tbe_plugin_loader.h" #include "framework/common/debug/ge_log.h" @@ -53,7 +56,7 @@ static std::map kInputFormatStrToGeformat = { {"NCDHW", domi::DOMI_TENSOR_NCDHW}, {"NDHWC", domi::DOMI_TENSOR_NDHWC} }; -static char *const kIsOutputAdjustHwLayoutKey = "is_output_adjust_hw_layout"; +const char *const kIsOutputAdjustHwLayoutKey = "is_output_adjust_hw_layout"; // datatype/formats from user to GE, Unified to util interface file later const std::map kOutputTypeSupportDatatype = { {"FP32", ge::DT_FLOAT}, {"FP16", ge::DT_FLOAT16}, {"UINT8", ge::DT_UINT8}}; @@ -64,7 +67,10 @@ const char *const kSplitError1 = "size not equal to 2 split by \":\""; const char *const kEmptyError = "can not be empty"; const char *const kFloatNumError = "exist float number"; const char *const kDigitError = "is not digit"; - +const std::string kGraphDefaultName = "domi_default"; +const char *const kOutputTypeSample = "correct sample is \"opname:index:dtype\""; +const char *const kOutputTypeSupport = "only support FP32, FP16, UINT8"; +c /// The maximum length of the file. /// Based on the security coding specification and the current actual (protobuf) model size, it is determined as 2G-1 const int kMaxFileSizeLimit = INT_MAX; @@ -180,6 +186,22 @@ static domi::Status StringToInt(std::string &str, int32_t &value) { return SUCCESS; } +static Status CheckOutNode(ge::OpDescPtr op_desc, int32_t index) { + int32_t out_size = op_desc->GetOutputsSize(); + if (index < 0 || index >= out_size) { + GELOGE(domi::FAILED, + "out_node [%s] output index:%d must be smaller " + "than node output size:%d and can not be negative!", + op_desc->GetName().c_str(), index, out_size); + std::string fail_reason = "output index:" + to_string(index) + " must be smaller than output size:" + + to_string(out_size) + " and can not be negative!"; + ErrorManager::GetInstance().ATCReportErrMessage("E10003", {"parameter", "value", "reason"}, + {"out_nodes", op_desc->GetName(), fail_reason}); + return domi::FAILED; + } + return domi::SUCCESS; +} + domi::Status VerifyOutputTypeAndOutNodes(std::vector &out_type_vec) { std::vector> user_out_nodes = domi::GetContext().user_out_nodes; std::set out_nodes_info; @@ -291,7 +313,7 @@ domi::Status AclGrphParseUtil::ParseAclFormat(const string &input_format) { } bool AclGrphParseUtil::ParseInputShape(const string &input_shape, - unordered_map> &shape_map, + std::unordered_map> &shape_map, vector>> &user_shape_map, bool is_dynamic_input) { vector shape_vec = StringUtils::Split(input_shape, ';'); @@ -386,7 +408,7 @@ domi::Status AclGrphParseUtil::ParseAclShape(const string &input_shape, bool is_ return SUCCESS; } - unordered_map> &shape_map = ge::GetParserContext().input_dims; + std::unordered_map> &shape_map = ge::GetParserContext().input_dims; if (!ParseInputShape(input_shape, ge::GetParserContext().input_dims, ge::GetParserContext().user_input_dims, is_dynamic_input) || shape_map.empty()) { GELOGE(PARAM_INVALID, "Failed to parse input shape: %s", input_shape.c_str()); @@ -496,6 +518,7 @@ domi::Status AclGrphParseUtil::ParseAclOpConf(const char *op_conf) { // Return map and put it into ATC global variable ge::GetParserContext().op_conf_map = PropertiesManager::Instance().GetPropertyMap(); } + return SUCCESS; } domi::Status AclGrphParseUtil::ParseAclEnableScope(const string &enable_scope_fusion_passes) { @@ -504,9 +527,10 @@ domi::Status AclGrphParseUtil::ParseAclEnableScope(const string &enable_scope_fu return SUCCESS; } ge::GetParserContext().enable_scope_fusion_passes = enable_scope_fusion_passes; + return SUCCESS; } -static void AclGrphParseUtil::AddAttrsForInputNodes(const vector &adjust_fp16_format_vec, +void AclGrphParseUtil::AddAttrsForInputNodes(const vector &adjust_fp16_format_vec, const string &fp16_nodes_name, uint32_t index, OpDescPtr &op_desc) { if (AttrUtils::SetStr(op_desc, ATTR_ATC_USER_DEFINE_DATATYPE, TypeUtils::DataTypeToSerialString(DT_FLOAT16))) { @@ -832,7 +856,9 @@ domi::Status AclGrphParseUtil::ParseParamsBeforeGraph(const std::map &parser_params) { // support paragrams: input_fp16_nodes, is_input_adjust_hw_layout, compress_weight_conf, // log - compute_graph = GraphUtils::GetComputeGraph(graph); + ComputeGraphPtr compute_graph = GraphUtils::GetComputeGraph(graph); string input_fp16_nodes; GetAclParams(parser_params, "input_fp16_nodes", input_fp16_nodes); diff --git a/parser/common/acl_graph_parser_util.h b/parser/common/acl_graph_parser_util.h index 2db0bf4..a8e8667 100644 --- a/parser/common/acl_graph_parser_util.h +++ b/parser/common/acl_graph_parser_util.h @@ -18,6 +18,8 @@ #define ACL_GRAPH_PARSE_UTIL_ #include +#include +#include #include #include #include @@ -52,7 +54,7 @@ class AclGrphParseUtil { std::vector &output_nodes_name); domi::Status ParseAclFormat(const std::string &input_format); bool ParseInputShape(const std::string &input_shape, - unordered_map> &shape_map, + std::unordered_map> &shape_map, vector>> &user_shape_map, bool is_dynamic_input); domi::Status ParseAclShape(const std::string &input_shape, bool is_dynamic_input);