sarvam-105b / configuration_sarvam_moe.py
chinmaykumar-vyas's picture rahular's picture
Duplicate from sarvamai/sarvam-105b
b29a6e1
Raw History Blame Contribute Delete
5.43 kB
from transformers.configuration_utils import PretrainedConfig
class SarvamMLAConfig(PretrainedConfig):
model_type = "sarvam_mla"
base_model_pp_plan = {
"embed_tokens": (["input_ids"], ["inputs_embeds"]),
"layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_tp_plan = {
"layers.*.self_attn.q_proj": "colwise",
"layers.*.self_attn.kv_b_proj": "colwise",
"layers.*.self_attn.o_proj": "rowwise",
}
def __init__(
self,
vocab_size: int = 262144,
hidden_size: int = 4096,
num_hidden_layers: int = 32,
intermediate_size: int = 16384,
moe_intermediate_size: int = 2048,
num_experts: int = 128,
num_experts_per_tok: int = 8,
num_shared_experts: int = 1,
first_k_dense_replace: int = 1,
num_attention_heads: int = 64,
qk_rope_head_dim: int = 64,
qk_nope_head_dim: int = 128,
kv_lora_rank: int = 512,
v_head_dim: int = 128,
max_position_embeddings: int = 4096,
rope_theta: float = 10000.0,
rope_scaling: dict = None,
attention_dropout: float = 0.0,
output_dropout: float = 0.0,
rms_norm_eps: float = 1e-6,
hidden_act: str = "silu",
use_cache: bool = True,
use_qk_norm: bool = True,
moe_router_enable_expert_bias: bool = True,
routed_scaling_factor: float = 2.5,
output_router_logits: bool = False,
tie_word_embeddings: bool = False,
pad_token_id: int = 0,
eos_token_id: int = 1,
embedding_dropout: float = 0.0,
initializer_range: float = 0.006,
attn_implementation: str = "eager",
**kwargs,
):
# core geometry
self.vocab_size = vocab_size
self.hidden_size = hidden_size
self.num_hidden_layers = num_hidden_layers
self.intermediate_size = intermediate_size
self.num_attention_heads = num_attention_heads
self.max_position_embeddings = max_position_embeddings
# MLA geometry
self.qk_rope_head_dim = qk_rope_head_dim
self.qk_nope_head_dim = qk_nope_head_dim
self.kv_lora_rank = kv_lora_rank
self.v_head_dim = v_head_dim
# convenient derived dim
self.q_head_dim = qk_rope_head_dim + qk_nope_head_dim
# vLLM MLA expects "head size" = Lkv + R, not hidden_size/num_heads.
self.head_dim = int(self.kv_lora_rank + self.qk_rope_head_dim)
# MoE
self.moe_intermediate_size = moe_intermediate_size
self.num_experts = num_experts
self.num_experts_per_tok = num_experts_per_tok
self.num_shared_experts = num_shared_experts
self.first_k_dense_replace = first_k_dense_replace
# Router
self.moe_router_enable_expert_bias = moe_router_enable_expert_bias
self.routed_scaling_factor = routed_scaling_factor
self.output_router_logits = output_router_logits
# dropouts / norms / init
self.attention_dropout = attention_dropout
self.output_dropout = output_dropout
self.embedding_dropout = embedding_dropout
self.rms_norm_eps = rms_norm_eps
self.initializer_range = initializer_range
self.hidden_act = hidden_act
# rope / cache
self.rope_theta = rope_theta
self.use_cache = use_cache
self.use_qk_norm = use_qk_norm
self.rope_scaling = rope_scaling
self.default_theta = 10000.0
if self.rope_scaling is None:
self.rope_scaling = {
'beta_fast': 32,
'beta_slow': 1,
'factor': 40,
'mscale': 1.0,
'mscale_all_dim': 1.0,
'original_max_position_embeddings': 4096,
'rope_type': 'deepseek_yarn',
}
self.attn_implementation = attn_implementation
self._attn_implementation = attn_implementation
if "_attn_implementation" in kwargs:
self._attn_implementation = kwargs.pop("_attn_implementation")
if hasattr(self, "attn_implementation"):
self.attn_implementation = self._attn_implementation
super().__init__(
pad_token_id=pad_token_id,
eos_token_id=eos_token_id,
tie_word_embeddings=tie_word_embeddings,
**kwargs,
)
def convert_rope_params_to_dict(self, ignore_keys_at_rope_validation: set | None = None, **kwargs):
rope_scaling = kwargs.pop("rope_scaling", None)
self.rope_parameters = rope_scaling or self.rope_parameters
self.rope_parameters = self.rope_parameters if self.rope_parameters is not None else {}
# Standardize and validate the correctness of rotary position embeddings parameters
self.rope_parameters.setdefault("rope_theta", kwargs.pop("rope_theta", self.default_theta))
self.standardize_rope_params()
self.validate_rope(ignore_keys=ignore_keys_at_rope_validation)
# Convert to float because RoPE fn expect a float. Models on the hub were saved as int
for key in ["beta_fast", "beta_slow", "factor"]:
if key in self.rope_parameters:
self.rope_parameters[key] = float(self.rope_parameters[key])
return kwargs