char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
7acb4e8cd
char/aliceai-t5-moe
1#include "models.h" 2 3void llama_model_neo_bert::load_arch_hparams (llama_model_loader & ml ) { 4ml .get_key (LLM_KV_ATTENTION_LAYERNORM_RMS_EPS ,hparams .f_norm_rms_eps ); 5 6if (hparams .n_layer ()== 28 ) { 7type = LLM_TYPE_250M ; 8 } 9} 10 11void llama_model_neo_bert::load_arch_tensors (llama_model_loader & ) { 12LLAMA_LOAD_LOCALS ; 13 14tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },0 ); 15 16cls = create_tensor (tn (LLM_TENSOR_CLS ,"weight" ), {n_embd ,n_embd },TENSOR_NOT_REQUIRED ); 17cls_b = create_tensor (tn (LLM_TENSOR_CLS ,"bias" ), {n_embd },TENSOR_NOT_REQUIRED ); 18 19cls_out = create_tensor (tn (LLM_TENSOR_CLS_OUT ,"weight" ), {n_embd ,hparams .n_cls_out },TENSOR_NOT_REQUIRED ); 20cls_out_b = create_tensor (tn (LLM_TENSOR_CLS_OUT ,"bias" ), {hparams .n_cls_out },TENSOR_NOT_REQUIRED ); 21 22output_norm_enc = create_tensor (tn (LLM_TENSOR_ENC_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 23 24for (int i = 0 ;i < n_layer ;++ i ) { 25auto & layer = layers [i ]; 26 27layer .attn_norm = create_tensor (tn (LLM_TENSOR_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 28 29layer .wqkv = create_tensor (tn (LLM_TENSOR_ATTN_QKV ,"weight" ,i ), {n_embd ,n_embd + 2 * n_embd_gqa },0 ); 30layer .wo = create_tensor (tn (LLM_TENSOR_ATTN_OUT ,"weight" ,i ), {n_embd ,n_embd },0 ); 31 32layer .ffn_norm = create_tensor (tn (LLM_TENSOR_FFN_NORM ,"weight" ,i ), {n_embd },0 ); 33 34layer .ffn_up = create_tensor (tn (LLM_TENSOR_FFN_UP ,"weight" ,i ), {n_embd ,n_ff * 2 },0 ); 35layer .ffn_down = create_tensor (tn (LLM_TENSOR_FFN_DOWN ,"weight" ,i ), {n_ff ,n_embd },0 ); 36 } 37} 38 39std::unique_ptr < llm_graph_context > llama_model_neo_bert::build_arch_graph (const llm_graph_params & params )const { 40return std::make_unique < graph > (* this ,params ); 41} 42 43llama_model_neo_bert::graph::graph (const llama_model & model ,const llm_graph_params & params ) :llm_graph_context (params ) { 44const int64_t n_embd_head = hparams .n_embd_head_v (); 45 46GGML_ASSERT (n_embd_head == hparams .n_embd_head_k ()); 47 48ggml_tensor * cur ; 49ggml_tensor * inpL ; 50ggml_tensor * inp_pos = build_inp_pos (); 51 52// construct input embeddings (token, type, position) 53inpL = build_inp_embd (model .tok_embd ); 54cb (inpL ,"inp_embd" ,-1 ); 55 56auto * inp_attn = build_attn_inp_no_cache (); 57 58ggml_tensor * inp_out_ids = build_inp_out_ids (); 59 60for (int il = 0 ;il < n_layer ;++ il ) { 61ggml_tensor * cur = inpL ; 62 63// pre-norm 64cur = build_norm (inpL , 65model .layers [il ].attn_norm ,NULL , 66LLM_NORM_RMS ,il ); 67 68 { 69auto [Qcur ,Kcur ,Vcur ]= build_qkv (model .layers [il ],cur , 70n_embd_head ,n_head ,n_head_kv ,il ); 71 72// RoPE 73Qcur = ggml_rope_ext ( 74ctx0 ,Qcur ,inp_pos ,nullptr , 75n_rot ,rope_type ,n_ctx_orig ,freq_base ,freq_scale , 76ext_factor ,attn_factor ,beta_fast ,beta_slow 77 ); 78 79Kcur = ggml_rope_ext ( 80ctx0 ,Kcur ,inp_pos ,nullptr , 81n_rot ,rope_type ,n_ctx_orig ,freq_base ,freq_scale , 82ext_factor ,attn_factor ,beta_fast ,beta_slow 83 ); 84 85cb (Qcur ,"Qcur" ,il ); 86cb (Kcur ,"Kcur" ,il ); 87cb (Vcur ,"Vcur" ,il ); 88 89cur = build_attn (inp_attn , 90model .layers [il ].wo ,nullptr ,model .layers [il ].wo_s , 91Qcur ,Kcur ,Vcur ,nullptr ,nullptr ,nullptr ,1.0f /sqrtf (float (n_embd_head )),il ); 92cb (cur ,"kqv_out" ,il ); 93 } 94if (il == n_layer - 1 && inp_out_ids ) { 95cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 96inpL = ggml_get_rows (ctx0 ,inpL ,inp_out_ids ); 97 } 98// re-add the layer input 99cur = ggml_add (ctx0 ,cur ,inpL ); 100 101ggml_tensor * ffn_inp = cur ; 102cb (ffn_inp ,"ffn_inp" ,il ); 103 104// pre-norm 105cur = build_norm (ffn_inp , 106model .layers [il ].ffn_norm ,NULL , 107LLM_NORM_RMS ,il ); 108cb (cur ,"ffn_norm" ,il ); 109 110// feed-forward network 111cur = build_ffn (cur , 112model .layers [il ].ffn_up , 113NULL ,NULL ,NULL ,NULL ,NULL , 114model .layers [il ].ffn_down , 115NULL ,NULL ,NULL , 116LLM_FFN_SWIGLU ,LLM_FFN_SEQ ,il ); 117 118// attentions bypass the intermediate layer 119cur = ggml_add (ctx0 ,cur ,ffn_inp ); 120 121// input for next layer 122inpL = cur ; 123 } 124cur = inpL ; 125 126cur = build_norm (cur , 127model .output_norm_enc ,NULL , 128LLM_NORM_RMS ,-1 ); 129 130cb (cur ,"result_embd" ,-1 ); 131res -> t_embd = cur ; 132 133ggml_build_forward_expand (gf ,cur ); 134}