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_rwkv6::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_rwkv6::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 31// Block 0, LN0 32tok_norm = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD_NORM ,"weight" ,0 ), {n_embd },0 ); 33tok_norm_b = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD_NORM ,"bias" ,0 ), {n_embd },0 ); 34 35// output 36output_norm = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 37output_norm_b = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"bias" ), {n_embd },0 ); 38output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {n_embd ,n_vocab },0 ); 39 40const int time_mix_extra_dim = hparams .time_mix_extra_dim ; 41const int time_decay_extra_dim = hparams .time_decay_extra_dim ; 42const int head_size = hparams .wkv_head_size ; 43const int attn_hidden_size = n_embd ; 44const int ffn_size = hparams .n_ff_arr [0 ]; 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 ); 50layer .attn_norm_b = create_tensor (tn (LLM_TENSOR_ATTN_NORM ,"bias" ,i ), {n_embd },0 ); 51 52layer .attn_norm_2 = create_tensor (tn (LLM_TENSOR_ATTN_NORM_2 ,"weight" ,i ), {n_embd },0 ); 53layer .attn_norm_2_b = create_tensor (tn (LLM_TENSOR_ATTN_NORM_2 ,"bias" ,i ), {n_embd },0 ); 54 55layer .time_mix_w1 = create_tensor (tn (LLM_TENSOR_TIME_MIX_W1 ,"weight" ,i ), {n_embd ,time_mix_extra_dim * 5 },0 ); 56layer .time_mix_w2 = create_tensor (tn (LLM_TENSOR_TIME_MIX_W2 ,"weight" ,i ), {time_mix_extra_dim ,n_embd ,5 },0 ); 57 58layer .time_mix_lerp_x = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_X ,"weight" ,i ), {n_embd ,1 ,1 },0 ); 59layer .time_mix_lerp_w = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_W ,"weight" ,i ), {n_embd ,1 ,1 },TENSOR_NOT_REQUIRED ); 60layer .time_mix_lerp_k = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_K ,"weight" ,i ), {n_embd ,1 ,1 },TENSOR_NOT_REQUIRED ); 61layer .time_mix_lerp_v = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_V ,"weight" ,i ), {n_embd ,1 ,1 },TENSOR_NOT_REQUIRED ); 62layer .time_mix_lerp_r = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_R ,"weight" ,i ), {n_embd ,1 ,1 },TENSOR_NOT_REQUIRED ); 63layer .time_mix_lerp_g = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_G ,"weight" ,i ), {n_embd ,1 ,1 },TENSOR_NOT_REQUIRED ); 64layer .time_mix_lerp_fused = create_tensor (tn (LLM_TENSOR_TIME_MIX_LERP_FUSED ,"weight" ,i ), {n_embd ,1 ,1 ,5 },TENSOR_NOT_REQUIRED ); 65GGML_ASSERT (!(layer .time_mix_lerp_fused == NULL && layer .time_mix_lerp_w == NULL )); 66 67layer .time_mix_first = create_tensor (tn (LLM_TENSOR_TIME_MIX_FIRST ,"weight" ,i ), {head_size ,n_embd /head_size },0 ); 68layer .time_mix_decay = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY ,"weight" ,i ), {n_embd },0 ); 69layer .time_mix_decay_w1 = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY_W1 ,"weight" ,i ), {n_embd ,time_decay_extra_dim },0 ); 70layer .time_mix_decay_w2 = create_tensor (tn (LLM_TENSOR_TIME_MIX_DECAY_W2 ,"weight" ,i ), {time_decay_extra_dim ,attn_hidden_size },0 ); 71layer .time_mix_key = create_tensor (tn (LLM_TENSOR_TIME_MIX_KEY ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 72layer .time_mix_value = create_tensor (tn (LLM_TENSOR_TIME_MIX_VALUE ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 73layer .time_mix_receptance = create_tensor (tn (LLM_TENSOR_TIME_MIX_RECEPTANCE ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 74layer .time_mix_gate = create_tensor (tn (LLM_TENSOR_TIME_MIX_GATE ,"weight" ,i ), {attn_hidden_size ,n_embd },0 ); 75 76layer .time_mix_ln = create_tensor (tn (LLM_TENSOR_TIME_MIX_LN ,"weight" ,i ), {n_embd },0 ); 77layer .time_mix_ln_b = create_tensor (tn (LLM_TENSOR_TIME_MIX_LN ,"bias" ,i ), {n_embd },0 ); 78layer .time_mix_output = create_tensor (tn (LLM_TENSOR_TIME_MIX_OUTPUT ,"weight" ,i ), {n_embd ,attn_hidden_size },0 ); 79 80layer .channel_mix_lerp_k = create_tensor (tn (LLM_TENSOR_CHANNEL_MIX_LERP_K ,"weight" ,i ), {n_embd ,1 ,1 },0 ); 81layer .channel_mix_lerp_r = create_tensor (tn (LLM_TENSOR_CHANNEL_MIX_LERP_R ,"weight" ,i ), {n_embd ,1 ,1 },0 ); 82 83layer .channel_mix_key = create_tensor (tn (LLM_TENSOR_CHANNEL_MIX_KEY ,"weight" ,i ), {n_embd ,ffn_size },0 ); 84layer .channel_mix_value = create_tensor (tn (LLM_TENSOR_CHANNEL_MIX_VALUE ,"weight" ,i ), {ffn_size ,n_embd },0 ); 85layer .channel_mix_receptance = create_tensor (tn (LLM_TENSOR_CHANNEL_MIX_RECEPTANCE ,"weight" ,i ), {n_embd ,n_embd },0 ); 86 } 87 88} 89 90std::unique_ptr < llm_graph_context > llama_model_rwkv6::build_arch_graph (const llm_graph_params & params )const { 91return std::make_unique < graph > (* this ,params ); 92} 93 94llama_model_rwkv6::graph::graph (const llama_model & model ,const llm_graph_params & params ) : 95llm_build_rwkv6_base (model ,params ) { 96GGML_ASSERT (hparams .token_shift_count == 2 ); 97 98ggml_tensor * cur ; 99ggml_tensor * inpL ; 100 101inpL = build_inp_embd (model .tok_embd ); 102inpL = build_norm (inpL ,model .tok_norm ,model .tok_norm_b ,LLM_NORM ,0 ); 103 104auto * rs_inp = build_rs_inp (); 105 106const auto n_embd = hparams .n_embd ; 107const auto n_seq_tokens = ubatch .n_seq_tokens ; 108const auto n_seqs = ubatch .n_seqs ; 109 110ggml_tensor * inp_out_ids = build_inp_out_ids (); 111 112for (int il = 0 ;il < n_layer ;++ il ) { 113const llama_layer * layer = & model .layers [il ]; 114inpL = ggml_reshape_3d (ctx0 ,inpL ,n_embd ,n_seq_tokens ,n_seqs ); 115 116ggml_tensor * token_shift = build_rwkv_token_shift_load (rs_inp ,ubatch ,il ); 117 118ggml_tensor * att_shift = 119ggml_view_3d (ctx0 ,token_shift ,n_embd ,1 ,n_seqs ,token_shift -> nb [1 ],token_shift -> nb [2 ],0 ); 120ggml_tensor * ffn_shift = ggml_view_3d (ctx0 ,token_shift ,n_embd ,1 ,n_seqs ,token_shift -> nb [1 ], 121token_shift -> nb [2 ],n_embd * ggml_element_size (token_shift )); 122 123ggml_tensor * att_norm = build_norm (inpL ,layer -> attn_norm ,layer -> attn_norm_b ,LLM_NORM ,il ); 124cb (att_norm ,"attn_norm" ,il ); 125 126ggml_tensor * x_prev = ggml_concat ( 127ctx0 ,att_shift , 128ggml_view_3d (ctx0 ,att_norm ,n_embd ,n_seq_tokens - 1 ,n_seqs ,att_norm -> nb [1 ],att_norm -> nb [2 ],0 ),1 ); 129 130cur = build_rwkv6_time_mix (rs_inp ,att_norm ,x_prev ,ubatch ,il ); 131 132ggml_tensor * ffn_inp = ggml_add (ctx0 ,cur ,inpL ); 133cb (ffn_inp ,"ffn_inp" ,il ); 134 135ggml_tensor * ffn_norm = build_norm (ffn_inp ,layer -> attn_norm_2 ,layer -> attn_norm_2_b ,LLM_NORM ,il ); 136cb (ffn_norm ,"ffn_norm" ,il ); 137 138x_prev = ggml_concat ( 139ctx0 ,ffn_shift , 140ggml_view_3d (ctx0 ,ffn_norm ,n_embd ,n_seq_tokens - 1 ,n_seqs ,ffn_norm -> nb [1 ],ffn_norm -> nb [2 ],0 ),1 ); 141 142token_shift = ggml_concat (ctx0 , 143ggml_view_3d (ctx0 ,att_norm ,n_embd ,1 ,n_seqs ,att_norm -> nb [1 ],att_norm -> nb [2 ], 144 (n_seq_tokens - 1 )* n_embd * ggml_element_size (att_norm )), 145ggml_view_3d (ctx0 ,ffn_norm ,n_embd ,1 ,n_seqs ,ffn_norm -> nb [1 ],ffn_norm -> nb [2 ], 146 (n_seq_tokens - 1 )* n_embd * ggml_element_size (ffn_norm )), 1471 ); 148ggml_build_forward_expand (gf ,build_rwkv_token_shift_store (token_shift ,ubatch ,il )); 149 150ffn_inp = ggml_reshape_2d (ctx0 ,ffn_inp ,n_embd ,n_tokens ); 151ffn_norm = ggml_reshape_2d (ctx0 ,ffn_norm ,n_embd ,n_tokens ); 152x_prev = ggml_reshape_2d (ctx0 ,x_prev ,n_embd ,n_tokens ); 153cur = ggml_reshape_2d (ctx0 ,cur ,n_embd ,n_tokens ); 154 155if (il == n_layer - 1 && inp_out_ids ) { 156ffn_inp = ggml_get_rows (ctx0 ,ffn_inp ,inp_out_ids ); 157ffn_norm = ggml_get_rows (ctx0 ,ffn_norm ,inp_out_ids ); 158x_prev = ggml_get_rows (ctx0 ,x_prev ,inp_out_ids ); 159cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 160 } 161cur = build_rwkv6_channel_mix (layer ,ffn_norm ,x_prev ,LLM_ARCH_RWKV6 ); 162cur = ggml_add (ctx0 ,cur ,ffn_inp ); 163 164if (hparams .rescale_every_n_layers != 0 && (il + 1 ) %hparams .rescale_every_n_layers == 0 ) { 165cur = ggml_scale (ctx0 ,cur ,0.5F ); 166 } 167cur = build_cvec (cur ,il ); 168cb (cur ,"l_out" ,il ); 169 170// input for next layer 171inpL = cur ; 172 } 173cur = inpL ; 174cur = build_norm (cur ,model .output_norm ,model .output_norm_b ,LLM_NORM ,-1 ); 175 176cb (cur ,"result_norm" ,-1 ); 177res -> t_embd = cur ; 178 179cur = build_lora_mm (model .output ,cur ,model .output_s ); 180 181cb (cur ,"result_output" ,-1 ); 182res -> t_logits = cur ; 183 184ggml_build_forward_expand (gf ,cur ); 185}