[Rebase] Rebase to vllm 0.27.0 (#5976)

Signed-off-by: tzhouam <tzhouam@connect.ust.hk>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zhou TaichangandClaude Opus 5 authored and GitHub committed 2026-08-11 15:23:46 +00:00
1 parent 584d78c673
commit 2ce15ab7a0
55 files changed
+1335 -93

No files matched your search

@@ -64,6 +64,7 @@ def test_moe_ep_maps_diffusion_sp_cfg_dp_to_vllm_groups(monkeypatch):
local_rank,
backend,
group_name,
use_all2all=False,
):
del backend
group = _FakeGroup(
@@ -73,6 +74,7 @@ def test_moe_ep_maps_diffusion_sp_cfg_dp_to_vllm_groups(monkeypatch):
device_communicator=object(),
reduce_scatter=lambda tensor, **kwargs: tensor,
)
group.use_all2all = use_all2all
created_groups.append(group)
return group
@@ -121,6 +123,9 @@ def test_moe_ep_maps_diffusion_sp_cfg_dp_to_vllm_groups(monkeypatch):
assert parallel_state.vllm_parallel_state._PCP.device_communicator is not None
assert parallel_state.vllm_parallel_state._DP.device_communicator is not None
assert parallel_state.vllm_parallel_state._EP.device_communicator is not None
# vLLM 0.27's MoE oracle asserts the EP communicator has an all2all
# manager, which vLLM only builds for groups created with use_all2all.
assert parallel_state.vllm_parallel_state._EP.use_all2all is True
assert hasattr(parallel_state.vllm_parallel_state._PCP, "reduce_scatter")
assert hasattr(parallel_state.vllm_parallel_state._DP, "reduce_scatter")
assert hasattr(parallel_state.vllm_parallel_state._EP, "reduce_scatter")
@@ -313,3 +318,35 @@ def test_non_moe_ep_fails_before_vllm_ep_remap(monkeypatch):
assert parallel_state.vllm_parallel_state._PCP is None
assert parallel_state.vllm_parallel_state._EP is None
assert parallel_state._EXPERT_PARALLEL_GROUP_RANKS is None
@pytest.mark.cpu
@pytest.mark.core_model
def test_init_vllm_group_forwards_use_all2all_only_when_supported(monkeypatch):
"""use_all2all reaches vLLM only on versions whose API accepts it.
vLLM 0.27 builds the EP all2all manager only for groups created with
use_all2all=True (its MoE oracle then asserts the manager exists —
build 2953, HunyuanImage3-DIT accuracy). Older vLLM has no such kwarg,
so forwarding it unconditionally would TypeError at init.
"""
received = {}
def modern(group_ranks, local_rank, backend, group_name=None, use_device_communicator=True, use_all2all=False):
received["modern"] = use_all2all
return object()
monkeypatch.setattr(parallel_state.vllm_parallel_state, "init_model_parallel_group", modern)
parallel_state.init_vllm_model_parallel_group([[0]], 0, "gloo", "ep", use_all2all=True)
assert received["modern"] is True
parallel_state.init_vllm_model_parallel_group([[0]], 0, "gloo", "tp")
assert received["modern"] is False
def legacy(group_ranks, local_rank, backend, group_name=None, use_device_communicator=True):
received["legacy"] = True
return object()
monkeypatch.setattr(parallel_state.vllm_parallel_state, "init_model_parallel_group", legacy)
parallel_state.init_vllm_model_parallel_group([[0]], 0, "gloo", "ep", use_all2all=True)
assert received["legacy"] is True
+3 -3
View File
@@ -110,7 +110,7 @@ class TestFusedMoEFactory:
monkeypatch.setitem(
sys.modules,
"vllm.model_executor.layers.fused_moe",
SimpleNamespace(FusedMoE=mock_vllm_fused_moe),
SimpleNamespace(FusedMoEFactory=mock_vllm_fused_moe),
)
result = fused_moe.FusedMoE(prefix="test", a=1, reduce_results=True)
@@ -139,7 +139,7 @@ class TestFusedMoEFactory:
monkeypatch.setitem(
sys.modules,
"vllm.model_executor.layers.fused_moe",
SimpleNamespace(FusedMoE=mocker.MagicMock(return_value=mock_runner)),
SimpleNamespace(FusedMoEFactory=mocker.MagicMock(return_value=mock_runner)),
)
mocker.patch.object(fused_moe, "current_omni_platform", mocker.MagicMock())
mock_set_num_tokens = mocker.patch.object(fused_moe, "_set_forward_context_num_tokens")
@@ -169,7 +169,7 @@ class TestFusedMoEFactory:
monkeypatch.setitem(
sys.modules,
"vllm.model_executor.layers.fused_moe",
SimpleNamespace(FusedMoE=mocker.MagicMock(return_value=mock_runner)),
SimpleNamespace(FusedMoEFactory=mocker.MagicMock(return_value=mock_runner)),
)
mocker.patch.object(fused_moe, "current_omni_platform", mocker.MagicMock())
mock_set_num_tokens = mocker.patch.object(fused_moe, "_set_forward_context_num_tokens")
@@ -348,3 +348,53 @@ def test_normalize_lingbot_request_model_size_overrides_sampling_dimensions():
num_frames=81,
)
assert (config.height, config.width) == (480, 480)
def test_normalize_lingbot_request_reads_size_from_extra_args():
"""Regression: /v1/videos delivers `extra_params` via sampling.extra_args.
The nightly TI2V case sends `extra_params={"size": "320x192"}` with no
height/width form fields; the size used to be dropped and the video came
out at the 480x480 default (build 2952, LingBot Video MoE Function Test).
"""
config = _normalize(
{
"prompt": "motion",
"modalities": ["video"],
"multi_modal_data": {"image": Image.new("RGB", (320, 192))},
},
num_frames=9,
extra_args={"size": "320x192"},
)
assert config.mode is LingBotGenerationMode.TI2V
assert (config.height, config.width) == (192, 320)
def test_normalize_lingbot_request_extra_args_size_overrides_sampling_dimensions():
config = _normalize(
{"prompt": "motion", "modalities": ["video"]},
width=480,
height=480,
num_frames=81,
extra_args={"size": "320x192"},
)
assert (config.height, config.width) == (192, 320)
def test_normalize_lingbot_request_reads_width_height_from_extra_args():
# Parity with the pre-#5311 pipeline, which honored extra_args height/width.
config = _normalize(
{"prompt": "motion", "modalities": ["video"]},
num_frames=81,
extra_args={"width": 320, "height": 192},
)
assert (config.height, config.width) == (192, 320)
def test_resolve_lingbot_output_dimensions_reads_extra_fields():
assert resolve_lingbot_output_dimensions(extra_fields={"size": "320x192"}) == (320, 192)
assert resolve_lingbot_output_dimensions(
sampling_width=480,
sampling_height=480,
extra_fields={"resolution": "720p", "ratio": "16:9"},
) == (736, 1280)
@@ -515,8 +515,14 @@ def test_quantization_quality(config: QualityTestConfig):
generate_fn = _generate_video if config.task == "t2v" else _generate_image
# Run both arms eager: LPIPS must measure quantization only. With compile
# on, a compiler failure in one arm (e.g. inductor's CantSplit on fp8 FLUX)
# silently drops that arm to eager while the other stays compiled, and the
# metric then includes compile-state differences (fp8_ltx2 rose from ~0.09
# to 0.1291 that way in build 2954). Mirrors
# vllm_omni/quantization/tools/compare_diffusion_trajectory_similarity.py.
# --- BF16 baseline ---
bl_kwargs: dict = {"model": config.baseline_ref()}
bl_kwargs: dict = {"model": config.baseline_ref(), "enforce_eager": True}
if config.enable_cpu_offload:
bl_kwargs["enable_cpu_offload"] = True
omni_bl = Omni(**bl_kwargs)
@@ -528,7 +534,7 @@ def test_quantization_quality(config: QualityTestConfig):
# --- Quantized ---
quantization = config.quantization_ref()
qt_kwargs: dict = {"model": config.quantized_ref()}
qt_kwargs: dict = {"model": config.quantized_ref(), "enforce_eager": True}
if config.enable_cpu_offload:
qt_kwargs["enable_cpu_offload"] = True
if quantization is None:
+34
View File
@@ -74,3 +74,37 @@ def test_regionally_compile_does_not_partially_mutate_on_setup_failure(monkeypat
regionally_compile(model, dynamic=True)
assert [block.forward.__func__ for block in model.transformer_blocks] == original_forwards
def test_compiled_block_preserves_forward_signature_for_inspection(monkeypatch):
"""cache-dit matches blocks via inspect.signature(block.forward).
Whatever regionally_compile installs as the block forward must stay
signature-transparent: parameter names and the return annotation drive
cache-dit's ForwardPattern match (build 2954, Multi-GPU Layered job
failed when a bare *args/**kwargs wrapper hid them; torch.compile's own
wrapper preserves the signature).
"""
import inspect
import torch
class _SignatureBlock(nn.Module):
def forward(self, hidden_states, encoder_hidden_states=None) -> "torch.Tensor":
return hidden_states
class _Model(nn.Module):
_repeated_blocks = ["_SignatureBlock"]
def __init__(self) -> None:
super().__init__()
self.blocks = nn.ModuleList([_SignatureBlock()])
model = _Model()
monkeypatch.setattr(compile_module.torch, "compile", lambda fn, *a, **k: fn)
regionally_compile(model)
sig = inspect.signature(model.blocks[0].forward)
assert set(sig.parameters.keys()) == {"hidden_states", "encoder_hidden_states"}
assert "torch.Tensor" in str(sig.return_annotation)
assert model.blocks[0].forward("x") == "x"
@@ -0,0 +1,83 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Regression tests for the inductor factorable-divisibility patch.
torch 2.13 proves symbolic divisibility with torch's own unevaluated Mod,
so ``15360*s31 + 15360*s87`` is no longer provably divisible by
``s31 + s87`` and inductor raises CantSplit on FLUX's fp8 graph (nightly
builds 2953/2954). The patch adds an exact-polynomial-division proof that
is sound for every symbol assignment; on torch versions whose original
check already proves the case (<= 2.11, via sympy.Mod), the patch
self-extinguishes.
"""
import pytest
import sympy
from torch._inductor.sizevars import SizeVarAllocator
import vllm_omni.patch as patch_module
pytestmark = [pytest.mark.core_model, pytest.mark.cpu, pytest.mark.diffusion]
_S1, _S2 = sympy.symbols("s31 s87", positive=True, integer=True)
@pytest.mark.parametrize(
("numerator", "denominator", "expected"),
[
(15360 * _S1 + 15360 * _S2, _S1 + _S2, True), # the CantSplit expression
(7 * _S1 + 7 * _S2, _S1 + _S2, True),
(_S1 * _S2, _S2, True),
(_S1 * _S2 + _S2, _S2, True), # s2*(s1 + 1)
(3 * _S1, 2 * _S1, False),
(_S1 + 1, _S1, False),
(15360 * _S1 + 15359 * _S2, _S1 + _S2, False),
(sympy.Integer(12), sympy.Integer(4), True),
(sympy.Integer(12), sympy.Integer(5), False),
],
)
def test_provably_factorable_multiple(numerator, denominator, expected):
assert patch_module._provably_factorable_multiple(numerator, denominator) is expected
def test_non_polynomial_atoms_never_reach_cancel():
from torch.utils._sympy.functions import FloorDiv, ModularIndexing
assert patch_module._provably_factorable_multiple(FloorDiv(_S1, 2) * 4, _S1) is False
assert patch_module._provably_factorable_multiple(ModularIndexing(_S1, 1, 8) * _S2, _S2) is False
def test_divisibility_holds_after_patch_regardless_of_torch_version():
"""The end contract on any torch: the CantSplit expression proves divisible.
On torch <= 2.11 the original method proves it (patch self-extinguished);
on torch >= 2.13 the installed wrapper proves it via exact division.
"""
sv = SizeVarAllocator()
method = SizeVarAllocator.statically_known_multiple_of
patched = getattr(method, "_vllm_omni_factorable_divisibility", False)
assert method(sv, 15360 * _S1 + 15360 * _S2, _S1 + _S2) is True
# Negative control must stay non-divisible either way.
assert method(sv, 3 * _S1, 2 * _S1) is False
if patched:
# Wrapper installed: the original alone must have failed the probe.
assert patch_module._provably_factorable_multiple(15360 * _S1 + 15360 * _S2, _S1 + _S2) is True
def test_patch_installs_when_original_cannot_prove(monkeypatch):
"""Simulate torch 2.13's unevaluated-Mod prover: the wrapper must install."""
def weak(self, numerator, denominator):
return False
monkeypatch.setattr(SizeVarAllocator, "statically_known_multiple_of", weak)
patch_module._patch_inductor_factorable_divisibility()
method = SizeVarAllocator.statically_known_multiple_of
assert getattr(method, "_vllm_omni_factorable_divisibility", False) is True
sv = SizeVarAllocator()
assert method(sv, 15360 * _S1 + 15360 * _S2, _S1 + _S2) is True
assert method(sv, 3 * _S1, 2 * _S1) is False
# Idempotency: a second install call must not wrap the wrapper.
patch_module._patch_inductor_factorable_divisibility()
assert SizeVarAllocator.statically_known_multiple_of is method