graph : create V as a view of K in the k_iswa build_attn (#27392)
build_attn with the llm_graph_input_attn_k_iswa input was using the cached K tensor itself as V. Create V as a view of K (the first v_cur->ne[0] elements of each row), like the other K-only build_attn overloads. The deepseek4 MTP call site now passes the kv tensor as v_cur. Assisted-by: pi:llama.cpp/Qwen3.8-27B
This commit is contained in:
+1
-3
@@ -3099,8 +3099,6 @@ ggml_tensor * llm_graph_context::build_attn(
|
|||||||
int il) const {
|
int il) const {
|
||||||
const bool is_swa = hparams.is_swa(il);
|
const bool is_swa = hparams.is_swa(il);
|
||||||
|
|
||||||
GGML_UNUSED(v_cur);
|
|
||||||
|
|
||||||
auto * k_rot = is_swa ? inp->self_k_rot_swa : inp->self_k_rot;
|
auto * k_rot = is_swa ? inp->self_k_rot_swa : inp->self_k_rot;
|
||||||
|
|
||||||
if (k_rot) {
|
if (k_rot) {
|
||||||
@@ -3133,7 +3131,7 @@ ggml_tensor * llm_graph_context::build_attn(
|
|||||||
// MLA-style attention: the cached K is used as V
|
// MLA-style attention: the cached K is used as V
|
||||||
ggml_tensor * q = q_cur;
|
ggml_tensor * q = q_cur;
|
||||||
ggml_tensor * k = mctx_cur->get_k(ctx0, il);
|
ggml_tensor * k = mctx_cur->get_k(ctx0, il);
|
||||||
ggml_tensor * v = k;
|
ggml_tensor * v = ggml_view_4d(ctx0, k, v_cur->ne[0], k->ne[1], k->ne[2], k->ne[3], k->nb[1], k->nb[2], k->nb[3], 0);
|
||||||
|
|
||||||
ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il);
|
ggml_tensor * cur = build_attn_mha(q, k, v, kq_b, kq_mask, sinks, v_mla, kq_scale, il);
|
||||||
cb(cur, "kqv_out", il);
|
cb(cur, "kqv_out", il);
|
||||||
|
|||||||
@@ -1225,7 +1225,7 @@ ggml_tensor * llama_model_deepseek4::graph::build_attention_impl(
|
|||||||
if (inp_mtp) {
|
if (inp_mtp) {
|
||||||
out = build_attn(inp_mtp,
|
out = build_attn(inp_mtp,
|
||||||
nullptr, nullptr, nullptr,
|
nullptr, nullptr, nullptr,
|
||||||
q, kv, nullptr,
|
q, kv, kv,
|
||||||
nullptr, layer.attn_sinks, nullptr,
|
nullptr, layer.attn_sinks, nullptr,
|
||||||
1.0f/sqrtf(float(n_embd_head)), il);
|
1.0f/sqrtf(float(n_embd_head)), il);
|
||||||
cb(out, "attn_raw", il);
|
cb(out, "attn_raw", il);
|
||||||
|
|||||||
Reference in New Issue
Block a user