char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
fa88ae936
char/aliceai-t5-moe
1from __future__import annotations 2 3import re 4 5from typing import Iterable ,TYPE_CHECKING 6 7import torch 8 9if TYPE_CHECKING : 10from torch import Tensor 11 12from .base import ModelBase ,TextModel ,gguf ,logger 13 14 15@ ModelBase . register ( "BloomForCausalLM" , "BloomModel" ) 16@ ModelBase . example ( "bigscience/bloom-560m" ) 17class BloomModel (TextModel ): 18model_arch = gguf .MODEL_ARCH .BLOOM 19 20def set_gguf_parameters (self ): 21n_embed = self .hparams .get ("hidden_size" ,self .hparams .get ("n_embed" )) 22n_head = self .hparams .get ("n_head" ,self .hparams .get ("num_attention_heads" )) 23assert n_head is not None 24assert n_embed is not None 25self .gguf_writer .add_context_length (self .hparams .get ("seq_length" ,n_embed )) 26self .gguf_writer .add_embedding_length (n_embed ) 27self .gguf_writer .add_feed_forward_length (4 * n_embed ) 28self .gguf_writer .add_block_count (self .block_count ) 29self .gguf_writer .add_head_count (n_head ) 30self .gguf_writer .add_head_count_kv (n_head ) 31self .gguf_writer .add_layer_norm_eps (self .hparams ["layer_norm_epsilon" ]) 32self .gguf_writer .add_file_type (self .ftype ) 33 34def modify_tensors (self ,data_torch :Tensor ,name :str ,bid :int | None )-> Iterable [tuple [str ,Tensor ]]: 35n_head = self .hparams .get ("n_head" ,self .hparams .get ("num_attention_heads" )) 36n_embed = self .hparams .get ("hidden_size" ,self .hparams .get ("n_embed" )) 37assert n_head is not None 38assert n_embed is not None 39 40name = re .sub (r'transformer\.' ,'' ,name ) 41 42if re .match (r"h\.\d+\.self_attention\.query_key_value\.weight" ,name ): 43# Map bloom-style qkv_linear to gpt-style qkv_linear 44# bloom: https://github.com/huggingface/transformers/blob/main/src/transformers/models/bloom/modeling_bloom.py#L238-L252 # noqa 45# gpt-2: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt2/modeling_gpt2.py#L312 # noqa 46qkv_weights = data_torch .reshape ((n_head ,3 ,n_embed // n_head ,n_embed )) 47data_torch = torch .cat ( 48 ( 49qkv_weights [:,0 , :, :].reshape ((- 1 ,n_embed )), 50qkv_weights [:,1 , :, :].reshape ((- 1 ,n_embed )), 51qkv_weights [:,2 , :, :].reshape ((- 1 ,n_embed )), 52 ), 53dim = 0 , 54 ) 55logger .info ("re-format attention.linear_qkv.weight" ) 56elif re .match (r"h\.\d+\.self_attention\.query_key_value\.bias" ,name ): 57qkv_bias = data_torch .reshape ((n_head ,3 ,n_embed // n_head )) 58data_torch = torch .cat ( 59 ( 60qkv_bias [:,0 , :].reshape ((n_embed ,)), 61qkv_bias [:,1 , :].reshape ((n_embed ,)), 62qkv_bias [:,2 , :].reshape ((n_embed ,)), 63 ), 64dim = 0 , 65 ) 66logger .info ("re-format attention.linear_qkv.bias" ) 67 68yield from super ().modify_tensors (data_torch ,name ,bid )