KoGum-0.5B-16k-mid / configuration_kogum.py
jiwon9703's picture
Upload folder using huggingface_hub
fa8d222 verified
Raw
History Blame Contribute Delete
2.95 kB
"""KoGum model configuration."""
from transformers import PretrainedConfig
class KoGumConfig(PretrainedConfig):
"""Configuration class for KoGum model.
KoGum is a Korean-centric decoder-only transformer model with:
- RMSNorm (Pre-LN architecture)
- Rotary Position Embeddings (RoPE)
- SwiGLU FFN
- Grouped Query Attention (GQA)
- Untied embeddings
Tokenizer: KORMo 125K BPE vocabulary (70% Korean, 30% English)
Special tokens: <|PAD|>=125032, <|BOS|>=125030, <|EOT|>(EOS)=125040
"""
model_type = "kogum"
keys_to_ignore_at_inference = ["past_key_values"]
def __init__(
self,
vocab_size: int = 125041,
hidden_size: int = 1024,
intermediate_size: int = 5120,
num_hidden_layers: int = 24,
num_attention_heads: int = 16,
num_key_value_heads: int = 8,
head_dim: int = 64,
hidden_act: str = "silu",
max_position_embeddings: int = 16384,
initializer_range: float = 0.02,
rms_norm_eps: float = 1e-5,
use_cache: bool = True,
tie_word_embeddings: bool = False,
rope_theta: float = 500000.0,
rope_scaling: dict = None,
attention_bias: bool = False,
attention_dropout: float = 0.0,
mlp_bias: bool = False,
bos_token_id: int = 125030, # <|BOS|>
eos_token_id: int = 125040, # <|EOT|>
pad_token_id: int = 125032, # <|PAD|>
**kwargs,
):
self.vocab_size = vocab_size
self.hidden_size = hidden_size
self.intermediate_size = intermediate_size
self.num_hidden_layers = num_hidden_layers
self.num_attention_heads = num_attention_heads
self.num_key_value_heads = num_key_value_heads
self.head_dim = head_dim
self.hidden_act = hidden_act
self.max_position_embeddings = max_position_embeddings
self.initializer_range = initializer_range
self.rms_norm_eps = rms_norm_eps
self.use_cache = use_cache
self.rope_theta = rope_theta
self.rope_scaling = rope_scaling
self.attention_bias = attention_bias
self.attention_dropout = attention_dropout
self.mlp_bias = mlp_bias
# Validate GQA configuration
if self.num_attention_heads % self.num_key_value_heads != 0:
raise ValueError(
f"num_attention_heads ({self.num_attention_heads}) must be divisible by "
f"num_key_value_heads ({self.num_key_value_heads})"
)
super().__init__(
bos_token_id=bos_token_id,
eos_token_id=eos_token_id,
pad_token_id=pad_token_id,
tie_word_embeddings=tie_word_embeddings,
**kwargs,
)
@property
def num_key_value_groups(self) -> int:
"""Number of query heads per key-value head."""
return self.num_attention_heads // self.num_key_value_heads