Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
fc542ab
[BDE] Add Block Diffusion Engine selection via config field
tzhouam Jun 15, 2026
e78aa21
[BDE] Add engine-level KV cache helpers (adapter, chunk window, pool)
tzhouam Jun 15, 2026
de280b5
[BDE] Test chunk-window eviction plateaus pool memory
tzhouam Jun 15, 2026
fe7600f
[BDE] Add KV slot mapping, orchestrator, and model runner
tzhouam Jun 15, 2026
112a807
[BDE] Wire BDE engine to BDEModelRunner via od_config override
tzhouam Jun 15, 2026
99c9769
[BDE] Add 2-GPU full-chain wiring test
tzhouam Jun 15, 2026
d0cae95
[BDE] Add pool-backed KV write + window gather (Step 4)
tzhouam Jun 15, 2026
233f691
[BDE] Extend full-chain test with pool write+gather on GPU 2,3
tzhouam Jun 15, 2026
8a3ecaf
[BDE] Add BDEKVState pipeline bridge + runner wiring (Step 5)
tzhouam Jun 15, 2026
3e369da
[BDE] Gate DreamZero pipeline KV access through BDEKVState (Step 5)
tzhouam Jun 15, 2026
8dfc740
[BugFix] Fix infinite recursion in _kv_create fallback path
tzhouam Jun 15, 2026
382e375
[BDE] Add debug logging to KV dataflow (pipeline, runner, manager)
tzhouam Jun 15, 2026
7808ea7
[BDE] Use vllm init_logger in manager.py for consistency
tzhouam Jun 15, 2026
bd2d29f
[BDE] Route per-model engines for explicit model_class_name (DreamZero)
tzhouam Jun 16, 2026
db7dabd
[BDE] Add DreamZero KV validation + profiling harness
tzhouam Jun 16, 2026
949535d
[BDE] Enable KV-on for DreamZero (Approach 1: faithful pool-backed wi…
tzhouam Jun 16, 2026
c0ee955
[BDE] Approach 2: true chunk-paged KV (write-new / gather-window), pa…
tzhouam Jun 16, 2026
40e7672
[BDE] Add long-rollout harness for DreamZero KV eviction validation
tzhouam Jun 16, 2026
0e7db62
[BDE] Session-keyed KV state + model-reset handling (Phase 1 P0)
tzhouam Jun 16, 2026
440f977
[BDE] Move cross-attention KV into the engine pool (Phase 1)
tzhouam Jun 17, 2026
9f1f9fe
[BDE] Add BDE-vs-baseline perf/precision harness for DreamZero
tzhouam Jun 18, 2026
609736b
[BDE] Memoize per-forward window gather (remove per-step redundancy)
tzhouam Jun 18, 2026
ee32093
[BDE] Apply pre-commit lint/format fixes
tzhouam Jun 18, 2026
bf11741
[BDE] Phase 1 review fixes, move to experimental/, profiling tooling
tzhouam Jun 19, 2026
522b5e5
[BDE] Address PR #4534 review (project_kv, routing gate, commit_chunk…
tzhouam Jun 20, 2026
01bc417
Merge origin/main into bde-kv-phase1 (resolve DreamZero conflicts)
tzhouam Jun 20, 2026
16e0b6b
[BDE] Fix import order in runner.py (ruff/isort after experimental re…
tzhouam Jun 20, 2026
371db60
[BDE] Cache I2V image-token k_img/v_img in the cross-attn pool
tzhouam Jun 20, 2026
4db8e8b
[BDE] Guard diffusion_model_runner_cls override with isinstance(str)
tzhouam Jun 20, 2026
560ba4f
[BDE] Engine owns 100% of KV; consolidate kv_cache into 4 modules
tzhouam Jun 24, 2026
0191f62
[BDE] Slim PR: drop benchmarks/perf scaffolding (kept local), trim te…
tzhouam Jun 24, 2026
2cb7e65
[BDE] Fix cross-attn KV budget double-count + assert frame-aligned se…
tzhouam Jun 25, 2026
a58d3e6
[BDE] Fix .gitignore negation path for the experimental/bde/kv_cache …
tzhouam Jun 25, 2026
a64befa
[AR-Diffusion] Rename BDE -> AR-Diffusion Engine; DreamZero engine-on…
tzhouam Jun 26, 2026
3dae6d1
[AR-Diffusion] Minimize public-base footprint: config-driven engine s…
tzhouam Jun 26, 2026
cb8467b
[AR-Diffusion] Restore profiling/benchmark scaffolding on a side branch
tzhouam Jun 29, 2026
61d4f3c
[torch-profiler-analyze] Introduce new skill for analyzing PyTorch pr…
tzhouam Jun 29, 2026
0c18e08
[AR-Diffusion] Move CUDA-graph capture off the serving hot path via a…
tzhouam Jun 29, 2026
2abab0f
Fix vae encoder's torch.compile
amy-why-3459 Jun 26, 2026
7dfb21e
[AR-Diffusion][DreamZero] Cache session text embeds; keep VAE stream …
tzhouam Jul 2, 2026
2e713c2
[AR-Diffusion][DreamZero] Keep text cross-attn KV across window restarts
tzhouam Jul 2, 2026
e9d628f
Add AR-Diffusion paged self-attention backend
Acerak01-fy Jul 2, 2026
6776c35
Simplify paged attention slot mapping helpers
Acerak01-fy Jul 3, 2026
e8b5b21
[AR-Diffusion] Make paged self-attention torch.compile-native (fused …
tzhouam Jul 3, 2026
469b85d
[AR-Diffusion] Branch-aware KV pool sizing (-14 GiB/GPU under CFG-par…
tzhouam Jul 3, 2026
ef866cd
[AR-Diffusion] Fail fast on unsupported configs (PR #4534 review roun…
tzhouam Jul 4, 2026
be4727e
[AR-Diffusion] Tear down the session on a failed forward (review foll…
tzhouam Jul 4, 2026
b07269e
[AR-Diffusion] Consolidate engine->runner routing; widen engine_backe…
tzhouam Jul 4, 2026
bad6f17
Merge remote-tracking branch 'origin/main' into dco-fix
tzhouam Jul 4, 2026
3740e91
[AR-Diffusion] Fix pre-commit: TID251 accelerator.synchronize, UP031,…
tzhouam Jul 4, 2026
51d7030
Credit co-authors of the AR-Diffusion Phase-1 work
tzhouam Jul 4, 2026
de9da44
[AR-Diffusion] Update DreamZeroState test for engine-owned KV
tzhouam Jul 4, 2026
bd50533
Merge branch 'main' into bde-kv-phase1
Gaohan123 Jul 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ cache/
.cache/
diffusion_cache/
kv_cache/
!vllm_omni/experimental/ar_diffusion/kv_cache/

# Logs
logs/
Expand Down
1 change: 1 addition & 0 deletions tests/ar_diffusion/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# SPDX-License-Identifier: Apache-2.0
136 changes: 136 additions & 0 deletions tests/ar_diffusion/test_engine_routing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# SPDX-License-Identifier: Apache-2.0
"""Tests for the generic engine-backend dispatcher + AR-Diffusion runner wiring.

``DiffusionEngine.resolve_engine_class`` is a generic dispatcher (``"default"`` / a
``DiffusionEngine`` subclass / an import-path string). DreamZero selects the
AR-Diffusion engine via its deploy config's ``engine_backend`` qualname — no
DreamZero/ar_diffusion knowledge lives in the public base, so the routing check
here is simply that the ``ARDiffusionEngine`` qualname resolves correctly.
"""

from dataclasses import fields
from types import SimpleNamespace

import pytest
from vllm.utils.import_utils import resolve_obj_by_qualname

from vllm_omni.diffusion.data import OmniDiffusionConfig
from vllm_omni.diffusion.diffusion_engine import DiffusionEngine
from vllm_omni.experimental.ar_diffusion.engine import (
AR_DIFFUSION_MODEL_RUNNER_CLS,
ARDiffusionEngine,
)


def _cfg(backend):
return SimpleNamespace(engine_backend=backend)


def test_default_resolves_to_diffusion_engine():
assert DiffusionEngine.resolve_engine_class(_cfg("default")) is DiffusionEngine


def test_subclass_type_is_returned():
assert DiffusionEngine.resolve_engine_class(_cfg(ARDiffusionEngine)) is ARDiffusionEngine


def test_ar_diffusion_qualname_resolves():
# How DreamZero's deploy config selects the engine: a full import-path string.
cls = DiffusionEngine.resolve_engine_class(_cfg("vllm_omni.experimental.ar_diffusion.engine.ARDiffusionEngine"))
assert cls is ARDiffusionEngine


def test_non_engine_type_raises():
with pytest.raises(TypeError):
DiffusionEngine.resolve_engine_class(_cfg(dict))


def test_qualname_not_an_engine_raises():
with pytest.raises(TypeError):
DiffusionEngine.resolve_engine_class(_cfg("builtins.dict"))


def test_bad_qualname_raises():
with pytest.raises(ValueError):
DiffusionEngine.resolve_engine_class(_cfg("not.a.real.module.NoSuchEngine"))


def test_ar_diffusion_engine_is_diffusion_engine_subclass():
assert issubclass(ARDiffusionEngine, DiffusionEngine)


def test_config_engine_backend_field_defaults_to_default():
field = {f.name: f for f in fields(OmniDiffusionConfig)}["engine_backend"]
assert field.default == "default"


# --- AR-Diffusion worker/runner wiring -----------------------------------------------


def test_ar_diffusion_model_runner_cls_resolves():
cls = resolve_obj_by_qualname(AR_DIFFUSION_MODEL_RUNNER_CLS)
assert cls.__name__ == "ARDiffusionModelRunner"


def test_engine_class_declares_its_runner():
"""Routing lives on the engine class (review: hsliuustc0106) — engines
never mutate od_config; the worker resolves the runner off the class."""
assert ARDiffusionEngine.default_diffusion_model_runner_cls == AR_DIFFUSION_MODEL_RUNNER_CLS
assert DiffusionEngine.default_diffusion_model_runner_cls is None


def _select_runner(od_config, platform_default="PLATFORM"):
"""Mirror of the worker's runner-selection chain (override > engine > platform)."""
runner_override = getattr(od_config, "diffusion_model_runner_cls", None)
if isinstance(runner_override, str) and runner_override:
return runner_override
engine_cls = DiffusionEngine.resolve_engine_class(od_config)
engine_runner = getattr(engine_cls, "default_diffusion_model_runner_cls", None)
if isinstance(engine_runner, str) and engine_runner:
return engine_runner
return platform_default


def test_runner_selection_chain():
ar = "vllm_omni.experimental.ar_diffusion.engine.ARDiffusionEngine"
# engine-declared runner wins over platform default
assert (
_select_runner(SimpleNamespace(diffusion_model_runner_cls=None, engine_backend=ar))
== AR_DIFFUSION_MODEL_RUNNER_CLS
)
# explicit override wins over the engine's declaration
assert (
_select_runner(SimpleNamespace(diffusion_model_runner_cls="my.custom.Runner", engine_backend=ar))
== "my.custom.Runner"
)
# default engine -> platform default
assert _select_runner(SimpleNamespace(diffusion_model_runner_cls=None, engine_backend="default")) == "PLATFORM"


def test_dreamzero_pipeline_rejects_non_ar_diffusion_engine():
"""Review (hsliuustc0106): a stale config with engine_backend='default'
must fail at init, not mid-forward on the first KV access."""
from types import SimpleNamespace

import pytest

from vllm_omni.diffusion.models.dreamzero.pipeline_dreamzero import DreamZeroPipeline

with pytest.raises(ValueError, match="requires the AR-Diffusion engine"):
DreamZeroPipeline(od_config=SimpleNamespace(engine_backend="default"))
with pytest.raises(ValueError, match="requires the AR-Diffusion engine"):
DreamZeroPipeline(od_config=SimpleNamespace())


def test_runner_rejects_multi_sequence_config():
"""Review (hsliuustc0106): the paged path writes batch index 0 only, so
max_num_seqs > 1 must be rejected at init."""
from types import SimpleNamespace

import pytest

from vllm_omni.experimental.ar_diffusion.runner import ARDiffusionModelRunner

fake = SimpleNamespace(od_config=SimpleNamespace(max_num_seqs=4))
with pytest.raises(ValueError, match="max_num_seqs=1"):
ARDiffusionModelRunner._preallocate_kv_cache(fake)
Loading
Loading