| 1 | # SPDX-License-Identifier: Apache-2.0 |
| 2 | # SPDX-FileCopyrightText: Copyright contributors to the vLLM project |
| 3 | from typing import Any |
| 4 | |
| 5 | from transformers.configuration_utils import PreTrainedConfig |
| 6 | |
| 7 | |
| 8 | class Step3p5Config(PreTrainedConfig): |
| 9 | model_type = "step3p5" |
| 10 | |
| 11 | def __init__( |
| 12 | self, |
| 13 | hidden_size: int = 5120, |
| 14 | intermediate_size: int = 13312, |
| 15 | num_attention_heads: int = 40, |
| 16 | num_attention_groups: int = 8, |
| 17 | num_hidden_layers: int = 48, |
| 18 | max_seq_len: int = 4096, |
| 19 | vocab_size: int = 65536, |
| 20 | rms_norm_eps: float = 1e-5, |
| 21 | moe_every_n_layer: int = 2, |
| 22 | use_moe: bool = False, |
| 23 | moe_intermediate_size: int = 10240, |
| 24 | moe_num_experts: int = 16, |
| 25 | moe_top_k: int = 4, |
| 26 | moe_layer_offset: int = 0, |
| 27 | rope_theta: float | list[float] | None = 500000, |
| 28 | rope_scaling: dict[str, Any] | None = None, |
| 29 | head_dim: int | None = None, |
| 30 | share_expert_dim: int | None = None, |
| 31 | norm_expert_weight: bool = True, |
| 32 | bos_token_id: list[int] | int | None = None, |
| 33 | eos_token_id: list[int] | int | None = None, |
| 34 | moe_router_activation: str = "softmax", |
| 35 | moe_router_scaling_factor: float = 1.0, |
| 36 | att_impl_type: str = "GQA", |
| 37 | use_head_wise_attn_gate: bool = False, |
| 38 | use_moe_router_bias: bool = True, |
| 39 | need_fp32_gate: bool = True, |
| 40 | layer_types: list[str] | None = None, |
| 41 | use_rope_layers: list[bool] | None = None, |
| 42 | yarn_only_types: list[str] | None = None, |
| 43 | attention_other_setting: dict[str, Any] | None = None, |
| 44 | num_nextn_predict_layers: int = 0, |
| 45 | swiglu_limits: list[float] | None = None, |
| 46 | swiglu_limits_shared: list[float] | None = None, |
| 47 | max_position_embeddings: int | None = None, |
| 48 | **kwargs, |
| 49 | ): |
| 50 | self.hidden_size = hidden_size |
| 51 | self.intermediate_size = intermediate_size |
| 52 | self.num_attention_heads = num_attention_heads |
| 53 | self.num_attention_groups = num_attention_groups |
| 54 | self.num_hidden_layers = num_hidden_layers |
| 55 | self.max_seq_len = max_seq_len |
| 56 | self.vocab_size = vocab_size |
| 57 | self.rms_norm_eps = rms_norm_eps |
| 58 | self.use_moe = use_moe |
| 59 | self.moe_intermediate_size = moe_intermediate_size |
| 60 | self.moe_every_n_layer = moe_every_n_layer |
| 61 | self.moe_num_experts = moe_num_experts |
| 62 | self.num_experts_per_tok = moe_top_k |
| 63 | self.moe_top_k = moe_top_k |
| 64 | self.moe_layer_offset = moe_layer_offset |
| 65 | |
| 66 | self.rope_theta = rope_theta |
| 67 | self.rope_scaling = rope_scaling |
| 68 | self.head_dim = head_dim |
| 69 | if share_expert_dim is None: |
| 70 | self.share_expert_dim = self.moe_intermediate_size * self.moe_top_k |
| 71 | else: |
| 72 | self.share_expert_dim = share_expert_dim |
| 73 | self.norm_expert_weight = norm_expert_weight |
| 74 | |
| 75 | self.max_position_embeddings = max_position_embeddings |
| 76 | self.moe_router_activation = moe_router_activation |
| 77 | self.moe_router_scaling_factor = moe_router_scaling_factor |
| 78 | self.use_moe_router_bias = use_moe_router_bias |
| 79 | self.need_fp32_gate = need_fp32_gate |
| 80 | |
| 81 | self.att_impl_type = att_impl_type |
| 82 | self.use_head_wise_attn_gate = use_head_wise_attn_gate |
| 83 | # For some reason the checkpoint has longer layer_types than num_hidden_layers |
| 84 | if layer_types is not None: |
| 85 | layer_types = layer_types[: self.num_hidden_layers] |
| 86 | self.layer_types = layer_types |
| 87 | self.use_rope_layers = use_rope_layers |
| 88 | self.yarn_only_types = yarn_only_types |
| 89 | self.attention_other_setting = attention_other_setting |
| 90 | self.num_nextn_predict_layers = num_nextn_predict_layers |
| 91 | self.swiglu_limits = swiglu_limits |
| 92 | self.swiglu_limits_shared = swiglu_limits_shared |
| 93 | |
| 94 | resolved_bos_token_id = 1 if bos_token_id is None else bos_token_id |
| 95 | resolved_eos_token_id = [2, 3] if eos_token_id is None else eos_token_id |
| 96 | self.bos_token_id = resolved_bos_token_id |
| 97 | self.eos_token_id = resolved_eos_token_id |
| 98 | |
| 99 | super().__init__( |
| 100 | bos_token_id=resolved_bos_token_id, |
| 101 | eos_token_id=resolved_eos_token_id, |
| 102 | **kwargs, |
| 103 | ) |