From 2d4bc965fb62ce76f0722ea73f9dd4122b55048c Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 17:04:51 +0800 Subject: [PATCH 1/6] single op parser add check for json input --- ge/offline/single_op_parser.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ge/offline/single_op_parser.cc b/ge/offline/single_op_parser.cc index d4b9c1c9..739af6c3 100644 --- a/ge/offline/single_op_parser.cc +++ b/ge/offline/single_op_parser.cc @@ -26,6 +26,7 @@ #include "common/util/error_manager/error_manager.h" #include "common/ge_inner_error_codes.h" #include "framework/common/util.h" +#include "graph/utils/attr_utils.h" #include "graph/utils/tensor_utils.h" #include "graph/utils/op_desc_utils.h" #include "graph/operator_factory_impl.h" @@ -52,6 +53,7 @@ constexpr char const *kKeyOriginFormat = "origin_format"; constexpr char const *kFileSuffix = ".om"; constexpr char const *kKeyDynamicInput = "dynamic_input"; constexpr char const *kKeyDynamicOutput = "dynamic_output"; +constexpr char const *kSingleOpTensorDescValid = "_ge_single_op_tensor_desc_valid"; constexpr int kDumpJsonIndent = 2; constexpr int kShapeRangePairSize = 2; constexpr int kShapeRangeLow = 0; @@ -176,6 +178,7 @@ T GetValue(const map &dict, string &key, T default_val) { } void from_json(const Json &j, SingleOpTensorDesc &desc) { + bool is_tensor_valid = true; desc.dims = j.at(kKeyShape).get>(); auto it = j.find(kKeyShapeRange); if (it != j.end()) { @@ -187,11 +190,14 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { } string format_str = j.at(kKeyFormat).get(); string type_str = j.at(kKeyType).get(); + is_tensor_valid &&= ge::TypeUtils::IsFormatValid(format_str); + is_tensor_valid &&= ge::TypeUtils::IsDataTypeValid(type_str); desc.format = GetValue(kFormatDict, format_str, FORMAT_RESERVED); desc.type = GetValue(kDataTypeDict, type_str, DT_UNDEFINED); it = j.find(kKeyOriginFormat); if (it != j.end()) { string origin_format_str = j.at(kKeyOriginFormat).get(); + is_tensor_valid &&= ge::TypeUtils::IsFormatValid(origin_format_str); desc.ori_format = GetValue(kFormatDict, origin_format_str, FORMAT_RESERVED); } auto tensor_name = j.find(kKeyName); @@ -202,6 +208,9 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { if (dynamic_input_name != j.end()) { desc.dynamic_input_name = dynamic_input_name->get(); } + if (!is_tensor_valid) { + ge::AttrUtils::SetBool(&desc, kSingleOpTensorDescValid, is_tensor_valid); + } } void from_json(const Json &j, SingleOpAttr &attr) { @@ -305,6 +314,12 @@ bool SingleOpParser::Validate(const SingleOpDesc &op_desc) { int index = 0; for (auto &tensor_desc : op_desc.input_desc) { + if (ge::AttrUtils::GetBool(&tensor_desc)) { + ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, + {"intput", "datatype or format", std::to_string(index)}); + GELOGE(PARAM_INVALID, "Input's dataType or format is invalid when the index is %d", index); + return false; + } if ((tensor_desc.type == DT_UNDEFINED && tensor_desc.format != FORMAT_RESERVED) || (tensor_desc.type != DT_UNDEFINED && tensor_desc.format == FORMAT_RESERVED)){ ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, @@ -317,6 +332,12 @@ bool SingleOpParser::Validate(const SingleOpDesc &op_desc) { index = 0; for (auto &tensor_desc : op_desc.output_desc) { + if (ge::AttrUtils::GetBool(&tensor_desc)) { + ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, + {"output", "datatype", std::to_string(index)}); + GELOGE(PARAM_INVALID, "Output's dataType is invalid when the index is %d", index); + return false; + } if (tensor_desc.type == DT_UNDEFINED) { ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, {"output", "datatype", std::to_string(index)}); From 01acf1fe55cb134e7fa8975eb925a8d4a77ff3c2 Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 17:11:20 +0800 Subject: [PATCH 2/6] single op parser add check for json input --- ge/offline/single_op_parser.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/ge/offline/single_op_parser.cc b/ge/offline/single_op_parser.cc index 739af6c3..8a9250fd 100644 --- a/ge/offline/single_op_parser.cc +++ b/ge/offline/single_op_parser.cc @@ -27,6 +27,7 @@ #include "common/ge_inner_error_codes.h" #include "framework/common/util.h" #include "graph/utils/attr_utils.h" +#include "graph/utils/type_utils.h" #include "graph/utils/tensor_utils.h" #include "graph/utils/op_desc_utils.h" #include "graph/operator_factory_impl.h" From 9869a2ea84268081f712784234069f7cbda114e6 Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 17:59:38 +0800 Subject: [PATCH 3/6] single op parser add check for json input --- ge/offline/single_op_parser.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ge/offline/single_op_parser.cc b/ge/offline/single_op_parser.cc index 8a9250fd..d370e2aa 100644 --- a/ge/offline/single_op_parser.cc +++ b/ge/offline/single_op_parser.cc @@ -191,14 +191,14 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { } string format_str = j.at(kKeyFormat).get(); string type_str = j.at(kKeyType).get(); - is_tensor_valid &&= ge::TypeUtils::IsFormatValid(format_str); - is_tensor_valid &&= ge::TypeUtils::IsDataTypeValid(type_str); + is_tensor_valid = is_tensor_valid && ge::TypeUtils::IsFormatValid(format_str); + is_tensor_valid = is_tensor_valid && ge::TypeUtils::IsDataTypeValid(type_str); desc.format = GetValue(kFormatDict, format_str, FORMAT_RESERVED); desc.type = GetValue(kDataTypeDict, type_str, DT_UNDEFINED); it = j.find(kKeyOriginFormat); if (it != j.end()) { string origin_format_str = j.at(kKeyOriginFormat).get(); - is_tensor_valid &&= ge::TypeUtils::IsFormatValid(origin_format_str); + is_tensor_valid = is_tensor_valid && ge::TypeUtils::IsFormatValid(origin_format_str); desc.ori_format = GetValue(kFormatDict, origin_format_str, FORMAT_RESERVED); } auto tensor_name = j.find(kKeyName); @@ -210,7 +210,7 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { desc.dynamic_input_name = dynamic_input_name->get(); } if (!is_tensor_valid) { - ge::AttrUtils::SetBool(&desc, kSingleOpTensorDescValid, is_tensor_valid); + ge::AttrUtils::SetBool(desc, kSingleOpTensorDescValid, is_tensor_valid); } } From bcdf55c0fea67d0a8d06b32d64a83b23d2fbfef1 Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 18:44:47 +0800 Subject: [PATCH 4/6] single op parser add check for json input --- ge/offline/single_op_parser.cc | 2 +- ge/offline/single_op_parser.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ge/offline/single_op_parser.cc b/ge/offline/single_op_parser.cc index d370e2aa..93fe503e 100644 --- a/ge/offline/single_op_parser.cc +++ b/ge/offline/single_op_parser.cc @@ -210,7 +210,7 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { desc.dynamic_input_name = dynamic_input_name->get(); } if (!is_tensor_valid) { - ge::AttrUtils::SetBool(desc, kSingleOpTensorDescValid, is_tensor_valid); + ge::AttrUtils::SetBool(&desc, kSingleOpTensorDescValid, is_tensor_valid); } } diff --git a/ge/offline/single_op_parser.h b/ge/offline/single_op_parser.h index 19879a32..64310030 100644 --- a/ge/offline/single_op_parser.h +++ b/ge/offline/single_op_parser.h @@ -23,11 +23,12 @@ #include "ge/ge_api_error_codes.h" #include "graph/types.h" +#include "graph/detail/attributes_holder.h" #include "graph/ge_attr_value.h" #include "graph/op_desc.h" namespace ge { -struct SingleOpTensorDesc { +struct SingleOpTensorDesc: public AttrHolder { std::string name; std::vector dims; std::vector ori_dims; From 0db1ef1fc9a6b4532fa6f2b6821792d723ed9a48 Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 20:45:14 +0800 Subject: [PATCH 5/6] single op parser add check for json input --- ge/offline/single_op_parser.cc | 6 +++--- ge/offline/single_op_parser.h | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ge/offline/single_op_parser.cc b/ge/offline/single_op_parser.cc index 93fe503e..d6b62c16 100644 --- a/ge/offline/single_op_parser.cc +++ b/ge/offline/single_op_parser.cc @@ -210,7 +210,7 @@ void from_json(const Json &j, SingleOpTensorDesc &desc) { desc.dynamic_input_name = dynamic_input_name->get(); } if (!is_tensor_valid) { - ge::AttrUtils::SetBool(&desc, kSingleOpTensorDescValid, is_tensor_valid); + desc.SetValidFlag(is_tensor_valid); } } @@ -315,7 +315,7 @@ bool SingleOpParser::Validate(const SingleOpDesc &op_desc) { int index = 0; for (auto &tensor_desc : op_desc.input_desc) { - if (ge::AttrUtils::GetBool(&tensor_desc)) { + if (!tensor_desc.GetValidFlag()) { ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, {"intput", "datatype or format", std::to_string(index)}); GELOGE(PARAM_INVALID, "Input's dataType or format is invalid when the index is %d", index); @@ -333,7 +333,7 @@ bool SingleOpParser::Validate(const SingleOpDesc &op_desc) { index = 0; for (auto &tensor_desc : op_desc.output_desc) { - if (ge::AttrUtils::GetBool(&tensor_desc)) { + if (!tensor_desc.GetValidFlag()) { ErrorManager::GetInstance().ATCReportErrMessage("E10027", {"input", "type", "index"}, {"output", "datatype", std::to_string(index)}); GELOGE(PARAM_INVALID, "Output's dataType is invalid when the index is %d", index); diff --git a/ge/offline/single_op_parser.h b/ge/offline/single_op_parser.h index 64310030..a728b5b9 100644 --- a/ge/offline/single_op_parser.h +++ b/ge/offline/single_op_parser.h @@ -23,12 +23,15 @@ #include "ge/ge_api_error_codes.h" #include "graph/types.h" -#include "graph/detail/attributes_holder.h" #include "graph/ge_attr_value.h" #include "graph/op_desc.h" namespace ge { -struct SingleOpTensorDesc: public AttrHolder { +struct SingleOpTensorDesc { +public: + bool GetValidFlag() { return is_valid_; } + void SetValidFlag(bool is_valid) { is_valid_ = is_valid; } +public: std::string name; std::vector dims; std::vector ori_dims; @@ -37,6 +40,8 @@ struct SingleOpTensorDesc: public AttrHolder { ge::Format ori_format = ge::FORMAT_RESERVED; ge::DataType type = ge::DT_UNDEFINED; std::string dynamic_input_name; +private: + bool is_valid_ = true; }; struct SingleOpAttr { From 87176028b72764510e39217e16ad6cff44990923 Mon Sep 17 00:00:00 2001 From: wxl Date: Thu, 10 Dec 2020 20:57:11 +0800 Subject: [PATCH 6/6] single op parser add check for json input --- ge/offline/single_op_parser.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/offline/single_op_parser.h b/ge/offline/single_op_parser.h index a728b5b9..71aa58bb 100644 --- a/ge/offline/single_op_parser.h +++ b/ge/offline/single_op_parser.h @@ -29,7 +29,7 @@ namespace ge { struct SingleOpTensorDesc { public: - bool GetValidFlag() { return is_valid_; } + bool GetValidFlag() const { return is_valid_; } void SetValidFlag(bool is_valid) { is_valid_ = is_valid; } public: std::string name;