From d244fe1a3ebdc665c85a85f23046c2ac59d7f2ff Mon Sep 17 00:00:00 2001 From: Xuan Son Nguyen Date: Thu, 18 Dec 2025 23:35:47 +0100 Subject: [PATCH] remove redundant reshape --- convert_hf_to_gguf.py | 6 ++++++ tools/mtmd/models/conformer.cpp | 19 +++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index ab1fa40e07..6bfb481396 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -9904,6 +9904,12 @@ class LFM2AudioModel(MmprojModel): # reshape conv weights if name.startswith("conformer.pre_encode.conv.") and name.endswith(".bias"): data_torch = data_torch[:, None, None] + if "conv.depthwise_conv" in name and name.endswith(".weight"): + assert data_torch.shape[1] == 1 + data_torch = data_torch.reshape(data_torch.shape[0], data_torch.shape[2]) + if "conv.pointwise_conv" in name and name.endswith(".weight"): + assert data_torch.shape[2] == 1 + data_torch = data_torch.reshape(data_torch.shape[0], data_torch.shape[1]) return [(self.map_tensor_name(name), data_torch)] diff --git a/tools/mtmd/models/conformer.cpp b/tools/mtmd/models/conformer.cpp index abed3bbf43..fd7e295f7a 100644 --- a/tools/mtmd/models/conformer.cpp +++ b/tools/mtmd/models/conformer.cpp @@ -158,9 +158,7 @@ ggml_cgraph * clip_graph_conformer::build() { // conv { auto * x = cur; - auto * conv_pw1_w = - ggml_reshape_2d(ctx0, layer.conv_pw1_w, layer.conv_pw1_w->ne[1], layer.conv_pw1_w->ne[2]); - x = ggml_mul_mat(ctx0, conv_pw1_w, x); + x = ggml_mul_mat(ctx0, layer.conv_pw1_w, x); x = ggml_add(ctx0, x, layer.conv_pw1_b); cb(x, "conformer.layers.{}.conv.pointwise_conv1", il); @@ -174,20 +172,17 @@ ggml_cgraph * clip_graph_conformer::build() { } // use ggml_ssm_conv for f32 precision - x = ggml_pad(ctx0, x, 4, 0, 0, 0); - x = ggml_roll(ctx0, x, 4, 0, 0, 0); - x = ggml_pad(ctx0, x, 4, 0, 0, 0); - auto * conv_dw_w = ggml_reshape_2d(ctx0, layer.conv_dw_w, layer.conv_dw_w->ne[0], layer.conv_dw_w->ne[2]); - x = ggml_ssm_conv(ctx0, x, conv_dw_w); - x = ggml_add(ctx0, x, ggml_reshape_1d(ctx0, layer.conv_dw_b, layer.conv_dw_b->ne[0])); + x = ggml_pad(ctx0, x, 4, 0, 0, 0); + x = ggml_roll(ctx0, x, 4, 0, 0, 0); + x = ggml_pad(ctx0, x, 4, 0, 0, 0); + x = ggml_ssm_conv(ctx0, x, layer.conv_dw_w); + x = ggml_add(ctx0, x, layer.conv_dw_b); x = ggml_add(ctx0, ggml_mul(ctx0, x, layer.conv_norm_w), layer.conv_norm_b); x = ggml_silu(ctx0, x); // pointwise_conv2 - auto * conv_pw2_w = - ggml_reshape_2d(ctx0, layer.conv_pw2_w, layer.conv_pw2_w->ne[1], layer.conv_pw2_w->ne[2]); - x = ggml_mul_mat(ctx0, conv_pw2_w, x); + x = ggml_mul_mat(ctx0, layer.conv_pw2_w, x); x = ggml_add(ctx0, x, layer.conv_pw2_b); cur = x;