char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
3ad1ba733
char/aliceai-t5-moe
1#include "models.h" 2 3void llama_model_spark2_5::load_arch_hparams (llama_model_loader & ml ) { 4ml .get_key (LLM_KV_ATTENTION_LAYERNORM_RMS_EPS ,hparams .f_norm_rms_eps ); 5ml .get_key (LLM_KV_ATTENTION_SLIDING_WINDOW ,hparams .n_swa ); 6 7hparams .swa_type = LLAMA_SWA_TYPE_STANDARD ; 8ml .get_arr (LLM_KV_ATTENTION_SLIDING_WINDOW_PATTERN ,hparams .is_swa_impl ); 9 10hparams .rope_freq_base_train_swa = hparams .rope_freq_base_train ; 11hparams .rope_freq_scale_train_swa = hparams .rope_freq_scale_train ; 12ml .get_key (LLM_KV_ROPE_FREQ_BASE_SWA ,hparams .rope_freq_base_train_swa , false); 13 14switch (hparams .n_layer ()) { 15case 28 :type = LLM_TYPE_1_7B ;break ; 16default :type = LLM_TYPE_UNKNOWN ; 17 } 18} 19 20void llama_model_spark2_5::load_arch_tensors (llama_model_loader & ) { 21LLAMA_LOAD_LOCALS ; 22 23tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },0 ); 24 25output_norm = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 26output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {n_embd ,n_vocab },TENSOR_NOT_REQUIRED ); 27if (output == nullptr ) { 28output = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },TENSOR_DUPLICATED ); 29 } 30 31for (int i = 0 ;i < n_layer ;++ i ) { 32auto & layer = layers [i ]; 33 34const int64_t n_head_i = hparams .n_head (i ); 35const int64_t n_head_kv_i = hparams .n_head_kv (i ); 36const int64_t n_embd_q = hparams .n_embd_head_k (i )* n_head_i ; 37const int64_t n_embd_k = hparams .n_embd_head_k (i )* n_head_kv_i ; 38const int64_t n_embd_v = hparams .n_embd_head_v (i )* n_head_kv_i ; 39 40layer .attn_norm = create_tensor (tn (LLM_TENSOR_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 41create_tensor_qkv (layer ,i ,n_embd ,n_embd_q ,n_embd_k ,n_embd_v ,0 ); 42layer .wqkv_gate = create_tensor (tn (LLM_TENSOR_ATTN_GATE ,"weight" ,i ), {n_embd ,n_head_i },0 ); 43layer .wo = create_tensor (tn (LLM_TENSOR_ATTN_OUT ,"weight" ,i ), {n_embd_q ,n_embd },0 ); 44 45layer .ffn_norm = create_tensor (tn (LLM_TENSOR_FFN_NORM ,"weight" ,i ), {n_embd },0 ); 46layer .ffn_gate = create_tensor (tn (LLM_TENSOR_FFN_GATE ,"weight" ,i ), {n_embd ,n_ff },0 ); 47layer .ffn_up = create_tensor (tn (LLM_TENSOR_FFN_UP ,"weight" ,i ), {n_embd ,n_ff },0 ); 48layer .ffn_down = create_tensor (tn (LLM_TENSOR_FFN_DOWN ,"weight" ,i ), {n_ff ,n_embd },0 ); 49 } 50} 51 52std::unique_ptr < llm_graph_context > llama_model_spark2_5::build_arch_graph (const llm_graph_params & params )const { 53return std::make_unique < graph > (* this ,params ); 54} 55 56llama_model_spark2_5::graph::graph (const llama_model & model ,const llm_graph_params & params ) :llm_graph_context (params ) { 57const int64_t n_embd_head = hparams .n_embd_head_v (); 58 59GGML_ASSERT (n_embd_head == hparams .n_embd_head_k ()); 60GGML_ASSERT (hparams .swa_type == LLAMA_SWA_TYPE_STANDARD ); 61 62ggml_tensor * inpL = build_inp_embd (model .tok_embd ); 63ggml_tensor * inp_pos = build_inp_pos (); 64auto * inp_attn = build_attn_inp_kv_iswa (); 65ggml_tensor * inp_out_ids = build_inp_out_ids (); 66 67const float kq_scale = 1.0f /sqrtf (float (n_embd_head )); 68 69for (int il = 0 ;il < n_layer ;++ il ) { 70ggml_tensor * inpSA = inpL ; 71ggml_tensor * cur = build_norm (inpL ,model .layers [il ].attn_norm ,nullptr ,LLM_NORM_RMS ,il ); 72cb (cur ,"attn_norm" ,il ); 73 74const int64_t n_head_i = hparams .n_head (il ); 75const int64_t n_head_kv_i = hparams .n_head_kv (il ); 76const int64_t n_rot_i = hparams .n_rot (il ); 77const float freq_base_i = model .get_rope_freq_base (cparams ,il ); 78const float freq_scale_i = model .get_rope_freq_scale (cparams ,il ); 79 80ggml_tensor * attn_inp = cur ; 81auto [Qcur ,Kcur ,Vcur ]= build_qkv (model .layers [il ],cur ,n_embd_head ,n_head_i ,n_head_kv_i ,il ); 82 83Qcur = ggml_rope_ext (ctx0 ,Qcur ,inp_pos ,nullptr , 84n_rot_i ,rope_type ,n_ctx_orig ,freq_base_i ,freq_scale_i , 85ext_factor ,attn_factor ,beta_fast ,beta_slow ); 86Kcur = ggml_rope_ext (ctx0 ,Kcur ,inp_pos ,nullptr , 87n_rot_i ,rope_type ,n_ctx_orig ,freq_base_i ,freq_scale_i , 88ext_factor ,attn_factor ,beta_fast ,beta_slow ); 89cb (Qcur ,"Qcur_rope" ,il ); 90cb (Kcur ,"Kcur_rope" ,il ); 91 92cur = build_attn (inp_attn , 93nullptr ,nullptr ,nullptr , 94Qcur ,Kcur ,Vcur ,nullptr ,nullptr ,nullptr ,kq_scale ,il ); 95cb (cur ,"attn_out" ,il ); 96 97ggml_tensor * gate = build_lora_mm (model .layers [il ].wqkv_gate ,attn_inp ); 98gate = ggml_sigmoid (ctx0 ,gate ); 99cb (gate ,"attn_gate" ,il ); 100 101const int64_t n_tokens_i = cur -> ne [1 ]; 102cur = ggml_reshape_3d (ctx0 ,cur ,n_embd_head ,n_head_i ,n_tokens_i ); 103gate = ggml_reshape_3d (ctx0 ,gate ,1 ,n_head_i ,n_tokens_i ); 104cur = ggml_mul (ctx0 ,cur ,gate ); 105cur = ggml_reshape_2d (ctx0 ,cur ,n_embd_head * n_head_i ,n_tokens_i ); 106cb (cur ,"attn_gated" ,il ); 107 108cur = build_lora_mm (model .layers [il ].wo ,cur ,model .layers [il ].wo_s ); 109cb (cur ,"attn_out_proj" ,il ); 110 111if (il == n_layer - 1 && inp_out_ids ) { 112cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 113inpSA = ggml_get_rows (ctx0 ,inpSA ,inp_out_ids ); 114 } 115 116ggml_tensor * ffn_inp = ggml_add (ctx0 ,cur ,inpSA ); 117cb (ffn_inp ,"ffn_inp" ,il ); 118 119cur = build_norm (ffn_inp ,model .layers [il ].ffn_norm ,nullptr ,LLM_NORM_RMS ,il ); 120cb (cur ,"ffn_norm" ,il ); 121 122cur = build_ffn (cur , 123model .layers [il ].ffn_up ,nullptr ,nullptr , 124model .layers [il ].ffn_gate ,nullptr ,nullptr , 125model .layers [il ].ffn_down ,nullptr ,nullptr , 126nullptr , 127LLM_FFN_GELU ,LLM_FFN_PAR ,il ); 128cb (cur ,"ffn_out" ,il ); 129 130cur = ggml_add (ctx0 ,cur ,ffn_inp ); 131cur = build_cvec (cur ,il ); 132cb (cur ,"l_out" ,il ); 133 134inpL = cur ; 135 } 136 137ggml_tensor * cur = build_norm (inpL ,model .output_norm ,nullptr ,LLM_NORM_RMS ,-1 ); 138cb (cur ,"result_norm" ,-1 ); 139res -> t_embd = cur ; 140 141cur = build_lora_mm (model .output ,cur ); 142cb (cur ,"result_output" ,-1 ); 143res -> t_logits = cur ; 144 145ggml_build_forward_expand (gf ,cur ); 146}