main
py 103 lines 4.12 KB
Raw
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 )