char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
960d628f4
char/aliceai-t5-moe
1#include "models.h" 2 3void llama_model_mamba2::load_arch_hparams (llama_model_loader & ml ) { 4ml .get_key (LLM_KV_SSM_CONV_KERNEL ,hparams .ssm_d_conv ); 5ml .get_key (LLM_KV_SSM_INNER_SIZE ,hparams .ssm_d_inner ); 6ml .get_key (LLM_KV_SSM_STATE_SIZE ,hparams .ssm_d_state ); 7ml .get_key (LLM_KV_SSM_TIME_STEP_RANK ,hparams .ssm_dt_rank ); 8ml .get_key (LLM_KV_SSM_GROUP_COUNT ,hparams .ssm_n_group ); 9 10ml .get_key (LLM_KV_ATTENTION_LAYERNORM_RMS_EPS ,hparams .f_norm_rms_eps ); 11 12switch (hparams .n_layer ()) { 13case 24 : 14switch (hparams .n_embd ) { 15case 768 :type = LLM_TYPE_SMALL ;break ; 16default :type = LLM_TYPE_UNKNOWN ; 17 }break ; 18case 48 : 19switch (hparams .n_embd ) { 20case 1024 :type = LLM_TYPE_MEDIUM ;break ; 21case 1536 :type = LLM_TYPE_LARGE ;break ; 22case 2048 :type = LLM_TYPE_XL ;break ; 23default :type = LLM_TYPE_UNKNOWN ; 24 }break ; 25case 64 : 26switch (hparams .n_embd ) { 27case 2560 :type = LLM_TYPE_3B ;break ; 28case 4096 :type = LLM_TYPE_7B ;break ; 29default :type = LLM_TYPE_UNKNOWN ; 30 }break ; 31default :type = LLM_TYPE_UNKNOWN ; 32 } 33} 34 35void llama_model_mamba2::load_arch_tensors (llama_model_loader & ) { 36LLAMA_LOAD_LOCALS ; 37 38const int64_t d_conv = hparams .ssm_d_conv ; 39const int64_t d_inner = hparams .ssm_d_inner ; 40const int64_t d_state = hparams .ssm_d_state ; 41const int64_t n_group = hparams .ssm_n_group ; 42const int64_t dt_rank = hparams .ssm_dt_rank ; 43 44const int64_t conv_dim = d_inner + 2 * n_group * d_state ; 45const int64_t d_in_proj = d_inner + conv_dim + dt_rank ; 46 47 48tok_embd = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },0 ); 49 50// output 51 { 52output_norm = create_tensor (tn (LLM_TENSOR_OUTPUT_NORM ,"weight" ), {n_embd },0 ); 53 54output = create_tensor (tn (LLM_TENSOR_OUTPUT ,"weight" ), {n_embd ,n_vocab },TENSOR_NOT_REQUIRED ); 55// if output is NULL, init from the input tok embed, duplicated to allow offloading 56if (output == NULL ) { 57output = create_tensor (tn (LLM_TENSOR_TOKEN_EMBD ,"weight" ), {n_embd ,n_vocab },TENSOR_DUPLICATED ); 58 } 59 } 60 61for (int i = 0 ;i < n_layer ;++ i ) { 62auto & layer = layers [i ]; 63 64// norm 65layer .attn_norm = create_tensor (tn (LLM_TENSOR_ATTN_NORM ,"weight" ,i ), {n_embd },0 ); 66 67layer .ssm_in = create_tensor (tn (LLM_TENSOR_SSM_IN ,"weight" ,i ), {n_embd ,d_in_proj },0 ); 68 69layer .ssm_conv1d = create_tensor (tn (LLM_TENSOR_SSM_CONV1D ,"weight" ,i ), {d_conv ,d_inner + 2 * n_group * d_state },0 ); 70layer .ssm_conv1d_b = create_tensor (tn (LLM_TENSOR_SSM_CONV1D ,"bias" ,i ), {d_inner + 2 * n_group * d_state },0 ); 71 72layer .ssm_dt_b = create_tensor (tn (LLM_TENSOR_SSM_DT ,"bias" ,i ), {dt_rank },0 ); 73 74// no "weight" suffix for these 75layer .ssm_a = create_tensor (tn (LLM_TENSOR_SSM_A ,i ), {1 ,dt_rank },0 ); 76layer .ssm_d = create_tensor (tn (LLM_TENSOR_SSM_D ,i ), {1 ,dt_rank },0 ); 77 78layer .ssm_norm = create_tensor (tn (LLM_TENSOR_SSM_NORM ,"weight" ,i ), {d_inner /n_group ,n_group },0 ); 79 80// out_proj 81layer .ssm_out = create_tensor (tn (LLM_TENSOR_SSM_OUT ,"weight" ,i ), {d_inner ,n_embd },0 ); 82 } 83} 84 85std::unique_ptr < llm_graph_context > llama_model_mamba2::build_arch_graph (const llm_graph_params & params )const { 86return std::make_unique < graph > (* this ,params ); 87} 88