char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
f5c6ae182
char/aliceai-t5-moe
1#include "models.h" 2 3ggml_cgraph * clip_graph_glm4v::build () { 4GGML_ASSERT (model .patch_bias != nullptr ); 5GGML_ASSERT (model .class_embedding == nullptr ); 6 7const int batch_size = 1 ; 8 9norm_type norm_t = NORM_TYPE_RMS ; 10 11ggml_tensor * inp_raw = build_inp_raw (); 12ggml_tensor * inp = ggml_conv_2d (ctx0 ,model .patch_embeddings_0 ,inp_raw ,patch_size ,patch_size ,0 ,0 ,1 ,1 ); 13 14int mrope_sections [4 ]= {d_head /4 ,d_head /4 ,d_head /4 ,d_head /4 }; 15ggml_tensor * positions = ggml_new_tensor_1d (ctx0 ,GGML_TYPE_I32 ,n_patches * 4 ); 16ggml_set_name (positions ,"positions" ); 17ggml_set_input (positions ); 18 19GGML_ASSERT (img .nx () % (patch_size * 2 )== 0 ); 20GGML_ASSERT (img .ny () % (patch_size * 2 )== 0 ); 21 22// second conv dimension 23 { 24auto inp_1 = ggml_conv_2d (ctx0 ,model .patch_embeddings_1 ,inp_raw ,patch_size ,patch_size ,0 ,0 ,1 ,1 ); 25inp = ggml_add (ctx0 ,inp ,inp_1 ); 26 27inp = ggml_permute (ctx0 ,inp ,1 ,2 ,0 ,3 );// [w, h, c, b] -> [c, w, h, b] 28inp = ggml_cont_4d ( 29ctx0 ,inp , 30n_embd * 2 ,n_patches_x /2 ,n_patches_y ,batch_size ); 31inp = ggml_reshape_4d ( 32ctx0 ,inp , 33n_embd * 2 ,n_patches_x /2 ,2 ,batch_size * (n_patches_y /2 )); 34inp = ggml_permute (ctx0 ,inp ,0 ,2 ,1 ,3 ); 35inp = ggml_cont_3d ( 36ctx0 ,inp , 37n_embd ,n_patches_x * n_patches_y ,batch_size ); 38 } 39 40// add patch bias 41inp = ggml_add (ctx0 ,inp ,model .patch_bias ); 42cb (inp ,"patch_bias" ,-1 ); 43 44// pos-conv norm 45inp = build_norm (inp ,model .norm_embd_w ,model .norm_embd_b ,norm_t ,eps ,-1 ); 46 47ggml_tensor * learned_pos_embd = nullptr ; 48// Note: GLM-OCR does not have learned position embeddings 49if (model .position_embeddings != nullptr ) { 50learned_pos_embd = resize_position_embeddings (GGML_SCALE_MODE_BICUBIC ); 51learned_pos_embd = ggml_cont_4d ( 52ctx0 ,learned_pos_embd , 53n_embd * 2 ,n_patches_x /2 ,n_patches_y ,batch_size ); 54learned_pos_embd = ggml_reshape_4d ( 55ctx0 ,learned_pos_embd , 56n_embd * 2 ,n_patches_x /2 ,2 ,batch_size * (n_patches_y /2 )); 57learned_pos_embd = ggml_permute (ctx0 ,learned_pos_embd ,0 ,2 ,1 ,3 ); 58learned_pos_embd = ggml_cont_3d ( 59ctx0 ,learned_pos_embd , 60n_embd ,n_patches_x * n_patches_y ,batch_size ); 61cb (learned_pos_embd ,"learned_pos_embd" ,-1 ); 62 } 63 64auto add_pos = [& ](ggml_tensor * cur ,const clip_layer & ) { 65return ggml_rope_multi ( 66ctx0 ,cur ,positions ,nullptr , 67d_head /2 ,mrope_sections ,GGML_ROPE_TYPE_VISION , 6832768 ,hparams .rope_theta ,1 ,0 ,1 ,32 ,1 ); 69 }; 70 71ggml_tensor * cur = build_vit ( 72inp ,n_patches , 73norm_t , 74hparams .ffn_op , 75learned_pos_embd , 76add_pos ); 77 78cb (cur ,"vit_out" ,-1 ); 79// cb(ggml_sum(ctx0, cur), "vit_out_sum", -1); 80 81// GLM4V projector 82// ref: https://github.com/huggingface/transformers/blob/40dc11cd3eb4126652aa41ef8272525affd4a636/src/transformers/models/glm4v/modeling_glm4v.py#L116-L130 83 84// patch merger (downsample) 85 { 86int n_merge = hparams .n_merge ; 87GGML_ASSERT (n_merge > 0 ); 88 89int n_token_out = n_patches /n_merge /n_merge ; 90cur = ggml_reshape_4d (ctx0 ,cur ,n_embd ,n_merge ,n_merge ,n_token_out ); 91cur = ggml_cont (ctx0 ,ggml_permute (ctx0 ,cur ,2 ,0 ,1 ,3 ));// [n_merge, n_merge, n_embd, n_token_out] 92cur = ggml_conv_2d (ctx0 ,model .mm_patch_merger_w ,cur ,n_merge ,n_merge ,0 ,0 ,1 ,1 ); 93cur = ggml_reshape_2d (ctx0 ,cur ,cur -> ne [2 ],n_token_out );// [n_embd_out, n_token_out] 94 95cur = ggml_add (ctx0 ,cur ,model .mm_patch_merger_b ); 96 } 97 98// FC projector 99 { 100cur = build_mm (model .mm_fc_w ,cur ); 101// default LayerNorm (post_projection_norm) 102cur = build_norm (cur ,model .mm_post_norm_w ,model .mm_post_norm_b ,NORM_TYPE_NORMAL ,1e-5 ,-1 ); 103cur = ggml_gelu_erf (ctx0 ,cur ); 104cb (cur ,"after_fc_proj" ,-1 ); 105 } 106 107// FFN projector 108 { 109cur = build_ffn (cur , 110model .mm_ffn_up_w ,model .mm_ffn_up_b , 111model .mm_ffn_gate_w ,model .mm_ffn_gate_b , 112model .mm_ffn_down_w ,model .mm_ffn_down_b , 113hparams .ffn_op ,-1 ); 114cb (cur ,"after_ffn_proj" ,-1 ); 115// cb(ggml_sum(ctx0, cur), "merged_sum", -1); 116 } 117 118// build the graph 119ggml_build_forward_expand (gf ,cur ); 120 121return gf ; 122}