[ROCm] Remove MRV1 model exceptions (#56360)

Signed-off-by: Nick Hill <nickhill123@gmail.com>
This commit is contained in:
Nick Hill
2026-10-10 05:09:19 +00:00
committed by GitHub
parent 8ea646b827
commit 7d0b4e57aa
2 changed files with 2 additions and 95 deletions
+2 -65
View File
@@ -651,21 +651,14 @@ def test_no_hisparse_connector_keeps_attention_config_unset(monkeypatch):
def test_rocm_keeps_compiled_deepseek_defaults(monkeypatch):
"""ROCm keeps the DSA models (DeepSeek V3.2/V4, GLM-5.2) on their compiled
MRV1 paths and off breakable cudagraphs by default."""
from vllm.config.vllm import (
ROCM_DEFAULT_MRV1_ARCHITECTURES,
default_breakable_cudagraph_architectures,
)
paths and off breakable cudagraphs by default."""
from vllm.config.vllm import default_breakable_cudagraph_architectures
from vllm.platforms import current_platform
monkeypatch.setattr(current_platform, "is_rocm", lambda: True)
# The lookup is lru_cached against a fixed platform.
default_breakable_cudagraph_architectures.cache_clear()
try:
assert "DeepseekV32ForCausalLM" in ROCM_DEFAULT_MRV1_ARCHITECTURES
assert "DeepseekV4ForCausalLM" in ROCM_DEFAULT_MRV1_ARCHITECTURES
assert "GlmMoeDsaForCausalLM" in ROCM_DEFAULT_MRV1_ARCHITECTURES
breakable_architectures = default_breakable_cudagraph_architectures()
assert "DeepseekV32ForCausalLM" not in breakable_architectures
assert "DeepseekV32MTPModel" not in breakable_architectures
@@ -674,66 +667,10 @@ def test_rocm_keeps_compiled_deepseek_defaults(monkeypatch):
# supports uniform-batch CUDA graphs, so it must opt in or the
# default FULL_AND_PIECEWISE serve path cannot start.
assert "DeepseekV41ForCausalLM" in breakable_architectures
# The carve-out takes effect via the runner-selection property
# (warning_once args must be hashable for its lru_cache).
monkeypatch.delenv("VLLM_USE_V2_MODEL_RUNNER", raising=False)
config = SimpleNamespace(
model_config=SimpleNamespace(architectures=["DeepseekV32ForCausalLM"]),
attention_config=AttentionConfig(),
)
config._get_v1_model_runner_unsupported_features = lambda: []
assert VllmConfig.use_v2_model_runner.fget(config) is False
finally:
default_breakable_cudagraph_architectures.cache_clear()
def test_rocm_mrv1_default_yields_to_v1_unsupported_config(monkeypatch):
"""The ROCm V1 default is a speed preference, not a capability claim.
DSpark runs only on V2, so pinning DeepSeek V4 to V1 would fail config
validation instead of serving it. With nothing V1 refuses, it still holds.
"""
from vllm.platforms import current_platform
monkeypatch.setattr(current_platform, "is_rocm", lambda: True)
monkeypatch.setattr(vllm_config_module, "HAS_TRITON", True)
monkeypatch.delenv("VLLM_USE_V2_MODEL_RUNNER", raising=False)
config = SimpleNamespace(
model_config=SimpleNamespace(
architectures=["DeepseekV4ForCausalLM"], is_diffusion=False
),
attention_config=AttentionConfig(),
parallel_config=SimpleNamespace(
prefill_context_parallel_size=1,
pipeline_parallel_size=1,
enable_batch_sharded_sampling=False,
),
scheduler_config=SimpleNamespace(async_scheduling=False),
speculative_config=None,
)
config._dflash_needs_multi_kv_group = lambda: False
config._is_dflash_candidate_draft = lambda: False
config._get_v2_model_runner_unsupported_features = lambda: []
# The real predicate, so the test also pins where dspark lands in it.
config._get_v1_model_runner_unsupported_features = lambda: (
VllmConfig._get_v1_model_runner_unsupported_features(config)
)
assert VllmConfig.use_v2_model_runner.fget(config) is False
config.speculative_config = SimpleNamespace(
method="dspark", enable_adaptive_verification=False
)
assert VllmConfig.use_v2_model_runner.fget(config) is True
# Yielding is not the same as selecting V2: the later checks still run, so
# a config neither runner can serve lands on V1 and fails validation there.
config._get_v2_model_runner_unsupported_features = lambda: ["sequence parallelism"]
assert VllmConfig.use_v2_model_runner.fget(config) is False
@pytest.mark.parametrize(
("model", "architecture"),
[
-30
View File
@@ -71,12 +71,6 @@ else:
logger = init_logger(__name__)
# TODO(rocm): These models are either unsupported by MRV2 or slower with
# MRV2 on AMD GPUs.
ROCM_DEFAULT_MRV1_ARCHITECTURES = frozenset(
{"DeepseekV32ForCausalLM", "DeepseekV4ForCausalLM", "GlmMoeDsaForCausalLM"}
)
DEFAULT_BREAKABLE_CUDAGRAPH_ARCHITECTURES = frozenset(
{
"DeepseekV32MTPModel",
@@ -727,30 +721,6 @@ class VllmConfig:
if use_v2_model_runner is not None:
return use_v2_model_runner
from vllm.platforms import current_platform
model_config = self.model_config
if model_config is not None and current_platform.is_rocm():
architectures = getattr(model_config, "architectures", ())
if any(arch in ROCM_DEFAULT_MRV1_ARCHITECTURES for arch in architectures):
# This default is a speed preference, not a claim that V1 can
# serve the config, so it yields where V1 cannot. It yields by
# falling through to the checks below, not by selecting V2.
v1_unsupported = self._get_v1_model_runner_unsupported_features()
if not v1_unsupported:
logger.warning_once(
"Defaulting to V1 model runner on ROCm for model "
"architectures: %s",
", ".join(architectures),
)
return False
logger.warning_once(
"Skipping the ROCm V1 model runner default for %s: V1 does "
"not support %s.",
", ".join(architectures),
", ".join(v1_unsupported),
)
if not HAS_TRITON:
logger.warning_once(
"Model Runner V2 requires Triton; using the V1 model runner instead."