[Model] Add Cache-DiT and CPU offload support for SANA-Video 2B (#5882)
Signed-off-by: cr-gao <gaochenrui@sjtu.edu.cn> Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com> Co-authored-by: Alicia <115451386+congw729@users.noreply.github.com>
This commit is contained in:
10 files changed
+558
-26
No files matched your search
@@ -14,6 +14,7 @@ from vllm_omni.diffusion.data import DiffusionOutput
|
||||
from vllm_omni.diffusion.diffusion_kv.model_runner_backend import DiffusionKVModelRunnerBackend
|
||||
from vllm_omni.diffusion.worker.diffusion_model_runner import DiffusionModelRunner
|
||||
from vllm_omni.diffusion.worker.request_batch import DiffusionRequestBatch, split_diffusion_output_by_request
|
||||
from vllm_omni.inputs.data import OmniDiffusionSamplingParams
|
||||
|
||||
pytestmark = [pytest.mark.diffusion]
|
||||
|
||||
@@ -133,12 +134,7 @@ class _CompileTrackingModel:
|
||||
|
||||
|
||||
def _make_request():
|
||||
sampling_params = SimpleNamespace(
|
||||
generator=None,
|
||||
seed=None,
|
||||
generator_device=None,
|
||||
num_inference_steps=4,
|
||||
)
|
||||
sampling_params = OmniDiffusionSamplingParams(num_inference_steps=4)
|
||||
return SimpleNamespace(
|
||||
request_id="req-test",
|
||||
prompt="a prompt",
|
||||
@@ -249,6 +245,58 @@ def _make_compile_runner(
|
||||
return runner
|
||||
|
||||
|
||||
class _EnabledCacheBackend:
|
||||
def __init__(self):
|
||||
self.refresh_calls = []
|
||||
|
||||
def is_enabled(self):
|
||||
return True
|
||||
|
||||
def refresh(self, pipeline, num_inference_steps, verbose=True):
|
||||
self.refresh_calls.append((pipeline, num_inference_steps, verbose))
|
||||
|
||||
|
||||
@pytest.mark.core_model
|
||||
@pytest.mark.cpu
|
||||
def test_refresh_cache_prefers_request_steps_then_schedule_then_pipeline_default():
|
||||
cache_backend = _EnabledCacheBackend()
|
||||
runner = _make_runner(cache_backend=cache_backend, cache_backend_name="cache_dit")
|
||||
runner.pipeline.default_num_inference_steps = 50
|
||||
req = _make_request()
|
||||
|
||||
custom_timesteps = torch.linspace(999.0, 0.0, 8)
|
||||
custom_sigmas = [0.9, 0.5, 0.1]
|
||||
cases = [
|
||||
(20, None, None),
|
||||
(30, custom_timesteps, custom_sigmas),
|
||||
(None, custom_timesteps, None),
|
||||
(None, custom_timesteps, custom_sigmas),
|
||||
(None, None, custom_sigmas),
|
||||
(None, None, None),
|
||||
]
|
||||
for num_inference_steps, timesteps, sigmas in cases:
|
||||
req.sampling_params.num_inference_steps = num_inference_steps
|
||||
req.sampling_params.timesteps = timesteps
|
||||
req.sampling_params.sigmas = sigmas
|
||||
DiffusionModelRunner._refresh_cache_for_requests(runner, [req], od_config=runner.od_config)
|
||||
|
||||
assert [steps for _, steps, _ in cache_backend.refresh_calls] == [20, 30, 8, 8, 3, 50]
|
||||
|
||||
|
||||
@pytest.mark.core_model
|
||||
@pytest.mark.cpu
|
||||
def test_refresh_cache_without_request_or_pipeline_default_warns(caplog):
|
||||
cache_backend = _EnabledCacheBackend()
|
||||
runner = _make_runner(cache_backend=cache_backend, cache_backend_name="cache_dit")
|
||||
req = _make_request()
|
||||
req.sampling_params.num_inference_steps = None
|
||||
|
||||
DiffusionModelRunner._refresh_cache_for_requests(runner, [req], od_config=runner.od_config)
|
||||
|
||||
assert cache_backend.refresh_calls == []
|
||||
assert "requires num_inference_steps to be passed explicitly" in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.core_model
|
||||
@pytest.mark.cpu
|
||||
def test_update_states_carries_prepared_layout() -> None:
|
||||
@@ -451,16 +499,6 @@ def test_execute_model_skips_cache_summary_without_active_cache_backend(monkeypa
|
||||
@pytest.mark.core_model
|
||||
@hardware_test(res={"cuda": "L4"}, num_cards=1)
|
||||
def test_execute_model_emits_cache_summary_with_active_cache_dit_backend(monkeypatch):
|
||||
class _EnabledCacheBackend:
|
||||
def __init__(self):
|
||||
self.refresh_calls = []
|
||||
|
||||
def is_enabled(self):
|
||||
return True
|
||||
|
||||
def refresh(self, pipeline, num_inference_steps, verbose=True):
|
||||
self.refresh_calls.append((pipeline, num_inference_steps, verbose))
|
||||
|
||||
cache_backend = _EnabledCacheBackend()
|
||||
runner = _make_runner(cache_backend=cache_backend, cache_backend_name="cache_dit")
|
||||
req = _make_request()
|
||||
|
||||
Reference in new issue
Block a user