[Core] Retain structured configs through runtime startup (#6849)
Signed-off-by: maithilijoshi20 <97733343+maithilijoshi20@users.noreply.github.com>
This commit is contained in:
1 parent
becfefd440
commit
f1a6e7ce2a
49 files changed
+1856
-331
No files matched your search
@@ -7,10 +7,12 @@ from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from types import SimpleNamespace
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
from pytest_mock import MockerFixture
|
||||
|
||||
from vllm_omni.config.omni_config import VllmOmniDiffusionStageConfig
|
||||
from vllm_omni.config.resolver import OmniConfigResolution
|
||||
from vllm_omni.entrypoints.cli.serve import (
|
||||
OmniServeCommand,
|
||||
@@ -334,6 +336,26 @@ def test_parse_stage_overrides_invalid_json_raises() -> None:
|
||||
assert f"Got: {bad!r}" in message
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"payload",
|
||||
['{"abc": {}}', '{"-1": {}}', '{"1.5": {}}', '{"\uff10": {}}'],
|
||||
)
|
||||
def test_parse_stage_overrides_rejects_invalid_stage_ids(payload: str) -> None:
|
||||
with pytest.raises(argparse.ArgumentTypeError, match="non-negative integer stage ids"):
|
||||
_parse_stage_overrides(payload)
|
||||
|
||||
|
||||
def test_parse_stage_overrides_preserves_arbitrary_override_fields() -> None:
|
||||
parsed = _parse_stage_overrides(
|
||||
'{"0": {"extras": {"ltx2_use_conv_vae": true}, "kv_cache_dtype": "fp8", "typo_field_xyz": 1}}'
|
||||
)
|
||||
assert parsed["0"] == {
|
||||
"extras": {"ltx2_use_conv_vae": True},
|
||||
"kv_cache_dtype": "fp8",
|
||||
"typo_field_xyz": 1,
|
||||
}
|
||||
|
||||
|
||||
def test_parse_stage_overrides_rejects_non_dict_top_level() -> None:
|
||||
"""Top-level must be a JSON object (dict). A list, scalar, or non-dict
|
||||
mapping is rejected with a ValueError naming ``--stage-overrides`` and
|
||||
@@ -706,6 +728,77 @@ def test_run_headless_diffusion_registers_and_spawns_proc(mocker: MockerFixture)
|
||||
assert manager_kwargs["omni_replica_id"] == 0
|
||||
|
||||
|
||||
def test_run_headless_generic_diffusion_launches_structured_stage(mocker: MockerFixture) -> None:
|
||||
"""Headless resolution starts the typed stage through the real group launcher."""
|
||||
from vllm_omni.engine import stage_engine_startup as startup_module
|
||||
|
||||
mocker.patch("vllm_omni.config.resolver.StageConfigFactory.create_from_model", return_value=None)
|
||||
mocker.patch(
|
||||
"vllm_omni.config.resolver._resolve_generic_diffusion_model_class",
|
||||
return_value=(True, "FakeDiffusionPipeline"),
|
||||
)
|
||||
mocker.patch("vllm_omni.engine.stage_init_utils.prepare_engine_environment")
|
||||
mocker.patch.object(startup_module.stage_init_utils, "load_omni_transfer_config_for_model", return_value=None)
|
||||
mocker.patch.object(
|
||||
startup_module.initialization,
|
||||
"resolve_omni_kv_config_for_stage",
|
||||
return_value=(None, None, None),
|
||||
)
|
||||
captured: dict[str, Any] = {}
|
||||
od_config = SimpleNamespace()
|
||||
|
||||
def _build_diffusion_config(model, stage_config, metadata):
|
||||
captured.update(model=model, stage_config=stage_config, metadata=metadata)
|
||||
return od_config
|
||||
|
||||
def _launch_replica_group(**kwargs):
|
||||
captured.update(group_kwargs=kwargs)
|
||||
captured["manager"] = kwargs["launch_one"](0)
|
||||
|
||||
def _launch_replica(**kwargs):
|
||||
captured.update(replica_kwargs=kwargs)
|
||||
return SimpleNamespace(exitcode=None)
|
||||
|
||||
mocker.patch.object(startup_module.stage_init_utils, "build_diffusion_config", side_effect=_build_diffusion_config)
|
||||
mocker.patch.object(startup_module, "launch_headless_replica_group", side_effect=_launch_replica_group)
|
||||
mocker.patch.object(startup_module, "launch_headless_diffusion_replica", side_effect=_launch_replica)
|
||||
|
||||
explicit_keys = frozenset(
|
||||
{
|
||||
"model",
|
||||
"stage_id",
|
||||
"omni_master_address",
|
||||
"omni_master_port",
|
||||
"worker_backend",
|
||||
"model_class_name",
|
||||
"num_gpus",
|
||||
}
|
||||
)
|
||||
args = _make_headless_args(
|
||||
explicit_keys=explicit_keys,
|
||||
model="generic-diffusion",
|
||||
model_class_name="FakeDiffusionPipeline",
|
||||
num_gpus=1,
|
||||
)
|
||||
|
||||
run_headless(args)
|
||||
|
||||
stage = captured["stage_config"]
|
||||
assert isinstance(stage, VllmOmniDiffusionStageConfig)
|
||||
assert captured["metadata"].stage_type == "diffusion"
|
||||
assert captured["metadata"].model_stage == "diffusion"
|
||||
assert captured["model"] == "generic-diffusion"
|
||||
assert captured["group_kwargs"]["stage_id"] == 0
|
||||
assert captured["group_kwargs"]["omni_dp_size_local"] == 1
|
||||
assert captured["group_kwargs"]["per_replica_devices"] == ["0"]
|
||||
assert captured["replica_kwargs"]["stage_config"] is stage
|
||||
assert captured["replica_kwargs"]["stage_id"] == 0
|
||||
assert captured["replica_kwargs"]["omni_master_address"] == "127.0.0.1"
|
||||
assert captured["replica_kwargs"]["omni_master_port"] == 26000
|
||||
assert captured["replica_kwargs"]["od_config"] is od_config
|
||||
assert stage.runtime_config.devices == "0"
|
||||
|
||||
|
||||
def test_run_headless_diffusion_raises_on_nonzero_proc_exit(mocker: MockerFixture) -> None:
|
||||
"""A diffusion replica that exits with a non-zero code must surface as a
|
||||
RuntimeError from ``run_headless`` (the head needs the signal to roll
|
||||
|
||||
Reference in new issue
Block a user