From 52b57fa860308a7130c2992b6398f06a54a973b4 Mon Sep 17 00:00:00 2001 From: Vladimir Paramuzov Date: Wed, 10 Aug 2022 19:51:55 +0400 Subject: [PATCH] [GPU] Use partial shape in some ops factories (#12353) --- .../intel_gpu/src/plugin/ops/cum_sum.cpp | 6 +---- .../intel_gpu/src/plugin/ops/gather_nd.cpp | 8 +++--- src/plugins/intel_gpu/src/plugin/ops/mvn.cpp | 6 ++--- .../intel_gpu/src/plugin/ops/prior_box.cpp | 26 ++++++++++++------- .../intel_gpu/src/plugin/ops/reduce.cpp | 2 +- .../intel_gpu/src/plugin/ops/reshape.cpp | 13 ++++++---- src/plugins/intel_gpu/src/plugin/ops/roll.cpp | 4 ++- .../plugin/ops/scatter_elements_update.cpp | 7 +---- .../src/plugin/ops/scatter_nd_update.cpp | 17 +----------- .../intel_gpu/src/plugin/ops/select.cpp | 20 +++++++------- .../src/plugin/ops/shuffle_channels.cpp | 16 +----------- .../intel_gpu/src/plugin/ops/softmax.cpp | 11 ++------ .../src/plugin/ops/space_to_batch.cpp | 7 +++-- .../intel_gpu/src/plugin/ops/split.cpp | 22 +++++++++------- .../src/plugin/ops/strided_slice.cpp | 16 +++++++++--- .../intel_gpu/src/plugin/ops/transpose.cpp | 2 +- .../intel_gpu/src/plugin/ops/unary.cpp | 6 ++--- 17 files changed, 87 insertions(+), 102 deletions(-) diff --git a/src/plugins/intel_gpu/src/plugin/ops/cum_sum.cpp b/src/plugins/intel_gpu/src/plugin/ops/cum_sum.cpp index 244578ab96e..dad66a4bddc 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/cum_sum.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/cum_sum.cpp @@ -21,7 +21,6 @@ static void CreateCumSumOp(Program& p, const std::shared_ptris_exclusive(); auto reverse = op->is_reverse(); - size_t rank = op->get_input_shape(0).size(); int64_t axis = 0; if (op->get_input_size() == 2) { auto axes_constant = std::dynamic_pointer_cast(op->get_input_node_shared_ptr(1)); @@ -30,10 +29,7 @@ static void CreateCumSumOp(Program& p, const std::shared_ptrcast_vector()[0]; } - if (axis < 0) - axis += rank; - if (axis < 0 || axis >= static_cast(rank)) - IE_THROW() << "CumSum axis is not correspond to number of dimensions"; + axis = ov::normalize_axis(op.get(), axis, op->get_input_partial_shape(0).rank()); auto primitive = cldnn::cum_sum(layerName, inputPrimitives[0], diff --git a/src/plugins/intel_gpu/src/plugin/ops/gather_nd.cpp b/src/plugins/intel_gpu/src/plugin/ops/gather_nd.cpp index dfc16bee19d..f0d639f4b48 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/gather_nd.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/gather_nd.cpp @@ -18,8 +18,8 @@ static void CreateGatherNDOp(Program& p, const std::shared_ptr(op->get_input_shape(0).size()); - int32_t indices_rank = static_cast(op->get_input_shape(1).size()); + auto input_rank = op->get_input_partial_shape(0).size(); + auto indices_rank = op->get_input_partial_shape(1).size(); auto batch_dims = op->get_batch_dims(); @@ -43,8 +43,8 @@ static void CreateGatherNDOp(Program& p, const std::shared_ptr(op->get_input_shape(0).size()); - int32_t indices_rank = static_cast(op->get_input_shape(1).size()); + auto input_rank = op->get_input_partial_shape(0).size(); + auto indices_rank = op->get_input_partial_shape(1).size(); auto batch_dims = op->get_batch_dims(); diff --git a/src/plugins/intel_gpu/src/plugin/ops/mvn.cpp b/src/plugins/intel_gpu/src/plugin/ops/mvn.cpp index cac45e2d5e1..f0c9de82321 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/mvn.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/mvn.cpp @@ -49,10 +49,8 @@ static void CreateMVNOp(Program& p, const std::shared_ptr& if (!inConst) IE_THROW() << "Unsupported parameter nodes type in " << op->get_friendly_name() << " (" << op->get_type_name() << ")"; - auto& mvnShape = op->get_output_shape(0); - std::vector axes = inConst->cast_vector(); - for (int32_t& axis : axes) - axis = axis < 0 ? axis + mvnShape.size() : axis; + std::vector axes = inConst->cast_vector(); + ov::normalize_axes(op.get(), op->get_output_partial_shape(0).size(), axes); const size_t chanelAxis = 1; bool across_channels = std::find(axes.begin(), axes.end(), chanelAxis) != axes.end(); diff --git a/src/plugins/intel_gpu/src/plugin/ops/prior_box.cpp b/src/plugins/intel_gpu/src/plugin/ops/prior_box.cpp index 16e857952fb..ca7fba510d6 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/prior_box.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/prior_box.cpp @@ -26,11 +26,16 @@ static void CreatePriorBoxClusteredOp(Program& p, const std::shared_ptrget_input_shape(0); - auto img_dims = op->get_input_shape(1); + auto input_pshape = op->get_input_partial_shape(0); + auto img_pshape = op->get_input_partial_shape(1); - int img_w = static_cast(img_dims.back()); - int img_h = static_cast(img_dims.at(img_dims.size() - 2)); + OPENVINO_ASSERT(input_pshape.is_static() && img_pshape.is_static(), "Dynamic shapes are not supported for PriorBoxClustered operation yet"); + + auto input_shape = input_pshape.to_shape(); + auto img_shape = img_pshape.to_shape(); + + int img_w = static_cast(img_shape.back()); + int img_h = static_cast(img_shape.at(img_shape.size() - 2)); cldnn::tensor img_size = (cldnn::tensor) cldnn::spatial(TensorValue(img_w), TensorValue(img_h)); auto step_w = attrs.step_widths; @@ -41,8 +46,8 @@ static void CreatePriorBoxClusteredOp(Program& p, const std::shared_ptr(img_w) / inp_dims.back(); - step_h = static_cast(img_h) / inp_dims.at(img_dims.size() - 2); + step_w = static_cast(img_w) / input_shape.back(); + step_h = static_cast(img_h) / input_shape.at(img_shape.size() - 2); } auto priorBoxPrim = cldnn::prior_box(layerName, @@ -84,10 +89,13 @@ static void CreatePriorBoxOp(Program& p, const std::shared_ptrget_input_shape(1); + auto img_pshape = op->get_input_partial_shape(1); + OPENVINO_ASSERT(img_pshape.is_static(), "Dynamic shapes are not supported for PriorBox operation yet"); + auto img_shape = img_pshape.to_shape(); - auto wdim = img_dims.back(); - auto hdim = img_dims.at(img_dims.size()-2); + + auto wdim = img_shape.back(); + auto hdim = img_shape.at(img_shape.size()-2); cldnn::tensor img_size = (cldnn::tensor) cldnn::spatial(TensorValue(wdim), TensorValue(hdim)); auto priorBoxPrim = cldnn::prior_box(layerName, diff --git a/src/plugins/intel_gpu/src/plugin/ops/reduce.cpp b/src/plugins/intel_gpu/src/plugin/ops/reduce.cpp index 62b9a06e9a7..c9e51e6516d 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/reduce.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/reduce.cpp @@ -28,7 +28,7 @@ static void CreateReduceOp(Program& p, const std::shared_ptr& op, auto inputPrimitives = p.GetInputPrimitiveIDs(op); std::string layerName = layer_type_name_ID(op); - int64_t rank = op->get_input_shape(0).size(); + int64_t rank = op->get_input_partial_shape(0).size(); auto axes_constant = std::dynamic_pointer_cast(op->get_input_node_shared_ptr(1)); if (!axes_constant) { diff --git a/src/plugins/intel_gpu/src/plugin/ops/reshape.cpp b/src/plugins/intel_gpu/src/plugin/ops/reshape.cpp index 54bf2a4724c..9ac2acc5693 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/reshape.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/reshape.cpp @@ -20,17 +20,20 @@ static void CreateCommonReshapeOp(Program& p, const std::shared_ptrget_input_shape(0); - auto outDims = op->get_output_shape(0); - auto outTensor = tensor_from_dims(outDims); + auto input_pshape = op->get_input_partial_shape(0); + auto output_pshape = op->get_output_partial_shape(0); + + OPENVINO_ASSERT(input_pshape.is_static() && output_pshape.is_static(), "Dynamic shapes are not supported for Reshape operation yet"); + + auto outTensor = tensor_from_dims(output_pshape.to_shape()); // if we convert from or to 5D/6D, additional reorder also required to change format cldnn::primitive_id reshapeInputId = inputPrimitives[0]; - if (inDims.size() != outDims.size()) { + if (input_pshape.size() != output_pshape.size()) { cldnn::primitive_id reorderId = "reorder:" + op->get_friendly_name() + "_reorder"; cldnn::format outputFormat = cldnn::format::bfyx; - switch (outDims.size()) { + switch (output_pshape.size()) { case 5: outputFormat = cldnn::format::bfzyx; break; case 6: outputFormat = cldnn::format::bfwzyx; break; default: break; diff --git a/src/plugins/intel_gpu/src/plugin/ops/roll.cpp b/src/plugins/intel_gpu/src/plugin/ops/roll.cpp index 3d544bf6866..320c5ccc314 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/roll.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/roll.cpp @@ -20,7 +20,9 @@ void CreateRollOp(Program& p, const std::shared_ptr& op) { const auto inputs = p.GetInputPrimitiveIDs(op); const auto layer_name = layer_type_name_ID(op); const auto& op_friendly_name = op->get_friendly_name(); - const auto& input_shape = op->get_input_shape(0); + const auto& input_pshape = op->get_input_partial_shape(0); + OPENVINO_ASSERT(input_pshape.is_static(), "Dynamic shapes are not supported for Roll operation yet"); + const auto& input_shape = input_pshape.to_shape(); const uint8_t rank = input_shape.size(); const auto format = cldnn::format::get_default_format(rank); const auto default_rank = format.dimension(); diff --git a/src/plugins/intel_gpu/src/plugin/ops/scatter_elements_update.cpp b/src/plugins/intel_gpu/src/plugin/ops/scatter_elements_update.cpp index 3960c76ddd5..7a024f44d1e 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/scatter_elements_update.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/scatter_elements_update.cpp @@ -18,16 +18,11 @@ static void CreateScatterElementsUpdateOp(Program& p, const std::shared_ptrget_input_shape(0).size(); auto axes_constant = std::dynamic_pointer_cast(op->get_input_node_shared_ptr(3)); if (!axes_constant) { OPENVINO_ASSERT("Unsupported parameter nodes type in ", op->get_friendly_name(), " (", op->get_type_name(), ")"); } - int64_t axis = axes_constant->cast_vector()[0]; - if (axis < 0) - axis += rank; - if (axis < 0 || axis >= static_cast(rank)) - OPENVINO_ASSERT("ScatterElementsUpdate axis is not correspond to number of dimensions"); + int64_t axis = ov::normalize_axis(op.get(), axes_constant->cast_vector()[0], op->get_input_partial_shape(0).rank()); auto primitive = cldnn::scatter_elements_update(layerName, inputPrimitives[0], diff --git a/src/plugins/intel_gpu/src/plugin/ops/scatter_nd_update.cpp b/src/plugins/intel_gpu/src/plugin/ops/scatter_nd_update.cpp index f1ffd81f565..a7577cf1998 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/scatter_nd_update.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/scatter_nd_update.cpp @@ -17,22 +17,7 @@ static void CreateScatterNDUpdateOp(Program& p, const std::shared_ptrget_input_shape(1).size(); - - auto indices_constant = std::dynamic_pointer_cast(op->get_input_node_shared_ptr(1)); - if (indices_constant) { - auto indices = indices_constant->cast_vector(); - auto indices_last_dim = op->get_input_shape(1)[indices_rank - 1]; - auto data_shape = op->get_input_shape(0); - bool valid = true; - for (size_t i = 0; i < indices.size(); ++i) { - if (indices[i] >= static_cast(data_shape[i % indices_last_dim])) - valid = false; - } - - if (!valid) - IE_THROW() << "Invaild indices values"; - } + auto indices_rank = op->get_input_partial_shape(1).size(); auto primitive = cldnn::scatter_nd_update(layerName, inputPrimitives[0], diff --git a/src/plugins/intel_gpu/src/plugin/ops/select.cpp b/src/plugins/intel_gpu/src/plugin/ops/select.cpp index 85e0c000487..85f154c3a7b 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/select.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/select.cpp @@ -19,8 +19,8 @@ static void CreateSelectOp(Program& p, const std::shared_ptrget_output_shape(0); - auto outDimsN = outDims.size(); + auto output_pshape = op->get_output_partial_shape(0); + auto output_rank = output_pshape.size(); auto broadcast_type = op->get_auto_broadcast(); @@ -32,13 +32,15 @@ static void CreateSelectOp(Program& p, const std::shared_ptrget_input_shape(i); - auto inputDimsN = inputDims.size(); + auto input_pshape = op->get_input_partial_shape(i); + OPENVINO_ASSERT(input_pshape.is_static(), "Dynamic shapes are not supported for v1::Select with NUMPY mode yet"); + auto input_shape = input_pshape.to_shape(); + auto input_rank = input_shape.size(); // Add reorder if changing number of dimensions requires changing format - auto targetFormat = cldnn::format::get_default_format(outDimsN); + auto targetFormat = cldnn::format::get_default_format(output_rank); - if (targetFormat.value != cldnn::format::get_default_format(inputDimsN).value) { + if (targetFormat.value != cldnn::format::get_default_format(input_rank).value) { auto reorderName = layerName + "_cldnn_in" + std::to_string(i) + "_reorder"; auto targetDatatype = DataTypeFromPrecision(op->get_input_element_type(i)); auto reorderPrim = cldnn::reorder(reorderName, @@ -56,13 +58,13 @@ static void CreateSelectOp(Program& p, const std::shared_ptrget_friendly_name()); diff --git a/src/plugins/intel_gpu/src/plugin/ops/shuffle_channels.cpp b/src/plugins/intel_gpu/src/plugin/ops/shuffle_channels.cpp index ebe19f852f0..ba859e54780 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/shuffle_channels.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/shuffle_channels.cpp @@ -17,22 +17,8 @@ static void CreateShuffleChannelsOp(Program& p, const std::shared_ptrget_input_shape(0).size(); - int32_t group = op->get_group(); - int32_t axis = op->get_axis(); - - if (axis < 0) - axis += in_rank; - - if (axis < 0 || axis >= static_cast(in_rank)) - IE_THROW() << "Incorrect axis value! Actual axis is" + std::to_string(group); - - if (group < 1) - IE_THROW() << "Invalid group size value (should equal at least one). Actual block size is" << std::to_string(group); - - if (op->get_input_shape(0)[axis] % group != 0) - IE_THROW() << "Group parameter must evenly divide the channel dimension. Actual group size is " << std::to_string(axis); + int64_t axis = ov::normalize_axis(op.get(), op->get_axis(), op->get_input_partial_shape(0).rank()); auto shuffleChannelsPrim = cldnn::shuffle_channels(layerName, inputPrimitives[0], diff --git a/src/plugins/intel_gpu/src/plugin/ops/softmax.cpp b/src/plugins/intel_gpu/src/plugin/ops/softmax.cpp index 0ce6948f18c..3f6ef997693 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/softmax.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/softmax.cpp @@ -31,12 +31,7 @@ static void CreateSoftmaxOp(Program& p, const std::shared_ptrget_axis(); - size_t rank = op->get_input_shape(0).size(); - if (axis < 0) - axis += rank; - if (axis < 0 || axis >= static_cast(rank)) - IE_THROW() << "Softmax axis is not correspond to number of dimensions"; + int64_t axis = ov::normalize_axis(op.get(), op->get_axis(), op->get_input_partial_shape(0).rank()); auto softmaxPrim = cldnn::softmax(layerName, inputPrimitives[0], @@ -52,9 +47,7 @@ static void CreateLogSoftmaxOp(Program& p, const std::shared_ptrget_axis(); - if (axis < 0) - axis += op->get_input_shape(0).size(); + int64_t axis = ov::normalize_axis(op.get(), op->get_axis(), op->get_input_partial_shape(0).rank()); auto softmaxPrim = cldnn::softmax(layerNameSoftmax, inputPrimitives[0], diff --git a/src/plugins/intel_gpu/src/plugin/ops/space_to_batch.cpp b/src/plugins/intel_gpu/src/plugin/ops/space_to_batch.cpp index 0c4799c38a4..992b9937258 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/space_to_batch.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/space_to_batch.cpp @@ -18,7 +18,7 @@ static void CreateSpaceToBatchOp(Program& p, const std::shared_ptrget_input_shape(0).size(); + auto rank = op->get_input_partial_shape(0).size(); auto format = cldnn::format::get_default_format(rank); std::vector inputs; @@ -36,7 +36,10 @@ static void CreateSpaceToBatchOp(Program& p, const std::shared_ptrget_output_shape(0)); + auto output_pshape = op->get_output_partial_shape(0); + // In case of dynamic shapes pass dummy shape value to space_to_batch primitive + // To be removed once we enable internal shape infer for all operations + auto out_size = output_pshape.is_static() ? tensor_from_dims(output_pshape.to_shape()) : cldnn::tensor(); auto batchToSpacePrim = cldnn::space_to_batch(layerName, inputPrimitives[0], // input diff --git a/src/plugins/intel_gpu/src/plugin/ops/split.cpp b/src/plugins/intel_gpu/src/plugin/ops/split.cpp index 4e5d36e6119..00fc7b0328f 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/split.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/split.cpp @@ -17,8 +17,12 @@ static void CreateCommonSplitOp(Program& p, const std::shared_ptr& auto inputPrimitives = p.GetInputPrimitiveIDs(op); std::string layerName = layer_type_name_ID(op); - auto inputDims = op->get_input_shape(0); - InferenceEngine::SizeVector startOffset(inputDims.size()); + auto input_pshape = op->get_input_partial_shape(0); + OPENVINO_ASSERT(input_pshape.is_static(), + "Dynamic shapes are not supported yet for v1::Split and v1::VariadicSplit operations"); + + auto input_shape = input_pshape.to_shape(); + InferenceEngine::SizeVector start_offset(input_shape.size()); bool is_single_out_split = op->get_output_size() == 1; @@ -26,12 +30,12 @@ static void CreateCommonSplitOp(Program& p, const std::shared_ptr& std::string outLayerName = layerName + (is_single_out_split ? "" : "." + std::to_string(i)); const auto outLayerDims = op->get_output_shape(i); NGRAPH_SUPPRESS_DEPRECATED_START - if (outLayerDims.size() != startOffset.size()) { + if (outLayerDims.size() != start_offset.size()) { IE_THROW() << "Invalid dimesions in split layer: " << op->get_friendly_name() << " output: " << op->get_output_tensor_name(i); } - for (size_t i = 0; i < inputDims.size(); i++) { - if ((outLayerDims[i] + startOffset[i]) > inputDims[i]) { + for (size_t i = 0; i < input_shape.size(); i++) { + if ((outLayerDims[i] + start_offset[i]) > input_shape[i]) { IE_THROW() << "Invalid dimesions in split layer: " << op->get_friendly_name() << " output: " << op->get_output_tensor_name(i); } @@ -39,7 +43,7 @@ static void CreateCommonSplitOp(Program& p, const std::shared_ptr& NGRAPH_SUPPRESS_DEPRECATED_END auto outTensor = tensor_from_dims(outLayerDims, 1); - auto offsetTensor = tensor_from_dims(startOffset, 0); + auto offsetTensor = tensor_from_dims(start_offset, 0); auto cropPrim = cldnn::crop(outLayerName, inputPrimitives[0], outTensor, offsetTensor, op->get_friendly_name()); p.primitiveIDs[outLayerName] = outLayerName; @@ -48,9 +52,9 @@ static void CreateCommonSplitOp(Program& p, const std::shared_ptr& p.profilingIDs.push_back(outLayerName); p.InitProfileInfo(outLayerName, "Crop"); - for (size_t i = 0; i < inputDims.size(); i++) { - if (outLayerDims[i] != inputDims[i]) { - startOffset[i] += outLayerDims[i]; + for (size_t i = 0; i < input_shape.size(); i++) { + if (outLayerDims[i] != input_shape[i]) { + start_offset[i] += outLayerDims[i]; } } } diff --git a/src/plugins/intel_gpu/src/plugin/ops/strided_slice.cpp b/src/plugins/intel_gpu/src/plugin/ops/strided_slice.cpp index 4da1ae7b2a1..4aaf3a0af04 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/strided_slice.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/strided_slice.cpp @@ -20,6 +20,7 @@ static void CreateStridedSliceOp(Program& p, const std::shared_ptrget_output_partial_shape(0); do { auto data_output = op->input_value(0); auto begin_node = std::dynamic_pointer_cast(op->input_value(1).get_node_shared_ptr()); @@ -32,8 +33,13 @@ static void CreateStridedSliceOp(Program& p, const std::shared_ptrget_input_shape(0); - auto output_shape = op->get_output_shape(0); + auto input_pshape = op->get_input_partial_shape(0); + + if (input_pshape.is_dynamic() || output_pshape.is_dynamic()) + return; + + auto input_shape = input_pshape.to_shape(); + auto output_shape = output_pshape.to_shape(); auto begin = begin_node->cast_vector(); auto end = end_node->cast_vector(); @@ -233,6 +239,10 @@ static void CreateStridedSliceOp(Program& p, const std::shared_ptrget_end_mask(), op->get_new_axis_mask(), op->get_shrink_axis_mask(), - op->get_output_partial_shape(0).to_shape(), + output_shape, op->get_friendly_name()); p.AddPrimitive(stridedSlicePrim); diff --git a/src/plugins/intel_gpu/src/plugin/ops/transpose.cpp b/src/plugins/intel_gpu/src/plugin/ops/transpose.cpp index f250b942438..7174586bed8 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/transpose.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/transpose.cpp @@ -59,7 +59,7 @@ static void CreateTransposeOp(Program& p, const std::shared_ptr(op->get_input_shape(0).size())); + int rank = std::max(4, static_cast(op->get_input_partial_shape(0).size())); if (order.empty()) { // if order size is less than 4 - fill the rest with just copy for (int o = rank - 1; o >= 0; o--) diff --git a/src/plugins/intel_gpu/src/plugin/ops/unary.cpp b/src/plugins/intel_gpu/src/plugin/ops/unary.cpp index 963a00cb6d9..b29900f324c 100644 --- a/src/plugins/intel_gpu/src/plugin/ops/unary.cpp +++ b/src/plugins/intel_gpu/src/plugin/ops/unary.cpp @@ -76,10 +76,10 @@ static void CreatePReluOp(Program& p, const std::shared_ptr(op->get_input_node_shared_ptr(1)); - auto slope_shape = op->get_input_shape(1); - auto out_shape = op->get_output_shape(0); + auto slope_shape = op->get_input_partial_shape(1); + auto out_shape = op->get_output_partial_shape(0); - if (slope_node && ngraph::shape_size(slope_shape) == 1) { + if (slope_node && ngraph::shape_size(slope_shape.to_shape()) == 1) { float slope; if (!ngraph::op::util::get_single_value(slope_node, slope)) IE_THROW() << "Unsupported parameter size in " << op->get_friendly_name() << " (" << op->get_type_name() << ")";