| 1034 | } |
| 1035 | |
| 1036 | ggml_tensor * llama_kv_cache::get_v(ggml_context * ctx, int32_t il, uint32_t n_kv, const slot_info & sinfo) const { |
| 1037 | const int32_t ikv = map_layer_ids.at(il); |
| 1038 | |
| 1039 | auto * v = layers[ikv].v; |
| 1040 | |
| 1041 | const uint64_t kv_size = get_size(); |
| 1042 | const uint64_t n_embd_v_gqa = v->ne[0]; |
| 1043 | |
| 1044 | // [TAG_V_CACHE_VARIABLE] |
| 1045 | assert(n_embd_v_gqa >= hparams.n_embd_v_gqa(il)); |
| 1046 | |
| 1047 | const uint32_t ns = sinfo.s1 - sinfo.s0 + 1; |
| 1048 | |
| 1049 | if (!v_trans) { |
| 1050 | // note: v->nb[1] <= v->nb[2] |
| 1051 | return ggml_view_4d(ctx, v, |
| 1052 | hparams.n_embd_head_v, hparams.n_head_kv(il), n_kv, ns, |
| 1053 | ggml_row_size(v->type, hparams.n_embd_head_v), // v->nb[1] |
| 1054 | ggml_row_size(v->type, n_embd_v_gqa), // v->nb[2] |
| 1055 | ggml_row_size(v->type, n_embd_v_gqa*kv_size), // v->nb[3] |
| 1056 | ggml_row_size(v->type, n_embd_v_gqa*kv_size)*sinfo.s0); |
| 1057 | } |
| 1058 | |
| 1059 | // note: v->nb[1] > v->nb[2] |
| 1060 | return ggml_view_4d(ctx, v, |
| 1061 | n_kv, hparams.n_head_kv(il), hparams.n_embd_head_v, ns, |
| 1062 | ggml_row_size(v->type, kv_size*hparams.n_embd_head_v), // v->nb[1] |
| 1063 | ggml_row_size(v->type, kv_size), // v->nb[2] |
| 1064 | ggml_row_size(v->type, kv_size*n_embd_v_gqa), // v->nb[3] |
| 1065 | ggml_row_size(v->type, kv_size*n_embd_v_gqa)*sinfo.s0); |
| 1066 | } |
| 1067 | |
| 1068 | ggml_tensor * llama_kv_cache::cpy_k(ggml_context * ctx, ggml_tensor * k_cur, ggml_tensor * k_idxs, int32_t il, const slot_info & sinfo) const { |
| 1069 | GGML_UNUSED(sinfo); |
no test coverage detected