if max_alibi_bias > 0 then apply ALiBi
| 4762 | |
| 4763 | // if max_alibi_bias > 0 then apply ALiBi |
| 4764 | static struct ggml_tensor * llm_build_kqv( |
| 4765 | struct ggml_context * ctx, |
| 4766 | const llama_hparams & hparams, |
| 4767 | const llama_kv_cache & kv, |
| 4768 | struct ggml_tensor * wo, |
| 4769 | struct ggml_tensor * wo_b, |
| 4770 | struct ggml_tensor * q_cur, |
| 4771 | struct ggml_tensor * kq_scale, |
| 4772 | struct ggml_tensor * kq_mask, |
| 4773 | int64_t n_ctx, |
| 4774 | int32_t n_tokens, |
| 4775 | int32_t n_kv, |
| 4776 | float max_alibi_bias, |
| 4777 | const llm_build_cb & cb, |
| 4778 | int il) { |
| 4779 | const int64_t n_embd = hparams.n_embd; |
| 4780 | const int64_t n_head = hparams.n_head; |
| 4781 | const int64_t n_head_kv = hparams.n_head_kv; |
| 4782 | const int64_t n_embd_head = hparams.n_embd_head(); |
| 4783 | const int64_t n_embd_gqa = hparams.n_embd_gqa(); |
| 4784 | |
| 4785 | struct ggml_tensor * q = ggml_permute(ctx, q_cur, 0, 2, 1, 3); |
| 4786 | cb(q, "q", il); |
| 4787 | |
| 4788 | struct ggml_tensor * k = |
| 4789 | ggml_view_3d(ctx, kv.k, |
| 4790 | n_embd_head, n_kv, n_head_kv, |
| 4791 | ggml_element_size(kv.k)*n_embd_gqa, |
| 4792 | ggml_element_size(kv.k)*n_embd_head, |
| 4793 | ggml_element_size(kv.k)*n_embd_gqa*n_ctx*il); |
| 4794 | cb(k, "k", il); |
| 4795 | if (k_cpy != nullptr) { |
| 4796 | k->src[1] = k_cpy; |
| 4797 | } |
| 4798 | |
| 4799 | struct ggml_tensor * kq = ggml_mul_mat(ctx, k, q); |
| 4800 | cb(kq, "kq", il); |
| 4801 | |
| 4802 | kq = ggml_scale(ctx, kq, kq_scale); |
| 4803 | cb(kq, "kq_scaled", il); |
| 4804 | |
| 4805 | if (max_alibi_bias > 0.0f) { |
| 4806 | // TODO: n_head or n_head_kv |
| 4807 | // TODO: K-shift is likely not working |
| 4808 | // TODO: change to ggml_add |
| 4809 | kq = ggml_alibi(ctx, kq, /*n_past*/ 0, n_head, max_alibi_bias); |
| 4810 | cb(kq, "kq_scaled_alibi", il); |
| 4811 | } |
| 4812 | |
| 4813 | kq = ggml_add(ctx, kq, kq_mask); |
| 4814 | cb(kq, "kq_masked", il); |
| 4815 | |
| 4816 | kq = ggml_soft_max(ctx, kq); |
| 4817 | cb(kq, "kq_soft_max", il); |
| 4818 | |
| 4819 | // split cached v into n_head heads |
| 4820 | struct ggml_tensor * v = |
| 4821 | ggml_view_3d(ctx, kv.v, |