# coding=utf-8 # Copyright 2022 EleutherAI and the HuggingFace Inc. team. All rights reserved. # # This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX # and OPT implementations in this library. It has been modified from its # original forms to accommodate minor architectural differences compared # to GPT-NeoX and OPT used by the Meta AI team that trained the model. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Sumi model configuration.""" from huggingface_hub.dataclasses import strict from transformers.configuration_utils import PreTrainedConfig from transformers.modeling_rope_utils import RopeParameters from transformers.utils.type_validators import interval @strict class SumiConfig(PreTrainedConfig): r""" This is the configuration class for [`SumiModel`]. Configuration objects inherit from [`PreTrainedConfig`] and can be used to control the model outputs. Read the documentation from [`PreTrainedConfig`] for more information. Args: vocab_size (`int`, *optional*, defaults to 32000): Vocabulary size of the Sumi model. hidden_size (`int`, *optional*, defaults to 4096): Dimension of the hidden representations. intermediate_size (`int`, *optional*, defaults to 11008): Dimension of the MLP representations. num_hidden_layers (`int`, *optional*, defaults to 32): Number of hidden layers in the Transformer encoder. num_attention_heads (`int`, *optional*, defaults to 32): Number of attention heads for each attention layer in the Transformer encoder. num_key_value_heads (`int`, *optional*): This is the number of key_value heads that should be used to implement Grouped Query Attention. If it is not specified, will default to `num_attention_heads`. hidden_act (`str` or `function`, *optional*, defaults to `"silu"`): The non-linear activation function (function or string) in the encoder. max_position_embeddings (`int`, *optional*, defaults to 2048): The maximum sequence length that this model might ever be used with. initializer_range (`float`, *optional*, defaults to 0.02): The standard deviation of the truncated_normal_initializer for initializing all weight matrices. rms_norm_eps (`float`, *optional*, defaults to 1e-06): The epsilon used by the rms normalization layers. use_cache (`bool`, *optional*, defaults to `False`): Whether or not the model should return the last key/values attentions. Disabled by default because the bidirectional diffusion model recomputes all key/values at every denoising step, so an incremental cache is not meaningful for generation. pad_token_id (`int`, *optional*): Padding token id. bos_token_id (`int`, *optional*, defaults to 1): Beginning of stream token id. eos_token_id (`int`, *optional*, defaults to 2): End of stream token id. pretraining_tp (`int`, *optional*, defaults to 1): Experimental feature. Tensor parallelism rank used during pretraining. tie_word_embeddings (`bool`, *optional*, defaults to `False`): Whether to tie weight embeddings. rope_parameters (`RopeParameters` or `dict`, *optional*): Dictionary containing the RoPE configuration. Holds `rope_theta` and (optionally) a `rope_type` together with its scaling parameters. The legacy `rope_theta` / `rope_scaling` fields found in older checkpoints are automatically migrated into this field by [`PreTrainedConfig`]. attention_bias (`bool`, *optional*, defaults to `False`): Whether to use a bias in the query, key, value and output projection layers during self-attention. attention_dropout (`float`, *optional*, defaults to 0.0): The dropout ratio for the attention probabilities. mlp_bias (`bool`, *optional*, defaults to `False`): Whether to use a bias in up_proj, down_proj and gate_proj layers in the MLP layers. head_dim (`int`, *optional*): The attention head dimension. If None, it will default to hidden_size // num_attention_heads. add_qkv_bias (`bool`, *optional*, defaults to `False`): Whether to use bias terms only in the query, key, and value projection layers. uniform_diffusion_beta_is (`float`, *optional*, defaults to 1.0): Weight of the Itakura-Saito reconstruction term in the uniform-diffusion (GIDD) training loss (`SumiForMaskGeneration.forward` with `labels`). Matches the pretraining value. uniform_diffusion_z_loss_strength (`float`, *optional*, defaults to 1e-5): Coefficient of the auxiliary `logsumexp(logits) ** 2` z-loss added to the uniform-diffusion training loss for logit stability. Matches the pretraining value; set to `0.0` to disable. ```python >>> from transformers import AutoConfig >>> configuration = AutoConfig.from_pretrained("tohoku-nlp/open-uniform-diffusion", trust_remote_code=True) >>> # Accessing the model configuration >>> configuration = model.config ```""" model_type = "sumi" keys_to_ignore_at_inference = ["past_key_values"] # Default tensor parallel plan for base model `SumiModel` base_model_tp_plan = { "layers.*.self_attn.q_proj": "colwise", "layers.*.self_attn.k_proj": "colwise", "layers.*.self_attn.v_proj": "colwise", "layers.*.self_attn.o_proj": "rowwise", "layers.*.mlp.gate_proj": "colwise", "layers.*.mlp.up_proj": "colwise", "layers.*.mlp.down_proj": "rowwise", } base_model_pp_plan = { "embed_tokens": (["input_ids"], ["inputs_embeds"]), "layers": (["hidden_states", "attention_mask"], ["hidden_states"]), "norm": (["hidden_states"], ["hidden_states"]), } vocab_size: int = 32000 hidden_size: int = 4096 intermediate_size: int = 11008 num_hidden_layers: int = 32 num_attention_heads: int = 32 num_key_value_heads: int | None = None hidden_act: str = "silu" max_position_embeddings: int = 2048 initializer_range: float = interval(min=0.0, max=1.0)(default=0.02) rms_norm_eps: float = 1e-6 use_cache: bool = False pad_token_id: int | None = None bos_token_id: int | None = 1 eos_token_id: int | list[int] | None = 2 pretraining_tp: int | None = 1 tie_word_embeddings: bool = False rope_parameters: RopeParameters | dict | None = None attention_bias: bool = False attention_dropout: int | float | None = 0.0 mlp_bias: bool = False head_dim: int | None = None add_qkv_bias: bool = False uniform_diffusion_beta_is: float = 1.0 uniform_diffusion_z_loss_strength: float = 1e-5 def __post_init__(self, **kwargs): if self.head_dim is None: self.head_dim = self.hidden_size // self.num_attention_heads if self.num_key_value_heads is None: self.num_key_value_heads = self.num_attention_heads super().__post_init__(**kwargs) def validate_architecture(self): """Part of `@strict`-powered validation. Validates the architecture of the config.""" if self.hidden_size % self.num_attention_heads != 0: raise ValueError( f"The hidden size ({self.hidden_size}) is not a multiple of the number of attention " f"heads ({self.num_attention_heads})." ) __all__ = ["SumiConfig"]