A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 13, 17:00 UTC
[Chore] Clean up deepseek v2/v3 config copy (#28055)
Signed-off-by: Isotr0py <mozf@mail2.sysu.edu.cn>
Isotr0py committed
Nov 6, 2025 at 11:46 UTC
43ecd0a900e45e0c594bb428f18b8f2b14434391
9 files changed
+15
-222
vllm/model_executor/models/deepseek.py
+2
-1
@@ -292,6 +292,7 @@ class DeepseekDecoderLayer(nn.Module):
292
rope_theta = getattr(config, "rope_theta", 10000)
293
rope_scaling = getattr(config, "rope_scaling", None)
294
max_position_embeddings = getattr(config, "max_position_embeddings", 8192)
295
+ moe_layer_freq = getattr(config, "moe_layer_freq", 1)
296
self.self_attn = DeepseekAttention(
297
hidden_size=self.hidden_size,
298
num_heads=config.num_attention_heads,
@@ -306,7 +307,7 @@ class DeepseekDecoderLayer(nn.Module):
307
if (
308
config.n_routed_experts is not None
309
and layer_idx >= config.first_k_dense_replace
309
- and layer_idx % config.moe_layer_freq == 0
310
+ and layer_idx % moe_layer_freq == 0
311
):
312
self.mlp = DeepseekMoE(
313
config=config, quant_config=quant_config, prefix=f"{prefix}.mlp"
vllm/model_executor/models/deepseek_v2.py
+2
-1
@@ -994,6 +994,7 @@ class DeepseekV2DecoderLayer(nn.Module):
994
rope_theta = getattr(config, "rope_theta", 10000)
995
rope_scaling = getattr(config, "rope_scaling", None)
996
max_position_embeddings = getattr(config, "max_position_embeddings", 8192)
997
+ moe_layer_freq = getattr(config, "moe_layer_freq", 1)
998
# DecoderLayers are created with `make_layers` which passes the prefix
999
# with the layer's index.
1000
layer_idx = int(prefix.split(sep=".")[-1])
@@ -1024,7 +1025,7 @@ class DeepseekV2DecoderLayer(nn.Module):
1025
if (
1026
config.n_routed_experts is not None
1027
and layer_idx >= config.first_k_dense_replace
1027
- and layer_idx % config.moe_layer_freq == 0
1028
+ and layer_idx % moe_layer_freq == 0
1029
):
1030
self.mlp = DeepseekV2MoE(
1031
config=config,
vllm/model_executor/models/kimi_vl.py
+1
-2
@@ -50,7 +50,7 @@ from typing import Annotated, Any, Literal
50
51
import torch
52
from torch import nn
53
-from transformers import BatchFeature
53
+from transformers import BatchFeature, DeepseekV2Config
54
from transformers.activations import GELUActivation
55
56
from vllm.config import VllmConfig
@@ -91,7 +91,6 @@ from vllm.multimodal.processing import (
91
from vllm.multimodal.profiling import BaseDummyInputsBuilder
92
from vllm.sequence import IntermediateTensors
93
from vllm.transformers_utils.configs import KimiVLConfig, MoonViTConfig
94
-from vllm.transformers_utils.configs.deepseek_vl2 import DeepseekV2Config
94
from vllm.utils.tensor_schema import TensorSchema, TensorShape
95
96
from .utils import PPMissingLayer, is_pp_missing_parameter, maybe_prefix
vllm/transformers_utils/config.py
+6
-4
@@ -24,7 +24,7 @@ from huggingface_hub.utils import (
24
RepositoryNotFoundError,
25
RevisionNotFoundError,
26
)
27
-from transformers import GenerationConfig, PretrainedConfig
27
+from transformers import DeepseekV3Config, GenerationConfig, PretrainedConfig
28
from transformers.models.auto.image_processing_auto import get_image_processor_config
29
from transformers.models.auto.modeling_auto import (
30
MODEL_FOR_CAUSAL_LM_MAPPING_NAMES,
@@ -68,16 +68,18 @@ def _get_hf_token() -> str | None:
68
69
class LazyConfigDict(dict):
70
def __getitem__(self, key):
71
+ if isinstance(value := super().__getitem__(key), type):
72
+ return value
73
+
74
import vllm.transformers_utils.configs as configs
75
73
- return getattr(configs, super().__getitem__(key))
76
+ return getattr(configs, value)
77
78
79
_CONFIG_REGISTRY: dict[str, type[PretrainedConfig]] = LazyConfigDict(
80
chatglm="ChatGLMConfig",
81
deepseek_vl_v2="DeepseekVLV2Config",
79
- deepseek_v3="DeepseekV3Config",
80
- deepseek_v32="DeepseekV3Config",
82
+ deepseek_v32=DeepseekV3Config,
83
flex_olmo="FlexOlmoConfig",
84
kimi_linear="KimiLinearConfig",
85
kimi_vl="KimiVLConfig",
vllm/transformers_utils/configs/__init__.py
-2
@@ -8,7 +8,6 @@ Model configs may be defined in this directory for the following reasons:
8
"""
9
10
from vllm.transformers_utils.configs.chatglm import ChatGLMConfig
11
-from vllm.transformers_utils.configs.deepseek_v3 import DeepseekV3Config
11
from vllm.transformers_utils.configs.deepseek_vl2 import DeepseekVLV2Config
12
from vllm.transformers_utils.configs.dotsocr import DotsOCRConfig
13
from vllm.transformers_utils.configs.eagle import EAGLEConfig
@@ -43,7 +42,6 @@ from vllm.transformers_utils.configs.ultravox import UltravoxConfig
42
__all__ = [
43
"ChatGLMConfig",
44
"DeepseekVLV2Config",
46
- "DeepseekV3Config",
45
"DotsOCRConfig",
46
"EAGLEConfig",
47
"FlexOlmoConfig",
vllm/transformers_utils/configs/deepseek_v3.py
deleted
-100
@@ -1,100 +0,0 @@
1
-# SPDX-License-Identifier: Apache-2.0
2
-# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
-from transformers.configuration_utils import PretrainedConfig
4
-from transformers.utils import logging
5
-
6
-logger = logging.get_logger(__name__)
7
-
8
-
9
-class DeepseekV3Config(PretrainedConfig):
10
- model_type = "deepseek_v3"
11
- keys_to_ignore_at_inference = ["past_key_values"]
12
-
13
- def __init__(
14
- self,
15
- vocab_size=129280,
16
- hidden_size=7168,
17
- intermediate_size=18432,
18
- moe_intermediate_size=2048,
19
- num_hidden_layers=61,
20
- num_nextn_predict_layers=1,
21
- num_attention_heads=128,
22
- num_key_value_heads=128,
23
- n_shared_experts=1,
24
- n_routed_experts=256,
25
- ep_size=1,
26
- routed_scaling_factor=2.5,
27
- kv_lora_rank=512,
28
- q_lora_rank=1536,
29
- qk_rope_head_dim=64,
30
- v_head_dim=128,
31
- qk_nope_head_dim=128,
32
- topk_method="noaux_tc",
33
- n_group=8,
34
- topk_group=4,
35
- num_experts_per_tok=8,
36
- moe_layer_freq=1,
37
- first_k_dense_replace=3,
38
- norm_topk_prob=True,
39
- scoring_func="sigmoid",
40
- hidden_act="silu",
41
- max_position_embeddings=4096,
42
- initializer_range=0.02,
43
- rms_norm_eps=1e-6,
44
- use_cache=True,
45
- pad_token_id=None,
46
- bos_token_id=0,
47
- eos_token_id=1,
48
- tie_word_embeddings=False,
49
- rope_theta=10000.0,
50
- rope_scaling=None,
51
- attention_bias=False,
52
- attention_dropout=0.0,
53
- **kwargs,
54
- ):
55
- self.vocab_size = vocab_size
56
- self.max_position_embeddings = max_position_embeddings
57
- self.hidden_size = hidden_size
58
- self.intermediate_size = intermediate_size
59
- self.moe_intermediate_size = moe_intermediate_size
60
- self.num_hidden_layers = num_hidden_layers
61
- self.num_nextn_predict_layers = num_nextn_predict_layers
62
- self.num_attention_heads = num_attention_heads
63
- self.n_shared_experts = n_shared_experts
64
- self.n_routed_experts = n_routed_experts
65
- self.ep_size = ep_size
66
- self.routed_scaling_factor = routed_scaling_factor
67
- self.kv_lora_rank = kv_lora_rank
68
- self.q_lora_rank = q_lora_rank
69
- self.qk_rope_head_dim = qk_rope_head_dim
70
- self.v_head_dim = v_head_dim
71
- self.qk_nope_head_dim = qk_nope_head_dim
72
- self.topk_method = topk_method
73
- self.n_group = n_group
74
- self.topk_group = topk_group
75
- self.num_experts_per_tok = num_experts_per_tok
76
- self.moe_layer_freq = moe_layer_freq
77
- self.first_k_dense_replace = first_k_dense_replace
78
- self.norm_topk_prob = norm_topk_prob
79
- self.scoring_func = scoring_func
80
- # for backward compatibility
81
- if num_key_value_heads is None:
82
- num_key_value_heads = num_attention_heads
83
-
84
- self.num_key_value_heads = num_key_value_heads
85
- self.hidden_act = hidden_act
86
- self.initializer_range = initializer_range
87
- self.rms_norm_eps = rms_norm_eps
88
- self.use_cache = use_cache
89
- self.rope_theta = rope_theta
90
- self.rope_scaling = rope_scaling
91
- self.attention_bias = attention_bias
92
- self.attention_dropout = attention_dropout
93
-
94
- super().__init__(
95
- pad_token_id=pad_token_id,
96
- bos_token_id=bos_token_id,
97
- eos_token_id=eos_token_id,
98
- tie_word_embeddings=tie_word_embeddings,
99
- **kwargs,
100
- )
vllm/transformers_utils/configs/deepseek_vl2.py
+1
-101
@@ -3,7 +3,7 @@
3
4
# adapted from https://github.com/deepseek-ai/DeepSeek-VL2/blob/faf18023f24b962b32d9f0a2d89e402a8d383a78/deepseek_vl2/models/modeling_deepseek_vl_v2.py#L115-L268
5
6
-from transformers.configuration_utils import PretrainedConfig
6
+from transformers import DeepseekV2Config, PretrainedConfig
7
8
9
class VisionEncoderConfig(PretrainedConfig):
@@ -87,106 +87,6 @@ class MlpProjectorConfig(PretrainedConfig):
87
super().__init__(**kwargs)
88
89
90
-class DeepseekV2Config(PretrainedConfig):
91
- model_type = "deepseek_v2"
92
- keys_to_ignore_at_inference = ["past_key_values"]
93
-
94
- def __init__(
95
- self,
96
- vocab_size=102400,
97
- hidden_size=4096,
98
- intermediate_size=11008,
99
- moe_intermediate_size=1407,
100
- num_hidden_layers=30,
101
- num_attention_heads=32,
102
- num_key_value_heads=32,
103
- n_shared_experts=None,
104
- n_routed_experts=None,
105
- ep_size=1,
106
- routed_scaling_factor=1.0,
107
- kv_lora_rank=512,
108
- q_lora_rank=1536,
109
- qk_rope_head_dim=64,
110
- v_head_dim=128,
111
- qk_nope_head_dim=128,
112
- topk_method="gready",
113
- n_group=None,
114
- topk_group=None,
115
- num_experts_per_tok=None,
116
- moe_layer_freq=1,
117
- first_k_dense_replace=0,
118
- norm_topk_prob=False,
119
- scoring_func="softmax",
120
- aux_loss_alpha=0.001,
121
- seq_aux=True,
122
- hidden_act="silu",
123
- max_position_embeddings=2048,
124
- initializer_range=0.02,
125
- rms_norm_eps=1e-6,
126
- use_cache=True,
127
- pad_token_id=None,
128
- bos_token_id=100000,
129
- eos_token_id=100001,
130
- pretraining_tp=1,
131
- tie_word_embeddings=False,
132
- rope_theta=10000.0,
133
- rope_scaling=None,
134
- attention_bias=False,
135
- attention_dropout=0.0,
136
- use_mla=True,
137
- **kwargs,
138
- ):
139
- self.vocab_size = vocab_size
140
- self.max_position_embeddings = max_position_embeddings
141
- self.hidden_size = hidden_size
142
- self.intermediate_size = intermediate_size
143
- self.moe_intermediate_size = moe_intermediate_size
144
- self.num_hidden_layers = num_hidden_layers
145
- self.num_attention_heads = num_attention_heads
146
- self.n_shared_experts = n_shared_experts
147
- self.n_routed_experts = n_routed_experts
148
- self.ep_size = ep_size
149
- self.routed_scaling_factor = routed_scaling_factor
150
- self.kv_lora_rank = kv_lora_rank
151
- self.q_lora_rank = q_lora_rank
152
- self.qk_rope_head_dim = qk_rope_head_dim
153
- self.v_head_dim = v_head_dim
154
- self.qk_nope_head_dim = qk_nope_head_dim
155
- self.topk_method = topk_method
156
- self.n_group = n_group
157
- self.topk_group = topk_group
158
- self.num_experts_per_tok = num_experts_per_tok
159
- self.moe_layer_freq = moe_layer_freq
160
- self.first_k_dense_replace = first_k_dense_replace
161
- self.norm_topk_prob = norm_topk_prob
162
- self.scoring_func = scoring_func
163
- self.aux_loss_alpha = aux_loss_alpha
164
- self.seq_aux = seq_aux
165
- # for backward compatibility
166
- if num_key_value_heads is None:
167
- num_key_value_heads = num_attention_heads
168
-
169
- self.num_key_value_heads = num_key_value_heads
170
- self.hidden_act = hidden_act
171
- self.initializer_range = initializer_range
172
- self.rms_norm_eps = float(rms_norm_eps)
173
- self.pretraining_tp = pretraining_tp
174
- self.use_cache = use_cache
175
- self.rope_theta = rope_theta
176
- self.rope_scaling = rope_scaling
177
- self.attention_bias = attention_bias
178
- self.attention_dropout = attention_dropout
179
- self.use_mla = use_mla
180
-
181
- super().__init__(
182
- pad_token_id=pad_token_id,
183
- bos_token_id=bos_token_id,
184
- eos_token_id=eos_token_id,
185
- tie_word_embeddings=tie_word_embeddings,
186
- **kwargs,
187
- )
188
-
189
-
90
class DeepseekVLV2Config(PretrainedConfig):
91
model_type = "deepseek_vl_v2"
92
vision_config: VisionEncoderConfig
vllm/transformers_utils/configs/eagle.py
+2
-10
@@ -3,9 +3,7 @@
3
4
import os
5
6
-from transformers import AutoConfig, PretrainedConfig
7
-
8
-from vllm.transformers_utils.configs.deepseek_vl2 import DeepseekV2Config
6
+from transformers import AutoConfig, DeepseekV2Config, PretrainedConfig
7
8
9
class EAGLEConfig(PretrainedConfig):
@@ -20,13 +18,7 @@ class EAGLEConfig(PretrainedConfig):
18
):
19
model_config: PretrainedConfig | DeepseekV2Config | None
20
if isinstance(model, dict):
23
- archs = model.get("architectures", [])
24
- target_archs = ["DeepseekV2ForCausalLM", "DeepseekV3ForCausalLM"]
25
- if any(target_arch in archs for target_arch in target_archs):
26
- # AutoConfig does not support DeepSeek MoE models yet
27
- model_config = DeepseekV2Config(**model)
28
- else:
29
- model_config = AutoConfig.for_model(**model)
21
+ model_config = AutoConfig.for_model(**model)
22
else:
23
model_config = model
24
vllm/transformers_utils/configs/kimi_vl.py
+1
-1
@@ -2,9 +2,9 @@
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
# Adapted from https://huggingface.co/moonshotai/Kimi-VL-A3B-Instruct/blob/main/configuration_kimi_vl.py
4
5
+from transformers import DeepseekV2Config
6
from transformers.configuration_utils import PretrainedConfig
7
7
-from vllm.transformers_utils.configs.deepseek_vl2 import DeepseekV2Config
8
from vllm.transformers_utils.configs.moonvit import MoonViTConfig
9
10