diff --git a/tests/test_config.py b/tests/test_config.py index b78570e54fb..918f89beb8f 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -122,8 +122,58 @@ def test_v2_model_runner_env_tri_state(monkeypatch, env_value, expected): ), ( SimpleNamespace( - model="Qwen/Qwen3-30B-A3B", - architectures=["Qwen3MoeForCausalLM"], + model="deepseek-ai/DeepSeek-V2-Lite-Chat", + architectures=["DeepseekV2ForCausalLM"], + runner_type="generate", + is_moe=True, + is_quantized=False, + ), + True, + ), + ( + SimpleNamespace( + model="deepseek-ai/DeepSeek-V2-Chat", + architectures=["DeepseekV2ForCausalLM"], + runner_type="generate", + is_moe=True, + is_quantized=False, + ), + True, + ), + ( + SimpleNamespace( + model="Qwen/Qwen1.5-MoE-A2.7B", + architectures=["Qwen2MoeForCausalLM"], + runner_type="generate", + is_moe=True, + is_quantized=False, + ), + True, + ), + ( + SimpleNamespace( + model="Qwen/Qwen1.5-MoE-A2.7B-Chat", + architectures=["Qwen2MoeForCausalLM"], + runner_type="generate", + is_moe=True, + is_quantized=False, + ), + True, + ), + ( + SimpleNamespace( + model="ibm-research/PowerMoE-3b", + architectures=["GraniteMoeForCausalLM"], + runner_type="generate", + is_moe=True, + is_quantized=False, + ), + False, + ), + ( + SimpleNamespace( + model="mistralai/Mixtral-8x7B-Instruct-v0.1", + architectures=["MixtralForCausalLM"], runner_type="generate", is_moe=True, is_quantized=False, diff --git a/vllm/config/vllm.py b/vllm/config/vllm.py index 890d2b72e31..6122476abb8 100644 --- a/vllm/config/vllm.py +++ b/vllm/config/vllm.py @@ -67,9 +67,11 @@ logger = init_logger(__name__) DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES = frozenset( { + "Qwen3ForCausalLM", + "DeepseekV2ForCausalLM", + "Qwen2MoeForCausalLM", "LlamaForCausalLM", "MistralForCausalLM", - "Qwen3ForCausalLM", } ) @@ -559,13 +561,13 @@ class VllmConfig: if model_config.runner_type != "generate": return False - architectures = getattr(model_config, "architectures", []) - if not any( - arch in DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES for arch in architectures - ): + if model_config.is_quantized: return False - return not model_config.is_moe and not model_config.is_quantized + architectures = getattr(model_config, "architectures", []) + return any( + arch in DEFAULT_V2_MODEL_RUNNER_ARCHITECTURES for arch in architectures + ) @property def needs_dp_coordinator(self) -> bool: @@ -2020,6 +2022,9 @@ class VllmConfig: if self.parallel_config.enable_dbo: unsupported.append("dual batch overlap") + if self.parallel_config.enable_elastic_ep: + unsupported.append("elastic expert parallelism") + if model_config is not None and model_config.enable_return_routed_experts: # Will be added by https://github.com/vllm-project/vllm/pull/38163 unsupported.append("routed experts capture")