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_rwkv6qwen2::load_arch_hparams (llama_model_loader & ml ) { 4ml .get_key (LLM_KV_ATTENTION_LAYERNORM_EPS ,hparams .f_norm_eps , false); 5ml .get_key (LLM_KV_ATTENTION_LAYERNORM_RMS_EPS ,hparams .f_norm_rms_eps , false); 6ml .get_key (LLM_KV_WKV_HEAD_SIZE ,hparams .wkv_head_size ); 7ml .get_key (LLM_KV_TIME_MIX_EXTRA_DIM ,hparams .time_mix_extra_dim ); 8ml .get_key (LLM_KV_TIME_DECAY_EXTRA_DIM ,hparams .time_decay_extra_dim ); 9ml .get_key (LLM_KV_RESCALE_EVERY_N_LAYERS ,hparams .rescale_every_n_layers , false); 10ml .get_key (LLM_KV_TOKEN_SHIFT_COUNT ,hparams .token_shift_count , false); 11 12switch (hparams .n_layer ()) { 13case 24 :type = LLM_TYPE_1_6B ;break ; 14case 32 : 15switch (hparams .n_embd ) { 16case 2560 :type = LLM_TYPE_3B ;break ; 17case 4096 :type = LLM_TYPE_7B ;break ; 18default :type = LLM_TYPE_UNKNOWN ; 19 }break ; 20case 61 :type = LLM_TYPE_14B ;break ; 21case 64 :type = LLM_TYPE_32B ;break ; 22default :type = LLM_TYPE_UNKNOWN ; 23 } 24} 25 26void llama_model_rwkv6qwen2::load_arch_tensors (llama_model_loader & ) { 27LLAMA_LOAD_LOCALS ; 28 29tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },0 ); 30 31output_norm = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 32output_norm_b = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"bias" ), {n_embd },TENSOR_NOT_REQUIRED ); 33output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {n_embd ,n_vocab },0 ); 34 35const int time_mix_extra_dim = hparams .time_mix_extra_dim ; 36const int time_decay_extra_dim = hparams .time_decay_extra_dim ; 37const int head_size = hparams .wkv_head_size ; 38const int attn_hidden_size = n_embd ; 39int attn_key_value_size ; 40if (n_head_kv == 0 || attn_hidden_size /head_size == n_head_kv ) { 41attn_key_value_size = attn_hidden_size ; 42 }else { 43attn_key_value_size = n_head_kv * head_size ; 44 } 45 46for (int i = 0 ;i < n_layer ;++ i ) { 47auto & layer = layers [i ]; 48 49layer .attn_norm = create_tensor (tn (LLM_TENSOR_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 50 51layer .time_mix_w1 = create_tensor (tn (LLM_TENSOR_TIME_MIX_W1 ,"weight" ,i ), {n_embd ,time_mix_extra_dim * 5 },0 ); 52layer .time_mix_w2 = create_tensor (tn (LLM_TENSOR_TIME_MIX_W2 ,"weight" ,i ), {time_mix_extra_dim ,n_embd ,5 },0 ); 53 54layer .time_mix_lerp_x = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_X ,"weight" ,i ), {n_embd ,1 ,1 },0 ); 55layer .time_mix_lerp_fused = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_FUSED ,"weight" ,i ), {n_embd ,1 ,1 ,5 },0 ); 56 57layer .time_mix_first = create_tensor (tn (LLM_TENSOR_TIME_MIX_FIRST ,"weight" ,i ), {head_size ,n_embd /head_size },TENSOR_NOT_REQUIRED ); 58layer .time_mix_decay = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY ,"weight" ,i ), {n_embd },0 ); 59layer .time_mix_decay_w1 = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY_W1 ,"weight" ,i ), {n_embd ,time_decay_extra_dim },0 ); 60layer .time_mix_decay_w2 = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY_W2 ,"weight" ,i ), {time_decay_extra_dim ,attn_hidden_size },0 ); 61layer .time_mix_key = create_tensor (tn (LLM_TENSOR_TIME_MIX_KEY ,"weight" ,i ), {n_embd ,attn_key_value_size },0 ); 62layer .time_mix_value = create_tensor (tn (LLM_TENSOR_TIME_MIX_VALUE ,"weight" ,i ), {n_embd ,attn_key_value_size },0 ); 63layer .time_mix_receptance = create_tensor (tn (LLM_TENSOR_TIME_MIX_RECEPTANCE ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 64layer .time_mix_gate = create_tensor (tn (LLM_TENSOR_TIME_MIX_GATE ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 65// optional bias tensors 66layer .time_mix_key_b = create_tensor (tn (LLM_TENSOR_TIME_MIX_KEY ,"bias" ,i ), {attn_key_value_size },TENSOR_NOT_REQUIRED ); 67layer .time_mix_value_b = create_tensor (tn (LLM_TENSOR_TIME_MIX_VALUE ,"bias" ,i ), {attn_key_value_size },TENSOR_NOT_REQUIRED ); 68layer .time_mix_receptance_b = create_tensor (tn (LLM_TENSOR_TIME_MIX_RECEPTANCE ,"bias" ,i ), {attn_hidden_size },TENSOR_NOT_REQUIRED ); 69 70layer .time_mix_output = create_tensor (tn (LLM_TENSOR_TIME_MIX_OUTPUT ,"weight" ,i ), {n_embd ,attn_hidden_size },0 ); 71 72layer .ffn_norm = create_tensor (tn (LLM_TENSOR_FFN_NORM ,"weight" ,i ), {n_embd },0 ); 73 74layer .ffn_gate = create_tensor (tn (LLM_TENSOR_FFN_GATE ,"weight" ,i ), {n_embd ,n_ff },0 ); 75layer .ffn_down = create_tensor (tn (LLM_TENSOR_FFN_DOWN ,"weight" ,i ), {n_ff ,n_embd },0 ); 76layer .ffn_up = create_tensor (tn (LLM_TENSOR_FFN_UP ,"weight" ,i ), {n_embd ,n_ff },0 ); 77 } 78} 79 80std::unique_ptr < llm_graph_context > llama_model_rwkv6qwen2::build_arch_graph (const llm_graph_params & params )const { 81return std::make_unique < graph > (* this ,params ); 82} 83 84llama_model_rwkv6qwen2::graph::graph (const llama_model & model ,const llm_graph_params & params ) :llm_build_rwkv6_base (model ,params ) { 85GGML_ASSERT (n_embd == hparams .n_embd_r ()); 86 87ggml_tensor * cur ; 88ggml_tensor * inpL ; 89 90inpL = build_inp_embd (model .tok_embd ); 91 92auto * rs_inp = build_rs_inp (); 93 94const auto n_embd = hparams .n_embd ; 95const auto n_seq_tokens = ubatch .n_seq_tokens ; 96const auto n_seqs = ubatch .n_seqs ; 97 98ggml_tensor * inp_out_ids = build_inp_out_ids (); 99 100for (int il = 0 ;il < n_layer ;++ il ) { 101const llama_layer * layer = & model .layers [il ]; 102inpL = ggml_reshape_3d (ctx0 ,inpL ,n_embd ,n_seq_tokens ,n_seqs ); 103 104ggml_tensor * token_shift = build_rwkv_token_shift_load (rs_inp ,ubatch ,il ); 105 106ggml_tensor * att_norm = build_norm (inpL ,layer -> attn_norm ,layer -> attn_norm_b ,LLM_NORM_RMS ,il ); 107cb (att_norm ,"attn_norm" ,il ); 108 109ggml_tensor * x_prev = ggml_concat ( 110ctx0 , 111token_shift , 112ggml_view_3d (ctx0 ,att_norm ,n_embd ,n_seq_tokens - 1 ,n_seqs ,att_norm -> nb [1 ],att_norm -> nb [2 ],0 ), 1131 114 ); 115 116cur = build_rwkv6_time_mix (rs_inp ,att_norm ,x_prev ,ubatch ,il ); 117 118token_shift = ggml_view_3d (ctx0 ,att_norm ,n_embd ,1 ,n_seqs ,att_norm -> nb [1 ],att_norm -> nb [2 ], (n_seq_tokens - 1 )* n_embd * ggml_element_size (att_norm )); 119ggml_build_forward_expand (gf ,build_rwkv_token_shift_store (token_shift ,ubatch ,il )); 120 121ggml_tensor * ffn_inp = ggml_add (ctx0 ,cur ,inpL ); 122cb (ffn_inp ,"ffn_inp" ,il ); 123 124cur = ggml_reshape_2d (ctx0 ,cur ,n_embd ,n_tokens ); 125ffn_inp = ggml_reshape_2d (ctx0 ,ffn_inp ,n_embd ,n_tokens ); 126 127if (il == n_layer - 1 && inp_out_ids ) { 128cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 129ffn_inp = ggml_get_rows (ctx0 ,ffn_inp ,inp_out_ids ); 130 } 131 132// feed-forward network 133cur = build_norm (ffn_inp , 134model .layers [il ].ffn_norm ,NULL , 135LLM_NORM_RMS ,il ); 136cb (cur ,"ffn_norm" ,il ); 137 138cur = build_ffn (cur , 139model .layers [il ].ffn_up ,NULL ,NULL , 140model .layers [il ].ffn_gate ,NULL ,NULL , 141model .layers [il ].ffn_down ,NULL ,NULL , 142NULL , 143LLM_FFN_SILU ,LLM_FFN_PAR ,il ); 144cb (cur ,"ffn_out" ,il ); 145 146cur = ggml_add (ctx0 ,cur ,ffn_inp ); 147 148cur = build_cvec (cur ,il ); 149cb (cur ,"l_out" ,il ); 150 151// input for next layer 152inpL = cur ; 153 } 154 155cur = inpL ; 156cur = build_norm (cur ,model .output_norm ,model .output_norm_b ,LLM_NORM_RMS ,-1 ); 157 158cb (cur ,"result_norm" ,-1 ); 159res -> t_embd = cur ; 160 161cur = build_lora_mm (model .output ,cur ,model .output_s ); 162 163cb (cur ,"result_output" ,-1 ); 164res -> t_logits = cur ; 165 166ggml_build_forward_expand (gf ,cur ); 167}