]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
opencl: do not treat NULL-mask flash attention as causal (#25771)
authorkumaal <redacted>
Fri, 24 Jul 2026 15:12:01 +0000 (20:12 +0500)
committerGitHub <redacted>
Fri, 24 Jul 2026 15:12:01 +0000 (08:12 -0700)
ggml/src/ggml-opencl/ggml-opencl.cpp

index e30eb43a311d944ad9a43553e969b50eace8c464..daffd825b5425df9dcf930cf035b09201e66778b 100644 (file)
@@ -14758,7 +14758,11 @@ static void ggml_cl_flash_attn(ggml_backend_t backend, const ggml_tensor * q, co
 
     // Flash-Decoding K-split decision. Resolved here, before the prefill
     // prepass, because KV-pad and blk prepass are pure overhead when FD fires.
-    const int is_causal = (mask == NULL && n_q > 1 && n_q == n_kv);
+    // Do not infer causality from tensor shapes: a NULL mask means full
+    // (bidirectional) attention, e.g. ViT encoders, where n_q == n_kv as well.
+    // Causal attention in llama.cpp always comes with an explicit KQ mask.
+    // Inferring is_causal here corrupted mmproj output on OpenCL (see #23800).
+    const int is_causal = 0;
     const int fd_max_n_q = (d_head_q <= FD_MAX_DK_MULTI) ? FD_MAX_N_Q_MULTI : 1;
     cl_kernel fd_k_split = NULL;
     bool use_fd_mq = false;