From c9d5345c46d51f04edc63ffbdbd93d10e37d9714 Mon Sep 17 00:00:00 2001 From: Adrian Lizarraga Date: Tue, 14 Nov 2023 08:14:40 -0800 Subject: [PATCH] [QNN EP] Clean-up todo for OnnxInputInfo (#18416) ### Description Renames `OnnxInputInfo` struct to `TensorInfo` because this struct can be used for both input and output tensors. ### Motivation and Context Clean up TODO item --- .../qnn/builder/opbuilder/base_op_builder.cc | 8 +++--- .../opbuilder/batch_norm_op_builder.cc | 26 +++++++++---------- .../qnn/builder/opbuilder/clip_op_builder.cc | 8 +++--- .../qnn/builder/opbuilder/conv_op_builder.cc | 12 ++++----- .../opbuilder/instance_norm_op_builder.cc | 8 +++--- .../qnn/builder/opbuilder/pad_op_builder.cc | 4 +-- .../builder/opbuilder/softmax_op_builder.cc | 8 +++--- .../qnn/builder/qnn_model_wrapper.cc | 24 ++++++++--------- .../providers/qnn/builder/qnn_model_wrapper.h | 9 +++---- 9 files changed, 53 insertions(+), 54 deletions(-) diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc index 0e6dbb9cc3..6d8c80bd2a 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc @@ -56,8 +56,8 @@ Status BaseOpBuilder::ProcessInput(QnnModelWrapper& qnn_model_wrapper, return Status::OK(); } - OnnxInputInfo input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(input, input_info)); + TensorInfo input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(input, input_info)); std::vector unpacked_tensor; if (input_info.is_initializer) { @@ -126,8 +126,8 @@ Status BaseOpBuilder::ProcessOutputs(QnnModelWrapper& qnn_model_wrapper, for (size_t output_i = 0; output_i < output_count; ++output_i) { const auto& output_name = outputs[output_i].node_arg.Name(); - OnnxInputInfo output_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(outputs[output_i], output_info)); + TensorInfo output_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(outputs[output_i], output_info)); if (output_info.quant_param.encodingDefinition == QNN_DEFINITION_DEFINED) { ORT_RETURN_IF_ERROR(OverrideOutputQuantParam(qnn_model_wrapper, node_unit, logger, input_names, diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/batch_norm_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/batch_norm_op_builder.cc index 8febf09f0e..294aa65987 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/batch_norm_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/batch_norm_op_builder.cc @@ -251,7 +251,7 @@ class BatchNormOpBuilder : public BaseOpBuilder { return Status::OK(); } - Status PreprocessMean(const OnnxInputInfo& mean_info, + Status PreprocessMean(const TensorInfo& mean_info, const bool is_npu_backend, const uint8_t* mean_raw_ptr, const size_t mean_raw_ptr_length, @@ -273,7 +273,7 @@ class BatchNormOpBuilder : public BaseOpBuilder { return Status::OK(); } - Status PreprocessStd(const OnnxInputInfo& var_info, + Status PreprocessStd(const TensorInfo& var_info, const bool is_npu_backend, const uint8_t* var_raw_ptr, const size_t var_raw_ptr_length, @@ -297,7 +297,7 @@ class BatchNormOpBuilder : public BaseOpBuilder { return Status::OK(); } - Status PreprocessScale(const OnnxInputInfo& scale_info, + Status PreprocessScale(const TensorInfo& scale_info, const bool is_npu_backend, const uint8_t* scale_raw_ptr, const size_t scale_raw_ptr_length, @@ -325,7 +325,7 @@ class BatchNormOpBuilder : public BaseOpBuilder { return Status::OK(); } - Status PreprocessBias(const OnnxInputInfo& bias_info, + Status PreprocessBias(const TensorInfo& bias_info, const bool is_npu_backend, const uint8_t* bias_raw_ptr, const size_t bias_raw_ptr_length, @@ -354,7 +354,7 @@ class BatchNormOpBuilder : public BaseOpBuilder { return Status::OK(); } - Status Postprocess(const OnnxInputInfo& info, + Status Postprocess(const TensorInfo& info, const bool is_npu_backend, const std::vector& double_tensor, const double rmax, @@ -476,14 +476,14 @@ Status BatchNormOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper, { const std::string& scale_name = inputs[1].node_arg.Name(); const std::string& bias_name = inputs[2].node_arg.Name(); - OnnxInputInfo var_info = {}; - OnnxInputInfo mean_info = {}; - OnnxInputInfo scale_info = {}; - OnnxInputInfo bias_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[1], scale_info)); - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[2], bias_info)); - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[3], mean_info)); - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[4], var_info)); + TensorInfo var_info = {}; + TensorInfo mean_info = {}; + TensorInfo scale_info = {}; + TensorInfo bias_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], scale_info)); + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[2], bias_info)); + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[3], mean_info)); + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[4], var_info)); // scale, bias, mean, and var must be initializers ORT_RETURN_IF_NOT(scale_info.is_initializer, "scale must be initializers"); diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/clip_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/clip_op_builder.cc index df4c718949..0a9f9889ad 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/clip_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/clip_op_builder.cc @@ -84,8 +84,8 @@ Status ClipOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra std::vector min_val_bytes; if (num_inputs > 1 && !inputs[1].node_arg.Name().empty()) { - OnnxInputInfo min_input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[1], min_input_info)); + TensorInfo min_input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], min_input_info)); ORT_RETURN_IF_NOT(min_input_info.qnn_data_type == qnn_data_type, "QNN EP: The 'min' input of the Clip operator must be of type float32."); assert(min_input_info.is_initializer); // Checked by ExplicitOpCheck(). @@ -106,8 +106,8 @@ Status ClipOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_wra std::vector max_val_bytes; if (num_inputs > 2 && !inputs[2].node_arg.Name().empty()) { - OnnxInputInfo max_input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[2], max_input_info)); + TensorInfo max_input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[2], max_input_info)); ORT_RETURN_IF_NOT(max_input_info.qnn_data_type == qnn_data_type, "QNN EP: The 'max' input of the Clip operator must of type float32."); assert(max_input_info.is_initializer); // Checked by ExplicitOpCheck(). diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc index e8c5b98129..84b6cad9c4 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc @@ -175,8 +175,8 @@ Status ConvOpBuilder::ProcessConv2DInputs(QnnModelWrapper& qnn_model_wrapper, // { const std::string& input1_name = inputs[1].node_arg.Name(); - OnnxInputInfo input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[1], input_info)); + TensorInfo input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info)); std::string actual_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose"; input_names.push_back(actual_name); @@ -267,8 +267,8 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper, { const std::string& input0_name = inputs[0].node_arg.Name(); - OnnxInputInfo input0_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[0], input0_info)); + TensorInfo input0_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[0], input0_info)); const std::string conv_input0_name = input0_info.is_initializer ? input0_name : input0_name + "_ort_qnn_ep_reshape"; @@ -318,8 +318,8 @@ Status ConvOpBuilder::ProcessConv1DInputs(QnnModelWrapper& qnn_model_wrapper, // { const std::string& input1_name = inputs[1].node_arg.Name(); - OnnxInputInfo input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[1], input_info)); + TensorInfo input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[1], input_info)); std::string conv_weight_input_name = input_info.is_initializer ? input1_name : input1_name + "_ort_qnn_ep_transpose"; input_names.push_back(conv_weight_input_name); diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/instance_norm_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/instance_norm_op_builder.cc index 6d39cd8102..38172caa03 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/instance_norm_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/instance_norm_op_builder.cc @@ -94,8 +94,8 @@ Status InstanceNormOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper, bool do_op_validation) const { const auto& inputs = node_unit.Inputs(); - OnnxInputInfo input0_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[0], input0_info)); + TensorInfo input0_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[0], input0_info)); // HTP backend can only handle rank 3 inputs if the batch size is 1. If the batch size is not 1, // QNN EP must reshape the input and output to (N, 1, W, C) and process the InstanceNorm as rank 4. @@ -168,8 +168,8 @@ Status InstanceNormOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_m const auto& outputs = node_unit.Outputs(); - OnnxInputInfo output_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(outputs[0], output_info)); + TensorInfo output_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(outputs[0], output_info)); // HTP backend can only handle rank 3 inputs/outputs if the batch size is 1. If the batch size is not 1, // QNN EP must reshape the input and output to (N, 1, W, C) and process the InstanceNorm as rank 4. diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/pad_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/pad_op_builder.cc index 523095fac9..d6752f76ef 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/pad_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/pad_op_builder.cc @@ -67,8 +67,8 @@ Status ProcessConstantValue(QnnModelWrapper& qnn_model_wrapper, std::vector& param_tensor_names, const NodeUnit& node_unit, const NodeUnitIODef& input) { - OnnxInputInfo input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(input, input_info)); + TensorInfo input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(input, input_info)); std::vector unpacked_tensor; // Already confirmed constant_value input is initializer in ProcessInputs() ORT_RETURN_IF_ERROR(qnn_model_wrapper.UnpackInitializerData(*input_info.initializer_tensor, unpacked_tensor)); diff --git a/onnxruntime/core/providers/qnn/builder/opbuilder/softmax_op_builder.cc b/onnxruntime/core/providers/qnn/builder/opbuilder/softmax_op_builder.cc index 49d85d76e2..9059f74592 100644 --- a/onnxruntime/core/providers/qnn/builder/opbuilder/softmax_op_builder.cc +++ b/onnxruntime/core/providers/qnn/builder/opbuilder/softmax_op_builder.cc @@ -97,8 +97,8 @@ Status SoftmaxOpBuilder::ProcessInputs(QnnModelWrapper& qnn_model_wrapper, Qnn_Scalar_t axis_qnn_scalar = QNN_SCALAR_INIT; ORT_RETURN_IF_ERROR(ProcessAxisAttribute(qnn_model_wrapper, node_unit, axis_qnn_scalar, axis)); - OnnxInputInfo input_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(inputs[0], input_info)); + TensorInfo input_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(inputs[0], input_info)); const size_t input_rank = input_info.shape.size(); // If the axis attribute refers to the last dimension, then process the input as normal. @@ -161,8 +161,8 @@ Status SoftmaxOpBuilder::ProcessAttributesAndOutputs(QnnModelWrapper& qnn_model_ Qnn_Scalar_t axis_qnn_scalar = QNN_SCALAR_INIT; ORT_RETURN_IF_ERROR(ProcessAxisAttribute(qnn_model_wrapper, node_unit, axis_qnn_scalar, axis)); - OnnxInputInfo output_info = {}; - ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetOnnxInputInfo(outputs[0], output_info)); + TensorInfo output_info = {}; + ORT_RETURN_IF_ERROR(qnn_model_wrapper.GetTensorInfo(outputs[0], output_info)); const size_t output_rank = output_info.shape.size(); const bool axis_is_last_dim = static_cast(axis) == output_rank - 1; diff --git a/onnxruntime/core/providers/qnn/builder/qnn_model_wrapper.cc b/onnxruntime/core/providers/qnn/builder/qnn_model_wrapper.cc index 9d339387b0..a422434205 100644 --- a/onnxruntime/core/providers/qnn/builder/qnn_model_wrapper.cc +++ b/onnxruntime/core/providers/qnn/builder/qnn_model_wrapper.cc @@ -365,33 +365,33 @@ bool QnnModelWrapper::ProcessQuantizationParameter(const std::optional shape; Qnn_DataType_t qnn_data_type; Qnn_QuantizeParams_t quant_param; @@ -117,8 +117,7 @@ class QnnModelWrapper { return input_index_map_.find(tensor_name) != input_index_map_.end(); } - // TODO(hecli) rename to GetTensorInfo - Status GetOnnxInputInfo(const NodeUnitIODef& input, OnnxInputInfo& input_info) const; + Status GetTensorInfo(const NodeUnitIODef& input, TensorInfo& input_info) const; Status AddReshapeNode(const std::string& input_name, const std::string& output_name,