| 74 | } |
| 75 | |
| 76 | ggml_tensor * llm_build_lfm2::build_attn_block(ggml_tensor * cur, |
| 77 | ggml_tensor * inp_pos, |
| 78 | llm_graph_input_attn_kv * inp_attn, |
| 79 | int il) const { |
| 80 | GGML_ASSERT(hparams.n_embd_v_gqa(il) == hparams.n_embd_k_gqa(il)); |
| 81 | const auto n_embd_head = hparams.n_embd_head_v; |
| 82 | const auto n_head_kv = hparams.n_head_kv(il); |
| 83 | |
| 84 | auto * q = build_lora_mm(model.layers[il].wq, cur); |
| 85 | cb(q, "model.layers.{}.self_attn.q_proj", il); |
| 86 | auto * k = build_lora_mm(model.layers[il].wk, cur); |
| 87 | cb(k, "model.layers.{}.self_attn.k_proj", il); |
| 88 | auto * v = build_lora_mm(model.layers[il].wv, cur); |
| 89 | cb(v, "model.layers.{}.self_attn.v_proj", il); |
| 90 | |
| 91 | q = ggml_reshape_3d(ctx0, q, n_embd_head, n_head, n_tokens); |
| 92 | k = ggml_reshape_3d(ctx0, k, n_embd_head, n_head_kv, n_tokens); |
| 93 | v = ggml_reshape_3d(ctx0, v, n_embd_head, n_head_kv, n_tokens); |
| 94 | |
| 95 | // qk norm |
| 96 | q = build_norm(q, model.layers[il].attn_q_norm, NULL, LLM_NORM_RMS, il); |
| 97 | cb(q, "model.layers.{}.self_attn.q_layernorm", il); |
| 98 | k = build_norm(k, model.layers[il].attn_k_norm, NULL, LLM_NORM_RMS, il); |
| 99 | cb(k, "model.layers.{}.self_attn.k_layernorm", il); |
| 100 | |
| 101 | // RoPE |
| 102 | q = ggml_rope_ext(ctx0, q, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, ext_factor, |
| 103 | attn_factor, beta_fast, beta_slow); |
| 104 | k = ggml_rope_ext(ctx0, k, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale, ext_factor, |
| 105 | attn_factor, beta_fast, beta_slow); |
| 106 | |
| 107 | cur = build_attn(inp_attn, |
| 108 | model.layers[il].wo, NULL, |
| 109 | q, k, v, nullptr, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il); |
| 110 | |
| 111 | cb(cur, "model.layers.{}.self_attn.out_proj", il); |
| 112 | |
| 113 | return cur; |
| 114 | } |
| 115 | |
| 116 | ggml_tensor * llm_build_lfm2::build_shortconv_block(ggml_tensor * cur, llm_graph_input_rs * inp_recr, int il) { |
| 117 | const auto * mctx_cur = static_cast<const llama_memory_hybrid_context *>(mctx)->get_recr(); |
nothing calls this directly
no test coverage detected