| 1596 | } |
| 1597 | |
| 1598 | ggml_cgraph * llama_kv_cache::build_graph_shift(llm_graph_result * res, llama_context * lctx) const { |
| 1599 | auto * ctx = res->get_ctx(); |
| 1600 | auto * gf = res->get_gf(); |
| 1601 | |
| 1602 | const auto & n_embd_head_k = hparams.n_embd_head_k; |
| 1603 | //const auto & n_embd_head_v = hparams.n_embd_head_v; |
| 1604 | |
| 1605 | const auto & n_rot = hparams.n_rot; |
| 1606 | |
| 1607 | const auto n_embd_nope = hparams.n_lora_kv > 0 ? n_embd_head_k - n_rot : 0; |
| 1608 | |
| 1609 | auto inp = std::make_unique<llm_graph_input_k_shift>(this); |
| 1610 | |
| 1611 | inp->k_shift = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, (int64_t) get_size()*n_stream); |
| 1612 | ggml_set_input(inp->k_shift); |
| 1613 | |
| 1614 | const auto & cparams = lctx->get_cparams(); |
| 1615 | |
| 1616 | for (const auto & layer : layers) { |
| 1617 | const uint32_t il = layer.il; |
| 1618 | |
| 1619 | const int64_t n_head_kv = hparams.n_head_kv(il); |
| 1620 | const int64_t n_embd_k_gqa = hparams.n_embd_k_gqa(il); |
| 1621 | |
| 1622 | const float freq_base_l = model.get_rope_freq_base (cparams, il); |
| 1623 | const float freq_scale_l = model.get_rope_freq_scale(cparams, il); |
| 1624 | |
| 1625 | ggml_tensor * rope_factors = model.get_rope_factors(cparams, il); |
| 1626 | |
| 1627 | ggml_tensor * k = |
| 1628 | ggml_view_3d(ctx, layer.k, |
| 1629 | n_rot, n_head_kv, get_size()*n_stream, |
| 1630 | ggml_row_size(layer.k->type, n_embd_head_k), |
| 1631 | ggml_row_size(layer.k->type, n_embd_k_gqa), |
| 1632 | ggml_row_size(layer.k->type, n_embd_nope)); |
| 1633 | |
| 1634 | ggml_tensor * cur = build_rope_shift(cparams, ctx, k, inp->k_shift, rope_factors, freq_base_l, freq_scale_l); |
| 1635 | |
| 1636 | ggml_build_forward_expand(gf, cur); |
| 1637 | } |
| 1638 | |
| 1639 | res->add_input(std::move(inp)); |
| 1640 | |
| 1641 | return gf; |
| 1642 | } |
| 1643 | |
| 1644 | void llama_kv_cache::state_write(llama_io_write_i & io, llama_seq_id seq_id, llama_state_seq_flags flags) const { |
| 1645 | GGML_UNUSED(flags); |
nothing calls this directly
no test coverage detected