Team Ai
Datasetpublic

echodict/llama.cpp

version https://git-lfs.github.com/spec/v1 oid sha256:cfc44b7ba25614df70e6b65e3341cae0310163bd32fd31a6b928a542df433faf size 30786

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes610downloads
bert.cpp157 linesDownload Raw Back to models
1#include "models.h"2 3llm_build_bert::llm_build_bert(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) {4    const int64_t n_embd_head = hparams.n_embd_head_v();5 6    GGML_ASSERT(n_embd_head == hparams.n_embd_head_k());7 8    ggml_tensor * cur;9    ggml_tensor * inpL;10    ggml_tensor * inp_pos = nullptr;11 12    if (model.arch != LLM_ARCH_JINA_BERT_V2) {13        inp_pos = build_inp_pos();14    }15 16    // construct input embeddings (token, type, position)17    inpL = build_inp_embd(model.tok_embd);18 19    // token types are hardcoded to zero ("Sentence A")20    if (model.type_embd) {21        ggml_tensor * type_row0 = ggml_view_1d(ctx0, model.type_embd, n_embd, 0);22        inpL                    = ggml_add(ctx0, inpL, type_row0);23    }24    if (model.arch == LLM_ARCH_BERT) {25        inpL = ggml_add(ctx0, ggml_get_rows(ctx0, model.pos_embd, inp_pos), inpL);26    }27    cb(inpL, "inp_embd", -1);28 29    // embed layer norm30    inpL = build_norm(inpL, model.tok_norm, model.tok_norm_b, LLM_NORM, 0);31    cb(inpL, "inp_norm", 0);32 33    auto * inp_attn = build_attn_inp_no_cache();34 35    ggml_tensor * inp_out_ids = build_inp_out_ids();36 37    for (int il = 0; il < n_layer; ++il) {38        ggml_tensor * cur = inpL;39 40        {41            auto [Qcur, Kcur, Vcur] = build_qkv(model.layers[il], cur,42                    n_embd_head, n_head, n_head_kv, il);43 44            if (model.layers[il].attn_q_norm) {45                Qcur = ggml_reshape_2d(ctx0, Qcur, n_embd_head * n_head, n_tokens);46 47                Qcur = build_norm(Qcur, model.layers[il].attn_q_norm, model.layers[il].attn_q_norm_b, LLM_NORM, il);48 49                Qcur = ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens);50            }51 52            if (model.layers[il].attn_k_norm) {53                Kcur = ggml_reshape_2d(ctx0, Kcur, n_embd_head * n_head_kv, n_tokens);54 55                Kcur = build_norm(Kcur, model.layers[il].attn_k_norm, model.layers[il].attn_k_norm_b, LLM_NORM, il);56 57                Kcur = ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens);58            }59 60            // RoPE61            if (model.arch == LLM_ARCH_NOMIC_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE ||62                model.arch == LLM_ARCH_JINA_BERT_V3) {63                Qcur = ggml_rope_ext(ctx0, Qcur, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale,64                                     ext_factor, attn_factor, beta_fast, beta_slow);65 66                Kcur = ggml_rope_ext(ctx0, Kcur, inp_pos, nullptr, n_rot, rope_type, n_ctx_orig, freq_base, freq_scale,67                                     ext_factor, attn_factor, beta_fast, beta_slow);68            }69 70            cb(Qcur, "Qcur", il);71            cb(Kcur, "Kcur", il);72            cb(Vcur, "Vcur", il);73 74            cur = build_attn(inp_attn,75                    model.layers[il].wo, model.layers[il].wo_b, model.layers[il].wo_s,76                    Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f / sqrtf(float(n_embd_head)), il);77            cb(cur, "kqv_out", il);78        }79 80        if (il == n_layer - 1 && inp_out_ids) {81            cur  = ggml_get_rows(ctx0, cur, inp_out_ids);82            inpL = ggml_get_rows(ctx0, inpL, inp_out_ids);83        }84 85        // re-add the layer input86        cur = ggml_add(ctx0, cur, inpL);87 88        // attention layer norm89        cur = build_norm(cur, model.layers[il].attn_out_norm, model.layers[il].attn_out_norm_b, LLM_NORM, il);90 91        if (model.layers[il].attn_norm_2 != nullptr) {92            cur = ggml_add(ctx0, cur, inpL);  // re-add the layer input93            cur = build_norm(cur, model.layers[il].attn_norm_2, model.layers[il].attn_norm_2_b, LLM_NORM, il);94        }95 96        ggml_tensor * ffn_inp = cur;97        cb(ffn_inp, "ffn_inp", il);98 99        // feed-forward network100        if (hparams.moe_every_n_layers > 0 && il % hparams.moe_every_n_layers == 1) {101            // MoE branch102            cur = build_moe_ffn(cur,103                    model.layers[il].ffn_gate_inp,104                    model.layers[il].ffn_up_exps,105                    nullptr,106                    model.layers[il].ffn_down_exps,107                    nullptr,108                    hparams.n_expert, hparams.n_expert_used,109                    LLM_FFN_GELU, false,110                    hparams.expert_weights_scale,111                    LLAMA_EXPERT_GATING_FUNC_TYPE_SOFTMAX,112                    il);113            cb(cur, "ffn_moe_out", il);114        } else if (model.arch == LLM_ARCH_BERT || model.arch == LLM_ARCH_NOMIC_BERT_MOE ||115                   model.arch == LLM_ARCH_JINA_BERT_V3) {116            cur = build_ffn(cur,117                    model.layers[il].ffn_up, model.layers[il].ffn_up_b, NULL,118                    NULL, NULL, NULL,119                    model.layers[il].ffn_down, model.layers[il].ffn_down_b, NULL, NULL,120                    LLM_FFN_GELU, LLM_FFN_SEQ, il);121            cb(cur, "ffn_out", il);122        } else if (model.arch == LLM_ARCH_JINA_BERT_V2) {123            const bool up_contains_gate = !model.layers[il].ffn_gate && model.layers[il].ffn_up->ne[1] != hparams.n_ff();124            auto type_op = up_contains_gate ? LLM_FFN_GEGLU : LLM_FFN_GELU;125            cur = build_ffn(cur,126                    model.layers[il].ffn_up, model.layers[il].ffn_up_b, NULL,127                    model.layers[il].ffn_gate, NULL, NULL,128                    model.layers[il].ffn_down, model.layers[il].ffn_down_b, NULL, NULL,129                    type_op, LLM_FFN_PAR, il);130            cb(cur, "ffn_out", il);131        } else {132            cur = build_ffn(cur,133                model.layers[il].ffn_up, NULL, NULL,134                model.layers[il].ffn_gate, NULL, NULL,135                model.layers[il].ffn_down, NULL, NULL,136                NULL, LLM_FFN_SILU, LLM_FFN_PAR, il);137            cb(cur, "ffn_out", il);138        }139 140        // attentions bypass the intermediate layer141        cur = ggml_add(ctx0, cur, ffn_inp);142 143        // output layer norm144        cur = build_norm(cur, model.layers[il].layer_out_norm, model.layers[il].layer_out_norm_b, LLM_NORM, il);145 146        // input for next layer147        inpL = cur;148    }149 150    cur = inpL;151 152    cb(cur, "result_embd", -1);153    res->t_embd = cur;154 155    ggml_build_forward_expand(gf, cur);156}157