char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
42928bc14
char/aliceai-t5-moe
1#include "models.h" 2 3void llama_model_wavtokenizer_dec::load_arch_hparams (llama_model_loader & ml ) { 4ml .get_key (LLM_KV_ATTENTION_LAYERNORM_EPS ,hparams .f_norm_eps ); 5ml .get_key (LLM_KV_ATTENTION_GROUPNORM_EPS ,hparams .f_norm_group_eps ); 6ml .get_key (LLM_KV_ATTENTION_GROUPNORM_GROUPS ,hparams .n_norm_groups ); 7} 8 9void llama_model_wavtokenizer_dec::load_arch_tensors (llama_model_loader & ) { 10LLAMA_LOAD_LOCALS ; 11 12tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {hparams .n_embd ,n_vocab },0 ); 13 14conv1d = create_tensor (tn (LLM_TENSOR_CONV1D ,"weight" ,0 ), {7 ,hparams .n_embd ,hparams .posnet .n_embd },0 ); 15conv1d_b = create_tensor (tn (LLM_TENSOR_CONV1D ,"bias" ,0 ), {1 ,hparams .posnet .n_embd },0 ); 16 17// posnet 18 { 19const int64_t n_embd = hparams .posnet .n_embd ; 20 21for (uint32_t i = 0 ;i < hparams .posnet .n_layer ;++ i ) { 22auto & layer = layers [i ].posnet ; 23 24// posnet: 25// 26// - resnet 27// - resnet 28// - attn 29// - resnet 30// - resnet 31// - norm 32// 33switch (i ) { 34case 0 : 35case 1 : 36case 3 : 37case 4 : 38 { 39layer .norm1 = create_tensor (tn (LLM_TENSOR_POS_NET_NORM1 ,"weight" ,i ), {1 ,n_embd },0 ); 40layer .norm1_b = create_tensor (tn (LLM_TENSOR_POS_NET_NORM1 ,"bias" ,i ), {1 ,n_embd },0 ); 41 42layer .conv1 = create_tensor (tn (LLM_TENSOR_POS_NET_CONV1 ,"weight" ,i ), {3 ,n_embd ,n_embd },0 ); 43layer .conv1_b = create_tensor (tn (LLM_TENSOR_POS_NET_CONV1 ,"bias" ,i ), {1 ,n_embd },0 ); 44 45layer .norm2 = create_tensor (tn (LLM_TENSOR_POS_NET_NORM2 ,"weight" ,i ), {1 ,n_embd },0 ); 46layer .norm2_b = create_tensor (tn (LLM_TENSOR_POS_NET_NORM2 ,"bias" ,i ), {1 ,n_embd },0 ); 47 48layer .conv2 = create_tensor (tn (LLM_TENSOR_POS_NET_CONV2 ,"weight" ,i ), {3 ,n_embd ,n_embd },0 ); 49layer .conv2_b = create_tensor (tn (LLM_TENSOR_POS_NET_CONV2 ,"bias" ,i ), {1 ,n_embd },0 ); 50 }break ; 51case 2 : 52 { 53layer .attn_norm = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_NORM ,"weight" ,i ), {1 ,n_embd },0 ); 54layer .attn_norm_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_NORM ,"bias" ,i ), {1 ,n_embd },0 ); 55 56layer .attn_q = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_Q ,"weight" ,i ), {1 ,n_embd ,n_embd },0 ); 57layer .attn_q_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_Q ,"bias" ,i ), {1 ,n_embd },0 ); 58 59layer .attn_k = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_K ,"weight" ,i ), {1 ,n_embd ,n_embd },0 ); 60layer .attn_k_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_K ,"bias" ,i ), {1 ,n_embd },0 ); 61 62layer .attn_v = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_V ,"weight" ,i ), {1 ,n_embd ,n_embd },0 ); 63layer .attn_v_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_V ,"bias" ,i ), {1 ,n_embd },0 ); 64 65layer .attn_o = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_OUT ,"weight" ,i ), {1 ,n_embd ,n_embd },0 ); 66layer .attn_o_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_OUT ,"bias" ,i ), {1 ,n_embd },0 ); 67 }break ; 68case 5 : 69 { 70layer .norm = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_NORM ,"weight" ,i ), {1 ,n_embd },0 ); 71layer .norm_b = create_tensor (tn (LLM_TENSOR_POS_NET_ATTN_NORM ,"bias" ,i ), {1 ,n_embd },0 ); 72 }break ; 73default :GGML_ABORT ("unknown posnet layer" ); 74 }; 75 } 76 } 77 78GGML_ASSERT (hparams .posnet .n_embd == hparams .convnext .n_embd ); 79 80tok_norm = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD_NORM ,"weight" ,0 ), {hparams .posnet .n_embd },0 ); 81tok_norm_b = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD_NORM ,"bias" ,0 ), {hparams .posnet .n_embd },0 ); 82 83// convnext 84 { 85const int64_t n_embd = hparams .convnext .n_embd ; 86 87for (uint32_t i = 0 ;i < hparams .convnext .n_layer ;++ i ) { 88auto & layer = layers [i ].convnext ; 89 90layer .dw = create_tensor (tn (LLM_TENSOR_CONVNEXT_DW ,"weight" ,i ), {7 ,1 ,n_embd },0 ); 91layer .dw_b = create_tensor (tn (LLM_TENSOR_CONVNEXT_DW ,"bias" ,i ), {1 ,n_embd },0 ); 92 93layer .norm = create_tensor (tn (LLM_TENSOR_CONVNEXT_NORM ,"weight" ,i ), {n_embd },0 ); 94layer .norm_b = create_tensor (tn (LLM_TENSOR_CONVNEXT_NORM ,"bias" ,i ), {n_embd },0 ); 95 96layer .pw1 = create_tensor (tn (LLM_TENSOR_CONVNEXT_PW1 ,"weight" ,i ), {n_embd ,n_ff },0 ); 97layer .pw1_b = create_tensor (tn (LLM_TENSOR_CONVNEXT_PW1 ,"bias" ,i ), {n_ff },0 ); 98 99layer .pw2 = create_tensor (tn (LLM_TENSOR_CONVNEXT_PW2 ,"weight" ,i ), {n_ff ,n_embd },0 ); 100layer .pw2_b = create_tensor (tn (LLM_TENSOR_CONVNEXT_PW2 ,"bias" ,i ), {n_embd },0 ); 101 102layer .gamma = create_tensor (tn (LLM_TENSOR_CONVNEXT_GAMMA ,"weight" ,i ), {n_embd },0 ); 103 } 104 105// output 106output_norm = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 107output_norm_b = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"bias" ), {n_embd },0 ); 108 } 109 110output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {hparams .convnext .n_embd ,hparams .n_embd_out ()},0 ); 111output_b = create_tensor (tn (LLM_TENSOR_OUTPUT ,"bias" ), {hparams .n_embd_out ()},0 ); 112} 113 114std::unique_ptr < llm_graph_context > llama_model_wavtokenizer_dec::build_arch_graph (const llm_graph_params & params )const { 115return std::make_unique < graph > (* this ,params ); 116} 117 118llama_model_wavtokenizer_dec::graph::graph (const llama_model & model ,const llm_graph_params & params ) :llm_graph_context (params ) { 119ggml_tensor * cur ; 120ggml_tensor * inpL ; 121 122inpL = build_inp_embd (model .tok_embd ); 123 124cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,inpL )); 125 126cur = ggml_conv_1d_ph (ctx0 ,model .conv1d ,cur ,1 ,1 ); 127cur = ggml_add (ctx0 ,cur ,model .conv1d_b ); 128 129// posnet 130for (uint32_t il = 0 ;il < hparams .posnet .n_layer ;++ il ) { 131const auto & layer = model .layers [il ].posnet ; 132 133inpL = cur ; 134 135switch (il ) { 136case 0 : 137case 1 : 138case 3 : 139case 4 : 140 { 141cur = build_norm (cur , 142layer .norm1 , 143layer .norm1_b , 144LLM_NORM_GROUP ,0 ); 145 146cur = ggml_mul (ctx0 ,ggml_sigmoid (ctx0 ,cur ),cur ); 147 148cur = ggml_conv_1d_ph (ctx0 ,layer .conv1 ,cur ,1 ,1 ); 149cur = ggml_add (ctx0 ,cur ,layer .conv1_b ); 150 151cur = build_norm (cur , 152layer .norm2 , 153layer .norm2_b , 154LLM_NORM_GROUP ,0 ); 155 156cur = ggml_mul (ctx0 ,ggml_sigmoid (ctx0 ,cur ),cur ); 157 158cur = ggml_conv_1d_ph (ctx0 ,layer .conv2 ,cur ,1 ,1 ); 159cur = ggml_add (ctx0 ,cur ,layer .conv2_b ); 160 161cur = ggml_add (ctx0 ,cur ,inpL ); 162 }break ; 163case 2 : 164 { 165cur = build_norm (cur , 166layer .attn_norm , 167layer .attn_norm_b , 168LLM_NORM_GROUP ,0 ); 169 170ggml_tensor * q ; 171ggml_tensor * k ; 172ggml_tensor * v ; 173 174q = ggml_conv_1d_ph (ctx0 ,layer .attn_q ,cur ,1 ,1 ); 175k = ggml_conv_1d_ph (ctx0 ,layer .attn_k ,cur ,1 ,1 ); 176v = ggml_conv_1d_ph (ctx0 ,layer .attn_v ,cur ,1 ,1 ); 177 178q = ggml_add (ctx0 ,q ,layer .attn_q_b ); 179k = ggml_add (ctx0 ,k ,layer .attn_k_b ); 180v = ggml_add (ctx0 ,v ,layer .attn_v_b ); 181 182q = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,q )); 183k = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,k )); 184 185ggml_tensor * kq = ggml_mul_mat (ctx0 ,k ,q ); 186 187kq = ggml_soft_max_ext (ctx0 ,kq ,nullptr ,1.0f /sqrtf (float (hparams .posnet .n_embd )),0.0f ); 188 189cur = ggml_mul_mat (ctx0 ,kq ,v ); 190 191cur = ggml_conv_1d_ph (ctx0 ,layer .attn_o ,cur ,1 ,1 ); 192cur = ggml_add (ctx0 ,cur ,layer .attn_o_b ); 193 194cur = ggml_add (ctx0 ,cur ,inpL ); 195 }break ; 196case 5 : 197 { 198cur = build_norm (cur , 199layer .norm , 200layer .norm_b , 201LLM_NORM_GROUP ,0 ); 202 }break ; 203default :GGML_ABORT ("unknown posnet layer" ); 204 }; 205 } 206cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,cur )); 207 208cur = build_norm (cur , 209model .tok_norm , 210model .tok_norm_b , 211LLM_NORM ,0 ); 212 213cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,cur )); 214 215inpL = cur ; 216 217// convnext 218for (uint32_t il = 0 ;il < hparams .convnext .n_layer ;++ il ) { 219const auto & layer = model .layers [il ].convnext ; 220 221cur = inpL ; 222 223cur = ggml_conv_1d_dw_ph (ctx0 ,layer .dw ,cur ,1 ,1 ); 224cur = ggml_add (ctx0 ,cur ,layer .dw_b ); 225 226cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,cur )); 227 228cur = build_norm (cur , 229layer .norm , 230layer .norm_b , 231LLM_NORM ,-1 ); 232 233cur = build_ffn (cur , 234layer .pw1 ,layer .pw1_b ,NULL , 235NULL ,NULL ,NULL , 236layer .pw2 ,layer .pw2_b ,NULL , 237NULL , 238LLM_FFN_GELU ,LLM_FFN_SEQ ,il ); 239 240cur = ggml_mul (ctx0 ,cur ,layer .gamma ); 241 242cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,cur )); 243 244inpL = ggml_add (ctx0 ,cur ,inpL ); 245 } 246cur = inpL ; 247 248cur = ggml_cont (ctx0 ,ggml_transpose (ctx0 ,cur )); 249 250cur = build_norm (cur , 251model .output_norm , 252model .output_norm_b , 253LLM_NORM ,-1 ); 254 255// lm_head 256cur = build_lora_mm (model .output ,cur ,model .output_s ); 257 258cur = ggml_add (ctx0 ,cur ,model .output_b ); 259 260cb (cur ,"result_embd" ,-1 ); 261res -> t_embd = cur ; 262 263ggml_build_forward_expand (gf ,cur ); 264}