From 15cd723369fc1c99d8a24768085b80b20c6df4a1 Mon Sep 17 00:00:00 2001 From: Xuejun Date: Thu, 7 May 2026 15:12:40 +0800 Subject: [PATCH 1/4] OpenVINO backend: enable RMS_NORM + VIEW & remove op_case 2 for rope --- ggml/src/ggml-openvino/ggml-decoder.cpp | 3 --- ggml/src/ggml-openvino/ggml-decoder.h | 2 +- ggml/src/ggml-openvino/ggml-openvino.cpp | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/ggml/src/ggml-openvino/ggml-decoder.cpp b/ggml/src/ggml-openvino/ggml-decoder.cpp index a9ff7edbcc2..b4e90a29b15 100644 --- a/ggml/src/ggml-openvino/ggml-decoder.cpp +++ b/ggml/src/ggml-openvino/ggml-decoder.cpp @@ -247,9 +247,6 @@ int GgmlOvDecoder::compute_op_case(const ggml_tensor * node) const { op_case = 0x00000000; break; } - if (node->src[0]->op == GGML_OP_VIEW) { - op_case = (op_case | 0x00000002); - } break; } case GGML_OP_VIEW: { diff --git a/ggml/src/ggml-openvino/ggml-decoder.h b/ggml/src/ggml-openvino/ggml-decoder.h index bdeb9d729a9..aa897c3c914 100644 --- a/ggml/src/ggml-openvino/ggml-decoder.h +++ b/ggml/src/ggml-openvino/ggml-decoder.h @@ -281,7 +281,7 @@ class GgmlOvDecoder : public ov::frontend::ggml::GgmlDecoder { } inline static bool is_output_idx(const ggml_tensor * tensor, const ggml_tensor * op) { - return op->op == GGML_OP_GET_ROWS && tensor == op->src[1] && op->src[0]->op != GGML_OP_NONE; + return op->op == GGML_OP_GET_ROWS && tensor == op->src[1] && op->src[0]->op != GGML_OP_NONE && op->src[1]->op == GGML_OP_NONE; } std::string get_graph_input_ov_name(const ggml_tensor * tensor, const ggml_tensor * op) { diff --git a/ggml/src/ggml-openvino/ggml-openvino.cpp b/ggml/src/ggml-openvino/ggml-openvino.cpp index c57b3625cb6..fafeddc1add 100644 --- a/ggml/src/ggml-openvino/ggml-openvino.cpp +++ b/ggml/src/ggml-openvino/ggml-openvino.cpp @@ -1000,7 +1000,6 @@ static bool ggml_backend_openvino_device_supports_op(ggml_backend_dev_t dev, con } static std::set ops_not_support_view_input{ GGML_OP_GET_ROWS, - GGML_OP_RMS_NORM, GGML_OP_NORM, GGML_OP_L2_NORM, }; From 6399614c0c122cb7c8af28cc3f428d97c3c2a5b5 Mon Sep 17 00:00:00 2001 From: Xuejun Date: Thu, 7 May 2026 15:36:32 +0800 Subject: [PATCH 2/4] OpenVINO backend: fix error --- ggml/src/ggml-openvino/ggml-decoder.cpp | 3 +++ ggml/src/ggml-openvino/openvino/op/rope.cpp | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-openvino/ggml-decoder.cpp b/ggml/src/ggml-openvino/ggml-decoder.cpp index b4e90a29b15..a9ff7edbcc2 100644 --- a/ggml/src/ggml-openvino/ggml-decoder.cpp +++ b/ggml/src/ggml-openvino/ggml-decoder.cpp @@ -247,6 +247,9 @@ int GgmlOvDecoder::compute_op_case(const ggml_tensor * node) const { op_case = 0x00000000; break; } + if (node->src[0]->op == GGML_OP_VIEW) { + op_case = (op_case | 0x00000002); + } break; } case GGML_OP_VIEW: { diff --git a/ggml/src/ggml-openvino/openvino/op/rope.cpp b/ggml/src/ggml-openvino/openvino/op/rope.cpp index 263d733bd4a..f66b02dc5cf 100644 --- a/ggml/src/ggml-openvino/openvino/op/rope.cpp +++ b/ggml/src/ggml-openvino/openvino/op/rope.cpp @@ -35,7 +35,7 @@ OutputVector translate_rope(const NodeContext & context) { ov::Output res; - auto data_node = process_view_input_new(context, 0).get_node_shared_ptr(); + auto data_node = context.get_input(0).get_node_shared_ptr(); auto output_shape = context.get_output_shape().to_shape(); int32_t * op_params = context.get_output_op_params(); const int mode = (op_case & 0xFFFF0000) >> 16; @@ -63,8 +63,7 @@ OutputVector translate_rope(const NodeContext & context) { if (op_case == 2) { // The input comes from a VIEW - int slice_len = output_shape[2] * output_shape[3]; - data_node = process_view_input(context, 0, slice_len).get_node_shared_ptr(); + data_node = process_view_input_new(context, 0).get_node_shared_ptr(); if (context.is_stateful()) { auto data_shape = ov::op::v0::Constant::create( ov::element::i64, {3}, std::vector{-1, (int64_t) output_shape[2], (int64_t) output_shape[3]}); From b669ede9d595fb896545a433973fa662158ad803 Mon Sep 17 00:00:00 2001 From: Zijun Yu Date: Thu, 7 May 2026 15:59:55 +0800 Subject: [PATCH 3/4] suggested changes, need review --- ggml/src/ggml-openvino/openvino/op/rope.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-openvino/openvino/op/rope.cpp b/ggml/src/ggml-openvino/openvino/op/rope.cpp index f66b02dc5cf..de8bcdb38de 100644 --- a/ggml/src/ggml-openvino/openvino/op/rope.cpp +++ b/ggml/src/ggml-openvino/openvino/op/rope.cpp @@ -38,8 +38,7 @@ OutputVector translate_rope(const NodeContext & context) { auto data_node = context.get_input(0).get_node_shared_ptr(); auto output_shape = context.get_output_shape().to_shape(); int32_t * op_params = context.get_output_op_params(); - const int mode = (op_case & 0xFFFF0000) >> 16; - op_case = (op_case & 0x0000FFFF); + const int mode = op_case; constexpr int TYPE_NORMAL = 0; constexpr int TYPE_NEOX = 1; @@ -61,8 +60,7 @@ OutputVector translate_rope(const NodeContext & context) { cos_theta_node = sin_cos.second; } - if (op_case == 2) { - // The input comes from a VIEW + if (context.get_view_input_size(0) > 0) { data_node = process_view_input_new(context, 0).get_node_shared_ptr(); if (context.is_stateful()) { auto data_shape = ov::op::v0::Constant::create( From 3e71f9e3e39e769b82baeaf758cced743e53d4bf Mon Sep 17 00:00:00 2001 From: Zijun Yu Date: Thu, 7 May 2026 16:01:16 +0800 Subject: [PATCH 4/4] suggested changes, need review --- ggml/src/ggml-openvino/ggml-decoder.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-openvino/ggml-decoder.cpp b/ggml/src/ggml-openvino/ggml-decoder.cpp index a9ff7edbcc2..90136ba8066 100644 --- a/ggml/src/ggml-openvino/ggml-decoder.cpp +++ b/ggml/src/ggml-openvino/ggml-decoder.cpp @@ -236,20 +236,17 @@ int GgmlOvDecoder::compute_op_case(const ggml_tensor * node) const { const int mode = node->op_params[2]; switch (mode) { case GGML_ROPE_TYPE_NEOX: { - op_case = 0x00010000; + op_case = 1; break; } case GGML_ROPE_TYPE_IMROPE: { - op_case = 0x00020000; + op_case = 2; break; } default: - op_case = 0x00000000; + op_case = 0; break; } - if (node->src[0]->op == GGML_OP_VIEW) { - op_case = (op_case | 0x00000002); - } break; } case GGML_OP_VIEW: {