@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 78739c1946
Fork 0

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")