From 753508fe025c3f897a729cd7cef3817e12f06a5f Mon Sep 17 00:00:00 2001 From: Jason <72191212+JasonJ2021@users.noreply.github.com> Date: Wed, 27 May 2026 11:06:18 +0800 Subject: [PATCH] [Bugfix] Fix Qwen-Image-Edit-2511 TeaCache zero_cond_t handling (#3219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: JasonJ2021 Signed-off-by: Jason <72191212+JasonJ2021@users.noreply.github.com> Co-authored-by: Zeyu Huang | 黃澤宇 <11222265+fhfuih@users.noreply.github.com> --- ...json => test_qwen_image_edit_2511_vllm_omni.json} | 12 ++++++------ tests/e2e/accuracy/test_qwen_image_edit.py | 2 +- .../online_serving/test_qwen_image_edit_expansion.py | 8 ++++---- vllm_omni/diffusion/cache/teacache/extractors.py | 6 ++++-- 4 files changed, 15 insertions(+), 13 deletions(-) rename tests/dfx/perf/tests/{test_qwen_image_edit_2509_vllm_omni.json => test_qwen_image_edit_2511_vllm_omni.json} (94%) diff --git a/tests/dfx/perf/tests/test_qwen_image_edit_2509_vllm_omni.json b/tests/dfx/perf/tests/test_qwen_image_edit_2511_vllm_omni.json similarity index 94% rename from tests/dfx/perf/tests/test_qwen_image_edit_2509_vllm_omni.json rename to tests/dfx/perf/tests/test_qwen_image_edit_2511_vllm_omni.json index d13f37053..82c2ca27d 100644 --- a/tests/dfx/perf/tests/test_qwen_image_edit_2509_vllm_omni.json +++ b/tests/dfx/perf/tests/test_qwen_image_edit_2511_vllm_omni.json @@ -1,10 +1,10 @@ [ { - "test_name": "test_qwen_image_edit_2509_single_device", + "test_name": "test_qwen_image_edit_2511_single_device", "description": "Single-device baseline (two input images)", "server_type": "vllm-omni", "server_params": { - "model": "Qwen/Qwen-Image-Edit-2509", + "model": "Qwen/Qwen-Image-Edit-2511", "serve_args": { "enable-diffusion-pipeline-profiler": true } @@ -49,11 +49,11 @@ ] }, { - "test_name": "test_qwen_image_edit_2509_ulysses2_cfg2_vae_patch4", + "test_name": "test_qwen_image_edit_2511_ulysses2_cfg2_vae_patch4", "description": "Ulysses SP=2 + CFG=2 + VAE patch parallel=4", "server_type": "vllm-omni", "server_params": { - "model": "Qwen/Qwen-Image-Edit-2509", + "model": "Qwen/Qwen-Image-Edit-2511", "serve_args": { "ulysses-degree": 2, "cfg-parallel-size": 2, @@ -102,11 +102,11 @@ ] }, { - "test_name": "test_qwen_image_edit_2509_ulysses2_cfg2_cache_dit", + "test_name": "test_qwen_image_edit_2511_ulysses2_cfg2_cache_dit", "description": "Ulysses SP=2 + CFG=2 + CacheDiT", "server_type": "vllm-omni", "server_params": { - "model": "Qwen/Qwen-Image-Edit-2509", + "model": "Qwen/Qwen-Image-Edit-2511", "serve_args": { "ulysses-degree": 2, "cfg-parallel-size": 2, diff --git a/tests/e2e/accuracy/test_qwen_image_edit.py b/tests/e2e/accuracy/test_qwen_image_edit.py index ea4a9ff1b..540444d42 100644 --- a/tests/e2e/accuracy/test_qwen_image_edit.py +++ b/tests/e2e/accuracy/test_qwen_image_edit.py @@ -20,7 +20,7 @@ pytestmark = [pytest.mark.full_model, pytest.mark.diffusion] SINGLE_MODEL = "Qwen/Qwen-Image-Edit" -MULTIPLE_MODEL = "Qwen/Qwen-Image-Edit-2509" +MULTIPLE_MODEL = "Qwen/Qwen-Image-Edit-2511" WIDTH = 512 HEIGHT = 512 NUM_INFERENCE_STEPS = 20 diff --git a/tests/e2e/online_serving/test_qwen_image_edit_expansion.py b/tests/e2e/online_serving/test_qwen_image_edit_expansion.py index 9b30ef4eb..632f75231 100644 --- a/tests/e2e/online_serving/test_qwen_image_edit_expansion.py +++ b/tests/e2e/online_serving/test_qwen_image_edit_expansion.py @@ -141,10 +141,10 @@ def test_qwen_image_edit(omni_server: OmniServer, openai_client: OpenAIClientHan @pytest.mark.parametrize( "omni_server", - _get_diffusion_feature_cases("Qwen/Qwen-Image-Edit-2509"), + _get_diffusion_feature_cases("Qwen/Qwen-Image-Edit-2511"), indirect=True, ) -def test_qwen_image_edit_2509_single_image(omni_server: OmniServer, openai_client: OpenAIClientHandler): +def test_qwen_image_edit_2511_single_image(omni_server: OmniServer, openai_client: OpenAIClientHandler): """Test Qwen-Image-Edit-2509 with a single image input. Regression: with tea_cache enabled and zero_cond_t=True, the TeaCache @@ -176,10 +176,10 @@ def test_qwen_image_edit_2509_single_image(omni_server: OmniServer, openai_clien @pytest.mark.parametrize( "omni_server", - _get_diffusion_feature_cases("Qwen/Qwen-Image-Edit-2509"), + _get_diffusion_feature_cases("Qwen/Qwen-Image-Edit-2511"), indirect=True, ) -def test_qwen_image_edit_2509_two_images(omni_server: OmniServer, openai_client: OpenAIClientHandler): +def test_qwen_image_edit_2511_two_images(omni_server: OmniServer, openai_client: OpenAIClientHandler): """Test Qwen-Image-Edit-2509 with two image inputs.""" image_data_url_1 = f"data:image/jpeg;base64,{generate_synthetic_image(512, 512)['base64']}" image_data_url_2 = f"data:image/jpeg;base64,{generate_synthetic_image(512, 512)['base64']}" diff --git a/vllm_omni/diffusion/cache/teacache/extractors.py b/vllm_omni/diffusion/cache/teacache/extractors.py index 5b7ab14e5..91259bc8e 100644 --- a/vllm_omni/diffusion/cache/teacache/extractors.py +++ b/vllm_omni/diffusion/cache/teacache/extractors.py @@ -277,8 +277,10 @@ def extract_qwen_context( def postprocess(h): """Apply Qwen-specific output postprocessing.""" - t = temb.chunk(2, dim=0)[0] if module.zero_cond_t else temb - h = module.norm_out(h, t) + if getattr(module, "zero_cond_t", False): + h = module.norm_out(h, temb.chunk(2, dim=0)[0]) + else: + h = module.norm_out(h, temb) output = module.proj_out(h) if not return_dict: return (output,)