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 ( "GPTNeoXForCausalLM" ) 16@ ModelBase . example ( "EleutherAI/pythia-70m" ) 17class GPTNeoXModel (TextModel ): 18model_arch = gguf .MODEL_ARCH .GPTNEOX 19 20def set_gguf_parameters (self ): 21self .gguf_writer .add_context_length (self .hparams ["max_position_embeddings" ]) 22self .gguf_writer .add_embedding_length (self .hparams ["hidden_size" ]) 23self .gguf_writer .add_block_count (self .block_count ) 24self .gguf_writer .add_feed_forward_length (self .hparams ["intermediate_size" ]) 25self .gguf_writer .add_rope_dimension_count ( 26int (self .hparams ["rotary_pct" ]* (self .hparams ["hidden_size" ]// self .hparams ["num_attention_heads" ])), 27 ) 28self .gguf_writer .add_head_count (self .hparams ["num_attention_heads" ]) 29self .gguf_writer .add_parallel_residual (self .hparams .get ("use_parallel_residual" ,True )) 30self .gguf_writer .add_layer_norm_eps (self .hparams ["layer_norm_eps" ]) 31 32def modify_tensors (self ,data_torch :Tensor ,name :str ,bid :int | None )-> Iterable [tuple [str ,Tensor ]]: 33n_head = self .hparams .get ("n_head" ,self .hparams .get ("num_attention_heads" )) 34n_embed = self .hparams .get ("hidden_size" ,self .hparams .get ("n_embed" )) 35assert n_head is not None 36assert n_embed is not None 37 38if re .match (r"gpt_neox\.layers\.\d+\.attention\.query_key_value\.weight" ,name ): 39# Map bloom-style qkv_linear to gpt-style qkv_linear 40# bloom: https://github.com/huggingface/transformers/blob/main/src/transformers/models/bloom/modeling_bloom.py#L238-L252 # noqa 41# gpt-2: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt2/modeling_gpt2.py#L312 # noqa 42qkv_weights = data_torch .reshape ((n_head ,3 ,n_embed // n_head ,n_embed )) 43data_torch = torch .cat ( 44 ( 45qkv_weights [:,0 , :, :].reshape ((- 1 ,n_embed )), 46qkv_weights [:,1 , :, :].reshape ((- 1 ,n_embed )), 47qkv_weights [:,2 , :, :].reshape ((- 1 ,n_embed )), 48 ), 49dim = 0 , 50 ) 51logger .info ("re-format attention.linear_qkv.weight" ) 52elif re .match (r"gpt_neox\.layers\.\d+\.attention\.query_key_value\.bias" ,name ): 53qkv_bias = data_torch .reshape ((n_head ,3 ,n_embed // n_head )) 54data_torch = torch .cat ( 55 ( 56qkv_bias [:,0 , :].reshape ((n_embed ,)), 57qkv_bias [:,1 , :].reshape ((n_embed ,)), 58qkv_bias [:,2 , :].reshape ((n_embed ,)), 59 ), 60dim = 0 , 61 ) 62logger .info ("re-format attention.linear_qkv.bias" ) 63 64yield from super ().modify_tensors (data_torch ,name ,bid )