From 416c4ffb7e9a2bbfa7b5c283b546bc776e3eed05 Mon Sep 17 00:00:00 2001 From: barnasm1 Date: Fri, 7 Jun 2024 07:55:52 +0200 Subject: [PATCH] [CORE] depracate get/set_concatenation_axis functions (#24737) ### Details: - remove `set_concatenation_axis` function usage - replace `get_concatenation_axis` function usage ### Tickets: - [CVS-94507](https://jira.devtools.intel.com/browse/CVS-94507) ### Related PR: - https://github.com/openvinotoolkit/openvino/pull/24383 --------- Co-authored-by: Michal Lukaszewski --- .../src/move_fake_quantize.cpp | 12 ++++++++++-- .../src/network_helper.cpp | 12 ++++++++++-- .../src/pruning/propagate_masks.cpp | 6 +++++- .../common_optimizations/concat_to_broadcast.cpp | 4 ++-- .../symbolic_transformations/dereshape_matmul.cpp | 6 ++++-- .../symbol_optimization.cpp | 6 +++++- .../transpose_sinking/ts_concat.cpp | 15 +++++++++------ src/core/include/openvino/op/concat.hpp | 4 ++++ .../include/concat_shape_inference.hpp | 2 +- src/core/src/op/concat.cpp | 6 +----- src/core/tests/copy.cpp | 2 +- src/plugins/intel_gpu/src/graph/concatenation.cpp | 2 +- 12 files changed, 53 insertions(+), 24 deletions(-) diff --git a/src/common/low_precision_transformations/src/move_fake_quantize.cpp b/src/common/low_precision_transformations/src/move_fake_quantize.cpp index 1b3fbec4074..bce8ca3bb68 100644 --- a/src/common/low_precision_transformations/src/move_fake_quantize.cpp +++ b/src/common/low_precision_transformations/src/move_fake_quantize.cpp @@ -9,6 +9,7 @@ #include #include "openvino/core/node.hpp" +#include "openvino/core/validation_util.hpp" #include "openvino/opsets/opset1.hpp" #include "openvino/pass/pattern/op/or.hpp" @@ -83,10 +84,17 @@ bool MoveFakeQuantize::transform(TransformationContext& context, ov::pass::patte if (concat_node == nullptr) { return false; } - const auto concat_axis = concat_node->get_concatenation_axis(); + + const auto rank = concat_node->get_output_partial_shape(0).rank(); + if (rank.is_dynamic()) { + return false; + } + + const auto concat_axis = ov::util::normalize(concat_node->get_axis(), rank.get_length()); + for (size_t i = 0; i < 4; i++) { curr_constants[i] = as_type_ptr(fq->get_input_node_shared_ptr(i + 1)); - if (!multi_chanels && concat_axis >= 0 && curr_constants[i]->get_shape().size() > static_cast(concat_axis) + if (!multi_chanels && curr_constants[i]->get_shape().size() > static_cast(concat_axis) && curr_constants[i]->get_shape()[concat_axis] != 1) { multi_chanels = true; } diff --git a/src/common/low_precision_transformations/src/network_helper.cpp b/src/common/low_precision_transformations/src/network_helper.cpp index 58561cb1482..d0a7470a6cf 100644 --- a/src/common/low_precision_transformations/src/network_helper.cpp +++ b/src/common/low_precision_transformations/src/network_helper.cpp @@ -1561,7 +1561,11 @@ NetworkHelper::InsertDequantizationResult NetworkHelper::moveDequantizationBefor std::vector>> multiplyConstants, subtractConstants; if (is_type(operation)) { const auto concatNode = as_type_ptr(operation); - auto axis = concatNode->get_concatenation_axis(); + int64_t axis = -1; + if (concatNode->get_output_partial_shape(0).rank().is_static()) { + const auto rank = concatNode->get_output_partial_shape(0).rank().get_length(); + axis = ov::util::normalize(concatNode->get_axis(), rank); + } if (dequantization.multiply && dequantization.multiplyConstant->get_shape().size() > 1 && dequantization.multiplyConstant->get_shape()[axis] != 1) { multiplyConstants = NetworkHelper::splitConstantsBeforeConcat(operation, { dequantization.multiplyConstant }); } @@ -1659,7 +1663,11 @@ std::vector>> NetworkHelper::s std::vector>> newConstants(currConstants.size()); auto number_of_concat_inputs = concat->get_input_size(); const auto concatNode = as_type_ptr(concat); - const auto concat_axis = concatNode->get_concatenation_axis(); + int64_t concat_axis = -1; + if (concatNode->get_output_partial_shape(0).rank().is_static()) { + const auto rank = concatNode->get_output_partial_shape(0).rank().get_length(); + concat_axis = ov::util::normalize(concatNode->get_axis(), rank); + } std::vector shape_axis(number_of_concat_inputs); for (size_t i{ 0 }; i < number_of_concat_inputs; ++i) { auto shape = concat->get_input_partial_shape(i); diff --git a/src/common/offline_transformations/src/pruning/propagate_masks.cpp b/src/common/offline_transformations/src/pruning/propagate_masks.cpp index 3d22feafa60..cc245e5ddd7 100644 --- a/src/common/offline_transformations/src/pruning/propagate_masks.cpp +++ b/src/common/offline_transformations/src/pruning/propagate_masks.cpp @@ -765,7 +765,11 @@ public: if (!concat_ptr) { return false; } - auto axis = concat_ptr->get_concatenation_axis(); + int64_t axis = -1; + if (concat_ptr->get_output_partial_shape(0).rank().is_static()) { + const auto rank = concat_ptr->get_output_partial_shape(0).rank().get_length(); + axis = ov::util::normalize(concat_ptr->get_axis(), rank); + } auto inputs = concat_ptr->inputs(); std::map input_masks; diff --git a/src/common/transformations/src/transformations/common_optimizations/concat_to_broadcast.cpp b/src/common/transformations/src/transformations/common_optimizations/concat_to_broadcast.cpp index db2daca441a..ec72c16cca7 100644 --- a/src/common/transformations/src/transformations/common_optimizations/concat_to_broadcast.cpp +++ b/src/common/transformations/src/transformations/common_optimizations/concat_to_broadcast.cpp @@ -15,7 +15,7 @@ static bool use_broadcast(const std::shared_ptr& concat) { const auto& output = concat->output(0); const auto& input = concat->input(0); - const auto& input_concat_dim = input.get_partial_shape()[concat->get_concatenation_axis()]; + const auto& input_concat_dim = input.get_partial_shape()[concat->get_axis()]; return input_concat_dim.is_static() && input_concat_dim.get_length() == 1 && output.get_partial_shape().is_static(); } @@ -87,4 +87,4 @@ ov::pass::ConcatToBroadcast::ConcatToBroadcast() { auto m = std::make_shared(concat_label, matcher_name); this->register_matcher(m, callback); -} \ No newline at end of file +} diff --git a/src/common/transformations/src/transformations/symbolic_transformations/dereshape_matmul.cpp b/src/common/transformations/src/transformations/symbolic_transformations/dereshape_matmul.cpp index f5ee0222c5f..d2585b08f85 100644 --- a/src/common/transformations/src/transformations/symbolic_transformations/dereshape_matmul.cpp +++ b/src/common/transformations/src/transformations/symbolic_transformations/dereshape_matmul.cpp @@ -29,7 +29,9 @@ bool concat_predicate(ov::Output output) { const auto& concat = ov::as_type_ptr(output.get_node_shared_ptr()); if (!concat) return false; - return concat->get_concatenation_axis() >= output_pshape.rank().get_length() - 2; + + const auto norm_axis = ov::util::normalize(concat->get_axis(), output_pshape.rank().get_length()); + return norm_axis >= output_pshape.rank().get_length() - 2; } bool last_two_dims_are_equal(const ov::PartialShape& lhs, const ov::PartialShape& rhs) { @@ -136,7 +138,7 @@ void pull_reshape_through_optional_concat_and_bea(const ov::pass::pattern::Patte OPENVINO_ASSERT(concat_node != nullptr, "DeReshapeMatMul transformation matched operation which should be Concat -- but it is not"); auto rank = concat_node->get_output_partial_shape(0).rank().get_length(); - auto axis = (concat_node->get_concatenation_axis() == (rank - 1)) ? -1 : -2; + auto axis = (ov::util::normalize(concat_node->get_axis(), rank) == (rank - 1)) ? -1 : -2; auto idx_of_reshape_input = reshape_output == concat_node->input_value(0) ? 0 : 1; auto idx_of_non_reshape_input = static_cast(!idx_of_reshape_input); diff --git a/src/common/transformations/src/transformations/symbolic_transformations/symbol_optimization.cpp b/src/common/transformations/src/transformations/symbolic_transformations/symbol_optimization.cpp index f779c73d86e..1a4507c08dc 100644 --- a/src/common/transformations/src/transformations/symbolic_transformations/symbol_optimization.cpp +++ b/src/common/transformations/src/transformations/symbolic_transformations/symbol_optimization.cpp @@ -7,6 +7,7 @@ #include "itt.hpp" #include "openvino/core/bound_evaluation_util.hpp" #include "openvino/core/rt_info.hpp" +#include "openvino/core/validation_util.hpp" #include "openvino/op/add.hpp" #include "openvino/op/concat.hpp" #include "openvino/op/convert.hpp" @@ -163,7 +164,10 @@ ov::Output alternative_source_from_concat_input_sources(const STS_map& if (!concat || concat->get_input_size() != 2) return alternative_source; int64_t idx = get_idx_of_symbol_in_source(source, symbol); - if (idx == -1 || idx != concat->get_concatenation_axis()) + if (idx == -1) + return alternative_source; + const auto rank = source.get_partial_shape().rank().get_length(); + if (idx != ov::util::normalize(concat->get_axis(), rank)) return alternative_source; // optimize using the knowledge of the Concat SI and what happens on the axis const auto& lhs_pshape = concat->get_input_partial_shape(0); diff --git a/src/common/transformations/src/transformations/transpose_sinking/ts_concat.cpp b/src/common/transformations/src/transformations/transpose_sinking/ts_concat.cpp index 0f7627b7c1c..8dbcf7ba285 100644 --- a/src/common/transformations/src/transformations/transpose_sinking/ts_concat.cpp +++ b/src/common/transformations/src/transformations/transpose_sinking/ts_concat.cpp @@ -5,6 +5,7 @@ #include "transformations/transpose_sinking/ts_concat.hpp" #include "itt.hpp" +#include "openvino/core/validation_util.hpp" #include "openvino/op/concat.hpp" #include "openvino/op/constant.hpp" #include "openvino/op/transpose.hpp" @@ -35,8 +36,7 @@ TSConcatForward::TSConcatForward() { return false; } - auto concat_axis = concat_node->get_concatenation_axis(); - if (concat_axis < 0) { + if (concat_node->get_output_partial_shape(0).is_dynamic()) { return false; } // todo: support dyn rank case @@ -45,10 +45,12 @@ TSConcatForward::TSConcatForward() { return false; } + const auto rank = concat_node->get_output_partial_shape(0).rank().get_length(); + const auto concat_axis = ov::util::normalize(concat_node->get_axis(), rank); + const auto transpose_axis_order = transpose_info.transpose_const->get_axis_vector_val(); const int64_t transposed_concat_axis = transpose_axis_order[concat_axis]; concat_node->set_axis(transposed_concat_axis); - concat_node->set_concatenation_axis(-1); default_outputs_update(main_node, transpose_info); return true; @@ -81,11 +83,13 @@ TSConcatBackward::TSConcatBackward() { } auto concat_node = as_type_ptr(main_node); - auto concat_axis = concat_node->get_concatenation_axis(); - if (concat_axis < 0) { + if (concat_node->get_output_partial_shape(0).is_dynamic()) { return false; } + const auto rank = concat_node->get_output_partial_shape(0).rank().get_length(); + auto concat_axis = ov::util::normalize(concat_node->get_axis(), rank); + const auto transpose_axis_order = transpose_const->get_axis_vector_val(); const auto reversed_transpose_axis_order = ReverseTransposeOrder(transpose_axis_order); if (static_cast(reversed_transpose_axis_order.size()) <= concat_axis) { @@ -94,7 +98,6 @@ TSConcatBackward::TSConcatBackward() { const auto transposed_concat_axis = reversed_transpose_axis_order[concat_axis]; concat_node->set_axis(static_cast(transposed_concat_axis)); - concat_node->set_concatenation_axis(-1); for (auto& new_node : sink_backward::InsertTransposeBeforeNode(main_node, transpose_const)) { register_new_node(new_node); diff --git a/src/core/include/openvino/op/concat.hpp b/src/core/include/openvino/op/concat.hpp index 5fa76967326..0e8fa67c54d 100644 --- a/src/core/include/openvino/op/concat.hpp +++ b/src/core/include/openvino/op/concat.hpp @@ -37,9 +37,13 @@ public: std::shared_ptr clone_with_new_inputs(const OutputVector& new_args) const override; /// \return The concatenation axis. + OPENVINO_DEPRECATED("The function get_concatenation_axis() is deprecated. Will be removed in 2025.0 release. Use " + "get_axis() instead.") int64_t get_concatenation_axis() const { return m_concat_axis; } + OPENVINO_DEPRECATED("The function set_concatenation_axis() is deprecated. Will be removed in 2025.0 release. Use " + "set_axis() instead.") void set_concatenation_axis(int64_t concatenation_axis) { m_concat_axis = concatenation_axis; } diff --git a/src/core/shape_inference/include/concat_shape_inference.hpp b/src/core/shape_inference/include/concat_shape_inference.hpp index 1f5d04b52fd..9978a798711 100644 --- a/src/core/shape_inference/include/concat_shape_inference.hpp +++ b/src/core/shape_inference/include/concat_shape_inference.hpp @@ -17,7 +17,7 @@ std::vector shape_infer(const Concat* op, const std::vector& input_s NODE_VALIDATION_CHECK(op, !input_shapes.empty()); using DimType = typename T::value_type; - auto concat_axis = op->get_concatenation_axis() < 0 ? op->get_axis() : op->get_concatenation_axis(); + auto concat_axis = op->get_axis(); const auto empty_dim = DimType{}; auto concat_dim = DimType{0}; diff --git a/src/core/src/op/concat.cpp b/src/core/src/op/concat.cpp index 61c49d258b2..de24245fa28 100644 --- a/src/core/src/op/concat.cpp +++ b/src/core/src/op/concat.cpp @@ -39,11 +39,7 @@ void Concat::validate_and_infer_types() { input_shapes.push_back(get_input_partial_shape(i)); } - const auto output_shapes = shape_infer(this, input_shapes); - const auto& output_shape = output_shapes[0]; - if (output_shape.rank().is_static() && (get_concatenation_axis() < 0)) { - set_concatenation_axis(ov::util::normalize(get_axis(), output_shape.size())); - } + const auto output_shape = shape_infer(this, input_shapes).front(); set_output_type(0, inputs_et, output_shape); } diff --git a/src/core/tests/copy.cpp b/src/core/tests/copy.cpp index 5456374ca76..106cb20fdfb 100644 --- a/src/core/tests/copy.cpp +++ b/src/core/tests/copy.cpp @@ -142,7 +142,7 @@ TEST(copy, concat) { ASSERT_TRUE(nullptr != new_node); ASSERT_TRUE(new_args == new_node->input_values()); - ASSERT_TRUE(node_cast->get_concatenation_axis() == axis); + ASSERT_TRUE(node_cast->get_axis() == axis); } TEST(copy, constant) { diff --git a/src/plugins/intel_gpu/src/graph/concatenation.cpp b/src/plugins/intel_gpu/src/graph/concatenation.cpp index ae4a8828d21..b493bb217b1 100644 --- a/src/plugins/intel_gpu/src/graph/concatenation.cpp +++ b/src/plugins/intel_gpu/src/graph/concatenation.cpp @@ -69,7 +69,7 @@ std::vector concatenation_inst::calc_output_layouts(const concatenation_ } ov::op::v0::Concat op; op.set_friendly_name(desc->id); - op.set_concatenation_axis(axis_index); + op.set_axis(axis_index); std::vector output_shapes = ov::op::v0::shape_infer(&op, input_shapes); return { layout {output_shapes[0], output_dt, output_format} }; }