@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 43ecd0a900
Fork 0

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