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_t5::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_RELATIVE_BUCKETS_COUNT ,hparams .n_rel_attn_bkts ); 6 7uint32_t dec_start_token_id ; 8if (ml .get_key (LLM_KV_DECODER_START_TOKEN_ID ,dec_start_token_id , false)) { 9hparams .dec_start_token_id = dec_start_token_id ; 10 } 11 12hparams .dec_n_layer = hparams .n_layer (); 13ml .get_key (LLM_KV_DECODER_BLOCK_COUNT ,hparams .dec_n_layer , false); 14 15switch (hparams .n_layer ()) { 16case 6 :type = LLM_TYPE_60M ;break ;// t5-small 17case 8 :type = LLM_TYPE_80M ;break ;// flan-t5-small 18case 12 : 19switch (hparams .n_ff ()) { 20case 3072 :type = LLM_TYPE_220M ;break ;// t5-base 21case 2048 :type = LLM_TYPE_250M ;break ;// flan-t5-base 22default :type = LLM_TYPE_UNKNOWN ; 23 }break ; 24case 24 : 25switch (hparams .n_ff ()) { 26case 4096 :type = LLM_TYPE_770M ;break ;// t5-large 27case 2816 :type = LLM_TYPE_780M ;break ;// flan-t5-large 28case 16384 :type = LLM_TYPE_3B ;break ;// t5-3b 29case 5120 :type = LLM_TYPE_3B ;break ;// flan-t5-xl 30case 65536 :type = LLM_TYPE_11B ;break ;// t5-11b 31case 10240 :type = LLM_TYPE_11B ;break ;// flan-t5-xxl 32default :type = LLM_TYPE_UNKNOWN ; 33 }break ; 34default :type = LLM_TYPE_UNKNOWN ; 35 } 36} 37 38void llama_model_t5::load_arch_tensors (llama_model_loader & ) { 39LLAMA_LOAD_LOCALS ; 40 41const auto n_rel_attn_bkts = hparams .n_rel_attn_bkts ; 42 43tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },0 ); 44 45// output 46output_norm_enc = create_tensor (tn (LLM_TENSOR_ENC_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 47output_norm = create_tensor (tn (LLM_TENSOR_DEC_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 48 49output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {n_embd ,n_vocab },TENSOR_NOT_REQUIRED ); 50// if output is NULL, init from the input tok embed 51if (output == NULL ) { 52output = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },TENSOR_DUPLICATED ); 53 } 54 55// n_layer: number of encoder_layers 56// dec_n_layer: number of decoder_layers 57const int dec_n_layer = hparams .dec_n_layer ; 58if (dec_n_layer > n_layer ) { 59layers .resize (dec_n_layer ); 60 } 61 62// load encoder layers 63for (int i = 0 ;i < n_layer ;++ i ) { 64auto & layer = layers [i ]; 65 66layer .attn_norm_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 67layer .attn_rel_b_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_REL_B ,"weight" ,i ), {n_head ,n_rel_attn_bkts },TENSOR_NOT_REQUIRED ); 68 69layer .wq_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_Q ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 70layer .wk_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_K ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 71layer .wv_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_V ,"weight" ,i ), {n_embd ,n_embd_v_gqa },0 ); 72layer .wo_enc = create_tensor (tn (LLM_TENSOR_ENC_ATTN_OUT ,"weight" ,i ), {n_embd_v_gqa ,n_embd },0 ); 73 74layer .ffn_norm_enc = create_tensor (tn (LLM_TENSOR_ENC_FFN_NORM ,"weight" ,i ), {n_embd },0 ); 75layer .ffn_gate_enc = create_tensor (tn (LLM_TENSOR_ENC_FFN_GATE ,"weight" ,i ), {n_embd ,n_ff },TENSOR_NOT_REQUIRED ); 76layer .ffn_down_enc = create_tensor (tn (LLM_TENSOR_ENC_FFN_DOWN ,"weight" ,i ), {n_ff ,n_embd },0 ); 77layer .ffn_up_enc = create_tensor (tn (LLM_TENSOR_ENC_FFN_UP ,"weight" ,i ), {n_embd ,n_ff },0 ); 78 } 79 80// load decoder layers 81for (int i = 0 ;i < dec_n_layer ;++ i ) { 82auto & layer = layers [i ]; 83 84layer .attn_norm = create_tensor (tn (LLM_TENSOR_DEC_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 85layer .attn_rel_b = create_tensor (tn (LLM_TENSOR_DEC_ATTN_REL_B ,"weight" ,i ), {n_head ,n_rel_attn_bkts },TENSOR_NOT_REQUIRED ); 86 87layer .wq = create_tensor (tn (LLM_TENSOR_DEC_ATTN_Q ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 88layer .wk = create_tensor (tn (LLM_TENSOR_DEC_ATTN_K ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 89layer .wv = create_tensor (tn (LLM_TENSOR_DEC_ATTN_V ,"weight" ,i ), {n_embd ,n_embd_v_gqa },0 ); 90layer .wo = create_tensor (tn (LLM_TENSOR_DEC_ATTN_OUT ,"weight" ,i ), {n_embd_v_gqa ,n_embd },0 ); 91 92layer .attn_norm_cross = create_tensor (tn (LLM_TENSOR_DEC_CROSS_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 93// this tensor seems to be unused in HF transformers implementation 94layer .attn_rel_b_cross = create_tensor ( 95tn (LLM_TENSOR_DEC_CROSS_ATTN_REL_B ,"weight" ,i ), {n_head ,n_rel_attn_bkts },TENSOR_NOT_REQUIRED |TENSOR_SKIP_IF_VIRTUAL ); 96 97layer .wq_cross = create_tensor (tn (LLM_TENSOR_DEC_CROSS_ATTN_Q ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 98layer .wk_cross = create_tensor (tn (LLM_TENSOR_DEC_CROSS_ATTN_K ,"weight" ,i ), {n_embd ,n_embd_k_gqa },0 ); 99layer .wv_cross = create_tensor (tn (LLM_TENSOR_DEC_CROSS_ATTN_V ,"weight" ,i ), {n_embd ,n_embd_v_gqa },0 ); 100layer .wo_cross = create_tensor (tn (LLM_TENSOR_DEC_CROSS_ATTN_OUT ,"weight" ,i ), {n_embd_v_gqa ,n_embd },0 ); 101 102layer .ffn_norm = create_tensor (tn (LLM_TENSOR_DEC_FFN_NORM ,"weight" ,i ), {n_embd },0 ); 103layer .ffn_gate = create_tensor (tn (LLM_TENSOR_DEC_FFN_GATE ,"weight" ,i ), {n_embd ,n_ff },TENSOR_NOT_REQUIRED ); 104layer .ffn_down = create_tensor (tn (LLM_TENSOR_DEC_FFN_DOWN ,"weight" ,i ), {n_ff ,n_embd },0 ); 105layer .ffn_up = create_tensor (tn (LLM_TENSOR_DEC_FFN_UP ,"weight" ,i ), {n_embd ,n_ff },0 ); 106 } 107} 108 109std::unique_ptr < llm_graph_context > llama_model_t5::build_arch_graph (const llm_graph_params & params )const { 110switch (params .gtype ) { 111case LLM_GRAPH_TYPE_ENCODER : 112return std::make_unique < graph < true>> (* this ,params ); 113case LLM_GRAPH_TYPE_DEFAULT : 114case LLM_GRAPH_TYPE_DECODER : 115return std::make_unique < graph < false>> (* this ,params ); 116default : 117GGML_ABORT ("invalid graph type" ); 118 }; 119} 120 121template <> 122llama_model_t5::graph < false> ::graph (const llama_model & model ,const llm_graph_params & params ) :llm_graph_context (params ) { 123const int64_t n_embd_head = hparams .n_embd_head_v (); 124//const int64_t n_embd_gqa = hparams.n_embd_v_gqa(); 125 126GGML_ASSERT (n_embd_head == hparams .n_embd_head_k ()); 127 128ggml_tensor * cur ; 129ggml_tensor * inpL ; 130 131inpL = build_inp_embd (model .tok_embd ); 132 133ggml_tensor * embd_enc = build_inp_cross_embd (); 134ggml_tensor * pos_bucket_dec = build_inp_pos_bucket_dec (); 135 136const int64_t n_outputs_enc = embd_enc -> ne [1 ]; 137 138auto * inp_attn_self = build_attn_inp_kv (); 139auto * inp_attn_cross = build_attn_inp_cross (); 140 141ggml_tensor * inp_out_ids = build_inp_out_ids (); 142 143const int64_t dec_n_layer = hparams .dec_n_layer ; 144 145for (int il = 0 ;il < dec_n_layer ;++ il ) { 146ggml_tensor * inpSA = inpL ; 147 148// norm 149cur = build_norm (inpL , 150model .layers [il ].attn_norm ,NULL , 151LLM_NORM_RMS ,il ); 152cb (cur ,"attn_norm" ,il ); 153 154// self-attention 155 { 156auto [Qcur ,Kcur ,Vcur ]= build_qkv (model .layers [il ],cur ,n_embd_head ,n_head ,n_head_kv ,il ); 157 158ggml_tensor * attn_rel_b = model .layers [il ].attn_rel_b ?model .layers [il ].attn_rel_b :model .layers [0 ].attn_rel_b ; 159ggml_tensor * kq_b = build_pos_bias (pos_bucket_dec ,attn_rel_b ); 160 161cur = build_attn (inp_attn_self , 162model .layers [il ].wo ,model .layers [il ].wo_b ,model .layers [il ].wo_s , 163Qcur ,Kcur ,Vcur ,kq_b ,nullptr ,nullptr ,1.0f ,il ); 164cb (cur ,"kqv_out" ,il ); 165 } 166cur = ggml_add (ctx0 ,cur ,inpSA ); 167cb (cur ,"cross_inp" ,il ); 168 169ggml_tensor * inpCA = cur ; 170 171// norm 172cur = build_norm (cur , 173model .layers [il ].attn_norm_cross ,NULL , 174LLM_NORM_RMS ,il ); 175cb (cur ,"attn_norm_cross" ,il ); 176 177// cross-attention 178 { 179ggml_tensor * Qcur = build_lora_mm (model .layers [il ].wq_cross ,cur ); 180cb (Qcur ,"Qcur" ,il ); 181 182ggml_tensor * Kcur = build_lora_mm (model .layers [il ].wk_cross ,embd_enc ); 183cb (Kcur ,"Kcur" ,il ); 184 185ggml_tensor * Vcur = build_lora_mm (model .layers [il ].wv_cross ,embd_enc ); 186cb (Vcur ,"Vcur" ,il ); 187 188Qcur = ggml_reshape_3d (ctx0 ,Qcur ,n_embd_head ,n_head ,n_tokens ); 189Kcur = ggml_reshape_3d (ctx0 ,Kcur ,n_embd_head ,n_head_kv ,n_outputs_enc ); 190Vcur = ggml_reshape_3d (ctx0 ,Vcur ,n_embd_head ,n_head_kv ,n_outputs_enc ); 191 192cur = build_attn (inp_attn_cross , 193model .layers [il ].wo_cross ,nullptr ,nullptr , 194Qcur ,Kcur ,Vcur ,nullptr ,nullptr ,nullptr ,1.0f ,il ); 195cb (cur ,"kqv_out" ,il ); 196 197//ggml_tensor * q = ggml_permute(ctx0, Qcur, 0, 2, 1, 3); 198//ggml_tensor * k = ggml_cont(ctx0, ggml_permute(ctx0, Kcur, 0, 2, 1, 3)); 199 200//ggml_tensor * kq = ggml_mul_mat(ctx0, k, q); 201//cb(kq, "kq", il); 202 203//kq = ggml_soft_max_ext(ctx0, kq, KQ_mask_cross, 1.0f, hparams.f_max_alibi_bias); 204//cb(kq, "kq_soft_max_ext", il); 205 206//ggml_tensor * v = ggml_cont(ctx0, ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_embd_gqa, n_outputs_enc))); 207//cb(v, "v", il); 208 209//ggml_tensor * kqv = ggml_mul_mat(ctx0, ggml_reshape_3d(ctx0, v, n_outputs_enc, n_embd_head, n_head_kv), kq); 210//cb(kqv, "kqv", il); 211 212//ggml_tensor * kqv_merged = ggml_permute(ctx0, kqv, 0, 2, 1, 3); 213//cb(kqv_merged, "kqv_merged", il); 214 215//cur = ggml_cont_2d(ctx0, kqv_merged, n_embd_gqa, n_tokens); 216//cb(cur, "kqv_merged_cont", il); 217 218//ggml_build_forward_expand(gf, cur); 219 220//cur = build_lora_mm(model.layers[il].wo_cross, cur); 221//cb(cur, "kqv_out", il); 222 } 223if (il == dec_n_layer - 1 && inp_out_ids ) { 224cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 225inpCA = ggml_get_rows (ctx0 ,inpCA ,inp_out_ids ); 226 } 227ggml_tensor * ffn_inp = ggml_add (ctx0 ,cur ,inpCA ); 228cb (ffn_inp ,"ffn_inp" ,il ); 229 230// feed-forward network 231 { 232cur = build_norm (ffn_inp , 233model .layers [il ].ffn_norm ,NULL , 234LLM_NORM_RMS ,il ); 235cb (cur ,"ffn_norm" ,il ); 236 237// T5 uses relu, flan-T5 uses gelu-gated 238cur = build_ffn (cur , 239model .layers [il ].ffn_up ,NULL ,NULL , 240model .layers [il ].ffn_gate ,NULL ,NULL , 241model .layers [il ].ffn_down ,NULL ,NULL , 242NULL , 243model .layers [il ].ffn_gate ?LLM_FFN_GELU :LLM_FFN_RELU , 244model .layers [il ].ffn_gate ?LLM_FFN_PAR :LLM_FFN_SEQ , 245il ); 246cb (cur ,"ffn_out" ,il ); 247 } 248cur = ggml_add (ctx0 ,cur ,ffn_inp ); 249cb (cur ,"ffn_out" ,il ); 250 251cur = build_cvec (cur ,il ); 252cb (cur ,"l_out" ,il ); 253 254// input for next layer 255inpL = cur ; 256 } 257cur = inpL ; 258cb (cur ,"result_embd" ,-1 ); 259 260cur = build_norm (cur , 261model .output_norm ,NULL , 262LLM_NORM_RMS ,-1 ); 263 264cb (cur ,"result_norm" ,-1 ); 265res -> t_embd = cur ; 266 267// lm_head 268cur = build_lora_mm (model .output ,cur ,model .output_s ); 269 270cb (cur ,"result_output" ,-1 ); 271res -> t_logits = cur ; 272 273ggml_build_forward_expand (gf ,cur ); 274} 275 276template <> 277llama_model_t5::graph < true> ::graph (const llama_model & model ,const llm_graph_params & params ) :llm_graph_context (params ) { 278const int64_t n_embd_head = hparams .n_embd_head_v (); 279 280GGML_ASSERT (n_embd_head == hparams .n_embd_head_k ()); 281 282ggml_tensor * cur ; 283ggml_tensor * inpL ; 284 285inpL = build_inp_embd (model .tok_embd ); 286 287ggml_tensor * pos_bucket_enc = build_inp_pos_bucket_enc (); 288 289auto * inp_attn = build_attn_inp_no_cache (); 290 291ggml_tensor * inp_out_ids = build_inp_out_ids (); 292 293for (int il = 0 ;il < n_layer ;++ il ) { 294ggml_tensor * inpSA = inpL ; 295 296// norm 297cur = build_norm (inpL , 298model .layers [il ].attn_norm_enc ,NULL , 299LLM_NORM_RMS ,il ); 300cb (cur ,"attn_norm" ,il ); 301 302// self-attention 303 { 304ggml_tensor * Qcur = build_lora_mm (model .layers [il ].wq_enc ,cur ); 305cb (Qcur ,"Qcur" ,il ); 306 307ggml_tensor * Kcur = build_lora_mm (model .layers [il ].wk_enc ,cur ); 308cb (Kcur ,"Kcur" ,il ); 309 310ggml_tensor * Vcur = build_lora_mm (model .layers [il ].wv_enc ,cur ); 311cb (Vcur ,"Vcur" ,il ); 312 313Qcur = ggml_reshape_3d (ctx0 ,Qcur ,n_embd_head ,n_head ,n_tokens ); 314Kcur = ggml_reshape_3d (ctx0 ,Kcur ,n_embd_head ,n_head_kv ,n_tokens ); 315Vcur = ggml_reshape_3d (ctx0 ,Vcur ,n_embd_head ,n_head_kv ,n_tokens ); 316 317ggml_tensor * attn_rel_b = model .layers [il ].attn_rel_b_enc ?model .layers [il ].attn_rel_b_enc :model .layers [0 ].attn_rel_b_enc ; 318ggml_tensor * kq_b = build_pos_bias (pos_bucket_enc ,attn_rel_b ); 319 320cur = build_attn (inp_attn , 321model .layers [il ].wo_enc ,nullptr ,nullptr , 322Qcur ,Kcur ,Vcur ,kq_b ,nullptr ,nullptr ,1.0f ,il ); 323cb (cur ,"kqv_out" ,il ); 324 } 325if (il == n_layer - 1 && inp_out_ids ) { 326cur = ggml_get_rows (ctx0 ,cur ,inp_out_ids ); 327inpSA = ggml_get_rows (ctx0 ,inpSA ,inp_out_ids ); 328 } 329ggml_tensor * ffn_inp = ggml_add (ctx0 ,cur ,inpSA ); 330cb (ffn_inp ,"ffn_inp" ,il ); 331 332// feed-forward network 333 { 334cur = build_norm (ffn_inp , 335model .layers [il ].ffn_norm_enc ,NULL , 336LLM_NORM_RMS ,il ); 337cb (cur ,"ffn_norm" ,il ); 338 339// T5 uses relu, flan-T5 uses gelu-gated 340cur = build_ffn (cur , 341model .layers [il ].ffn_up_enc ,NULL ,NULL , 342model .layers [il ].ffn_gate_enc ,NULL ,NULL , 343model .layers [il ].ffn_down_enc ,NULL ,NULL , 344NULL , 345model .layers [il ].ffn_gate_enc ?LLM_FFN_GELU :LLM_FFN_RELU , 346model .layers [il ].ffn_gate_enc ?LLM_FFN_PAR :LLM_FFN_SEQ , 347il ); 348cb (cur ,"ffn_out" ,il ); 349 } 350cur = ggml_add (ctx0 ,cur ,ffn_inp ); 351cb (cur ,"ffn_out" ,il ); 352 353cur = build_cvec (cur ,il ); 354cb (cur ,"l_out" ,il ); 355 356// input for next layer 357inpL = cur ; 358 } 359cur = inpL ; 360cb (cur ,"result_embd" ,-1 ); 361 362cur = build_norm (cur , 363model .output_norm_enc ,NULL , 364LLM_NORM_RMS ,-1 ); 365 366cb (cur ,"result_norm" ,-1 ); 367res -> t_embd = cur ; 368 369ggml_build_forward_expand (gf ,cur ); 370}