A high-throughput and memory-efficient inference and serving engine for LLMs
[Model Runner v2] Migration from v1 to v2, with Qwen and DSv2 MOE models [3/N] (#42667)
Signed-off-by: yewentao256 <zhyanwentao@126.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wentao Ye committed
Jun 12, 2026 at 16:44 UTC
78739c1946cfa88fba8ccd4ca7d6c4230f816a3c
2 files changed
+63
-8
tests/test_config.py
+52
-2
@@ -122,8 +122,58 @@ def test_v2_model_runner_env_tri_state(monkeypatch, env_value, expected):
122
),
123
(
124
SimpleNamespace(
125
- model="Qwen/Qwen3-30B-A3B",
126
- architectures=["Qwen3MoeForCausalLM"],
125
+ model="deepseek-ai/DeepSeek-V2-Lite-Chat",
126
+ architectures=["DeepseekV2ForCausalLM"],
127
+ runner_type="generate",
128
+ is_moe=True,
129
+ is_quantized=False,
130
+ ),
131
+ True,
132
+ ),
133
+ (
134
+ SimpleNamespace(
135
+ model="deepseek-ai/DeepSeek-V2-Chat",
136
+ architectures=["DeepseekV2ForCausalLM"],
137
+ runner_type="generate",
138
+ is_moe=True,
139
+ is_quantized=False,
140
+ ),
141
+ True,
142
+ ),
143
+ (
144
+ SimpleNamespace(
145
+ model="Qwen/Qwen1.5-MoE-A2.7B",
146
+ architectures=["Qwen2MoeForCausalLM"],
147
+ runner_type="generate",
148
+ is_moe=True,
149
+ is_quantized=False,
150
+ ),
151
+ True,
152
+ ),
153
+ (
154
+ SimpleNamespace(
155
+ model="Qwen/Qwen1.5-MoE-A2.7B-Chat",
156
+ architectures=["Qwen2MoeForCausalLM"],
157
+ runner_type="generate",
158
+ is_moe=True,
159
+ is_quantized=False,
160
+ ),
161
+ True,
162
+ ),
163
+ (
164
+ SimpleNamespace(
165
+ model="ibm-research/PowerMoE-3b",
166
+ architectures=["GraniteMoeForCausalLM"],
167
+ runner_type="generate",
168
+ is_moe=True,
169
+ is_quantized=False,
170
+ ),
171
+ False,
172
+ ),
173
+ (
174
+ SimpleNamespace(
175
+ model="mistralai/Mixtral-8x7B-Instruct-v0.1",
176
+ architectures=["MixtralForCausalLM"],
177
runner_type="generate",
178
is_moe=True,
179
is_quantized=False,
vllm/config/vllm.py
+11
-6
@@ -67,9 +67,11 @@ logger = init_logger(__name__)
67
68
DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES = frozenset(
69
{
70
+ "Qwen3ForCausalLM",
71
+ "DeepseekV2ForCausalLM",
72
+ "Qwen2MoeForCausalLM",
73
"LlamaForCausalLM",
74
"MistralForCausalLM",
72
- "Qwen3ForCausalLM",
75
}
76
)
77
@@ -559,13 +561,13 @@ class VllmConfig:
561
if model_config.runner_type != "generate":
562
return False
563
562
- architectures = getattr(model_config, "architectures", [])
563
- if not any(
564
- arch in DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES for arch in architectures
565
- ):
564
+ if model_config.is_quantized:
565
return False
566
568
- return not model_config.is_moe and not model_config.is_quantized
567
+ architectures = getattr(model_config, "architectures", [])
568
+ return any(
569
+ arch in DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES for arch in architectures
570
+ )
571
572
@property
573
def needs_dp_coordinator(self) -> bool:
@@ -2020,6 +2022,9 @@ class VllmConfig:
2022
if self.parallel_config.enable_dbo:
2023
unsupported.append("dual batch overlap")
2024
2025
+ if self.parallel_config.enable_elastic_ep:
2026
+ unsupported.append("elastic expert parallelism")
2027
+
2028
if model_config is not None and model_config.enable_return_routed_experts:
2029
# Will be added by https://github.com/vllm-project/vllm/pull/38163
2030
unsupported.append("routed experts capture")