From 8bbeab06168b28e4fe37fbc09c0d5c1272ac92f0 Mon Sep 17 00:00:00 2001 From: suhyun-hwang Date: Sun, 11 Jan 2026 18:56:50 +0900 Subject: [PATCH] fix: use tensor stride for fused QKV support in vaetki --- convert_hf_to_gguf.py | 14 -------------- tools/mtmd/models/vaetki.cpp | 7 ++++--- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 07ae80c1fc..5215de5503 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -7969,20 +7969,6 @@ class VaetkiVisionModel(MmprojModel): if name.startswith("model.visual."): name = name.replace("model.visual.", "visual.") - # Split fused QKV tensors (build_vit fused QKV doesn't work for VAETKI) - if ".qkv." in name: - if data_torch.ndim == 2: - c3, _ = data_torch.shape - else: - c3 = data_torch.shape[0] - assert c3 % 3 == 0 - c = c3 // 3 - return [ - (self.map_tensor_name(name.replace("qkv", "q")), data_torch[:c]), - (self.map_tensor_name(name.replace("qkv", "k")), data_torch[c:c * 2]), - (self.map_tensor_name(name.replace("qkv", "v")), data_torch[c * 2:]), - ] - return [(self.map_tensor_name(name), data_torch)] diff --git a/tools/mtmd/models/vaetki.cpp b/tools/mtmd/models/vaetki.cpp index 895d3c5622..ee23cb01b0 100644 --- a/tools/mtmd/models/vaetki.cpp +++ b/tools/mtmd/models/vaetki.cpp @@ -33,13 +33,14 @@ ggml_cgraph * clip_graph_vaetki::build() { auto add_pos = [&](ggml_tensor * cur, const clip_layer &) -> ggml_tensor * { // split CLS and patch tokens + // use cur->nb[2] to support both fused QKV (nb[2]=3*n_embd) and separate Q/K/V (nb[2]=n_embd) ggml_tensor * cur_cls = ggml_view_3d(ctx0, cur, d_head, n_head, 1, ggml_row_size(cur->type, d_head), - ggml_row_size(cur->type, d_head * n_head), 0); + cur->nb[2], 0); ggml_tensor * cur_patch = ggml_view_3d(ctx0, cur, d_head, n_head, n_pos_patches, ggml_row_size(cur->type, d_head), - ggml_row_size(cur->type, d_head * n_head), - ggml_row_size(cur->type, d_head * n_head)); + cur->nb[2], + cur->nb[2]); // apply RoPE to CLS token using class_pos_emb if (cls_cos && cls_sin) {