From c39225724df39ea0bdf7c3ec21295a70d18c1092 Mon Sep 17 00:00:00 2001 From: Didan Deng <33117903+wtomin@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:52:48 +0800 Subject: [PATCH] [Perf] Qwen-Image Nightly Performance CI Improvement (#2111) Signed-off-by: Didan Deng <33117903+wtomin@users.noreply.github.com> --- .buildkite/test-nightly.yml | 8 +- .../perf/scripts/run_diffusion_benchmark.py | 15 +- .../test_qwen_image_sglang_diffusion.json | 241 ++++++++++++++++++ .../perf/tests/test_qwen_image_vllm_omni.json | 226 ++++++++++++++++ tests/perf/tests/benchmark_params.json | 57 ----- .../test_qwen_image_sglang_diffusion.json | 73 ------ .../perf/tests/test_qwen_image_vllm_omni.json | 58 ----- 7 files changed, 477 insertions(+), 201 deletions(-) rename tests/{ => dfx}/perf/scripts/run_diffusion_benchmark.py (97%) create mode 100644 tests/dfx/perf/tests/test_qwen_image_sglang_diffusion.json create mode 100644 tests/dfx/perf/tests/test_qwen_image_vllm_omni.json delete mode 100644 tests/perf/tests/benchmark_params.json delete mode 100644 tests/perf/tests/test_qwen_image_sglang_diffusion.json delete mode 100644 tests/perf/tests/test_qwen_image_vllm_omni.json diff --git a/.buildkite/test-nightly.yml b/.buildkite/test-nightly.yml index 2329800d6..c89401230 100644 --- a/.buildkite/test-nightly.yml +++ b/.buildkite/test-nightly.yml @@ -253,11 +253,11 @@ steps: if: build.env("NIGHTLY") == "1" commands: - export VLLM_WORKER_MULTIPROC_METHOD=spawn - - export DIFFUSION_BENCHMARK_DIR=tests/perf/results + - export DIFFUSION_BENCHMARK_DIR=tests/dfx/perf/results - export CACHE_DIT_VERSION=1.3.0 - - pytest -s -v tests/perf/scripts/run_diffusion_benchmark.py --config-file tests/perf/tests/test_qwen_image_vllm_omni.json - - buildkite-agent artifact upload "tests/perf/results/benchmark_results_*.json" - - buildkite-agent artifact upload "tests/perf/results/logs/*.log" + - pytest -s -v tests/dfx/perf/scripts/run_diffusion_benchmark.py --config-file tests/dfx/perf/tests/test_qwen_image_vllm_omni.json + - buildkite-agent artifact upload "tests/dfx/perf/results/benchmark_results_*.json" + - buildkite-agent artifact upload "tests/dfx/perf/results/logs/*.log" agents: queue: "mithril-h100-pool" plugins: diff --git a/tests/perf/scripts/run_diffusion_benchmark.py b/tests/dfx/perf/scripts/run_diffusion_benchmark.py similarity index 97% rename from tests/perf/scripts/run_diffusion_benchmark.py rename to tests/dfx/perf/scripts/run_diffusion_benchmark.py index 3fb49f6c3..80b5eb03a 100644 --- a/tests/perf/scripts/run_diffusion_benchmark.py +++ b/tests/dfx/perf/scripts/run_diffusion_benchmark.py @@ -8,8 +8,8 @@ Supports two server backends: benchmarks with diffusion_benchmark_serving.py --backend sglang A config JSON file is REQUIRED via --config-file: - pytest run_diffusion_benchmark.py --config-file tests/perf/tests/test_qwen_image_vllm_omni.json - pytest run_diffusion_benchmark.py --config-file tests/perf/tests/test_qwen_image_sglang_diffusion.json + pytest run_diffusion_benchmark.py --config-file tests/dfx/perf/tests/test_qwen_image_vllm_omni.json + pytest run_diffusion_benchmark.py --config-file tests/dfx/perf/tests/test_qwen_image_sglang_diffusion.json JSON config entries are distinguished by a "server_type" field ("vllm-omni" or "sglang"). sglang entries support two additional fields under server_params: @@ -50,7 +50,7 @@ _DEFAULT_RESULT_DIR = Path(__file__).parent.parent / "results" BENCHMARK_RESULT_DIR = Path(os.environ.get("DIFFUSION_BENCHMARK_DIR", str(_DEFAULT_RESULT_DIR))) BENCHMARK_SCRIPT = str( - Path(__file__).parent.parent.parent.parent / "benchmarks" / "diffusion" / "diffusion_benchmark_serving.py" + Path(__file__).parent.parent.parent.parent.parent / "benchmarks" / "diffusion" / "diffusion_benchmark_serving.py" ) # Single aggregated result file for the entire benchmark session. @@ -76,11 +76,8 @@ def _get_config_file_from_argv() -> str | None: CONFIG_FILE_PATH = _get_config_file_from_argv() if CONFIG_FILE_PATH is None: - raise ValueError( - "--config-file is required. Pass the path to a benchmark config JSON, e.g.:\n" - " pytest run_diffusion_benchmark.py " - "--config-file tests/perf/tests/test_qwen_image_vllm_omni.json" - ) + print("No config file provided, using default config file: tests/dfx/perf/tests/test_qwen_image_vllm_omni.json") + CONFIG_FILE_PATH = "tests/dfx/perf/tests/test_qwen_image_vllm_omni.json" # --------------------------------------------------------------------------- # Config loading @@ -149,7 +146,7 @@ def pytest_addoption(parser: pytest.Parser) -> None: default=None, help=( "Path to the benchmark config JSON file (required). " - "Example: --config-file tests/perf/tests/test_qwen_image_vllm_omni.json" + "Example: --config-file tests/dfx/perf/tests/test_qwen_image_vllm_omni.json" ), ) diff --git a/tests/dfx/perf/tests/test_qwen_image_sglang_diffusion.json b/tests/dfx/perf/tests/test_qwen_image_sglang_diffusion.json new file mode 100644 index 000000000..33119e902 --- /dev/null +++ b/tests/dfx/perf/tests/test_qwen_image_sglang_diffusion.json @@ -0,0 +1,241 @@ +[ + { + "test_name": "test_sglang_qwen_image_single_device", + "description": "sglang: single-device baseline (no parallelism)", + "server_type": "sglang", + "server_params": { + "model": "Qwen/Qwen-Image", + "serve_args": { + "num-gpus": 1, + "dit-cpu-offload": false, + "text-encoder-cpu-offload": false, + "vae-cpu-offload": false + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + } + ] + }, + + { + "test_name": "test_sglang_qwen_image_ulysses2_cfg2_vae_patch4", + "description": "sglang: USP=2 + CFG-parallel=2 + VAE patch parallel via --use-parallel-tiling", + "server_type": "sglang", + "server_params": { + "model": "Qwen/Qwen-Image", + "serve_args": { + "num-gpus": 4, + "sp-degree": 2, + "ulysses-degree": 2, + "enable-cfg-parallel": true, + "use-parallel-tiling": true, + "dit-cpu-offload": false, + "text-encoder-cpu-offload": false, + "vae-cpu-offload": false + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + } + ] + }, + + { + "test_name": "test_sglang_qwen_image_ulysses2_cfg2_cache_dit", + "description": "sglang: USP=2 + CFG-parallel=2 + Cache-DiT via YAML config (--cache-dit-config)", + "server_type": "sglang", + "server_params": { + "model": "Qwen/Qwen-Image", + "cache_dit_config": { + "cache_config": { + "Fn_compute_blocks": 1, + "Bn_compute_blocks": 0, + "max_warmup_steps": 4, + "residual_diff_threshold": 0.24, + "max_continuous_cached_steps": 3, + "enable_taylorseer": false, + "taylorseer_order": 1, + "scm_steps_mask_policy": "none", + "scm_steps_policy": "dynamic" + }, + "parallelism_config": { + "ulysses_size": 2, + "attention_backend": "native" + } + }, + "serve_args": { + "num-gpus": 4, + "sp-degree": 2, + "ulysses-degree": 2, + "enable-cfg-parallel": true, + "dit-cpu-offload": false, + "text-encoder-cpu-offload": false, + "vae-cpu-offload": false + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.001, + "latency_p99": 1000.0, + "peak_memory_mb_max": 400000, + "peak_memory_mb_mean": 400000 + } + } + ] + } +] diff --git a/tests/dfx/perf/tests/test_qwen_image_vllm_omni.json b/tests/dfx/perf/tests/test_qwen_image_vllm_omni.json new file mode 100644 index 000000000..2921f39ed --- /dev/null +++ b/tests/dfx/perf/tests/test_qwen_image_vllm_omni.json @@ -0,0 +1,226 @@ +[ + { + "test_name": "test_qwen_image_single_device", + "description": "Single-device baseline (no parallelism)", + "server_type": "vllm-omni", + "server_params": { + "model": "Qwen/Qwen-Image", + "serve_args": { + "enable-diffusion-pipeline-profiler": true + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.40, + "latency_p99": 2.55, + "peak_memory_mb_max": 67000, + "peak_memory_mb_mean": 67000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.037, + "latency_p99": 27.0, + "peak_memory_mb_max": 74000, + "peak_memory_mb_mean": 74000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.14, + "latency_p99": 25.0, + "peak_memory_mb_max": 74000, + "peak_memory_mb_mean": 74000 + } + } + ] + }, + + { + "test_name": "test_qwen_image_ulysses2_cfg2_vae_patch4", + "description": "Ulysses SP=2 + CFG-parallel=2 + VAE Patch Parallel=4", + "server_type": "vllm-omni", + "server_params": { + "model": "Qwen/Qwen-Image", + "serve_args": { + "ulysses-degree": 2, + "cfg-parallel-size": 2, + "vae-patch-parallel-size": 4, + "vae-use-tiling": true, + "enable-diffusion-pipeline-profiler": true + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.43, + "latency_p99": 2.34, + "peak_memory_mb_max": 61000, + "peak_memory_mb_mean": 61000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.11, + "latency_p99": 9.1, + "peak_memory_mb_max": 61000, + "peak_memory_mb_mean": 61000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.29, + "latency_p99": 8.5, + "peak_memory_mb_max": 61000, + "peak_memory_mb_mean": 61000 + } + } + ] + }, + + { + "test_name": "test_qwen_image_ulysses2_cfg2_cache_dit", + "description": "Ulysses SP=2 + CFG-parallel=2 + CacheDiT acceleration", + "server_type": "vllm-omni", + "server_params": { + "model": "Qwen/Qwen-Image", + "serve_args": { + "ulysses-degree": 2, + "cfg-parallel-size": 2, + "cache-backend": "cache_dit", + "cache-config": { + "Fn_compute_blocks": 1, + "Bn_compute_blocks": 0, + "max_warmup_steps": 4, + "residual_diff_threshold": 0.24, + "max_continuous_cached_steps": 3, + "enable_taylorseer": false, + "taylorseer_order": 1, + "scm_steps_mask_policy": null, + "scm_steps_policy": "dynamic" + }, + "enable-diffusion-pipeline-profiler": true + } + }, + "benchmark_params": [ + { + "name": "512x512_steps20", + "dataset": "random", + "task": "t2i", + "width": 512, + "height": 512, + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.52, + "latency_p99": 2.36, + "peak_memory_mb_max": 67000, + "peak_memory_mb_mean": 67000 + } + }, + { + "name": "1536x1536_steps35", + "dataset": "random", + "task": "t2i", + "width": 1536, + "height": 1536, + "num-inference-steps": 35, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "baseline": { + "throughput_qps": 0.17, + "latency_p99": 6.15, + "peak_memory_mb_max": 74000, + "peak_memory_mb_mean": 74000 + } + }, + { + "name": "mixed_resolution", + "dataset": "random", + "task": "t2i", + "num-inference-steps": 20, + "num-prompts": 10, + "max-concurrency": 1, + "enable-negative-prompt": true, + "random-request-config": [ + {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, + {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, + {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, + {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} + ], + "baseline": { + "throughput_qps": 0.41, + "latency_p99": 5.33, + "peak_memory_mb_max": 74000, + "peak_memory_mb_mean": 74000 + } + } + ] + } +] diff --git a/tests/perf/tests/benchmark_params.json b/tests/perf/tests/benchmark_params.json deleted file mode 100644 index 561e778e9..000000000 --- a/tests/perf/tests/benchmark_params.json +++ /dev/null @@ -1,57 +0,0 @@ -[ - { - "name": "512x512_steps20", - "dataset": "random", - "task": "t2i", - "width": 512, - "height": 512, - "num-inference-steps": 20, - "num-prompts": 10, - "max-concurrency": 1, - "enable-negative-prompt": true, - "baseline": { - "throughput_qps": 0.001, - "latency_p99": 1000.0, - "peak_memory_mb_max": 400000, - "peak_memory_mb_mean": 400000 - } - }, - { - "name": "1536x1536_steps35", - "dataset": "random", - "task": "t2i", - "width": 1536, - "height": 1536, - "num-inference-steps": 35, - "num-prompts": 10, - "max-concurrency": 1, - "enable-negative-prompt": true, - "baseline": { - "throughput_qps": 0.001, - "latency_p99": 1000.0, - "peak_memory_mb_max": 400000, - "peak_memory_mb_mean": 400000 - } - }, - { - "name": "mixed_resolution", - "dataset": "random", - "task": "t2i", - "num-inference-steps": 20, - "num-prompts": 10, - "max-concurrency": 1, - "enable-negative-prompt": true, - "random-request-config": [ - {"width": 512, "height": 512, "num_inference_steps": 20, "weight": 0.15}, - {"width": 768, "height": 768, "num_inference_steps": 20, "weight": 0.25}, - {"width": 1024, "height": 1024, "num_inference_steps": 25, "weight": 0.45}, - {"width": 1536, "height": 1536, "num_inference_steps": 35, "weight": 0.15} - ], - "baseline": { - "throughput_qps": 0.001, - "latency_p99": 1000.0, - "peak_memory_mb_max": 400000, - "peak_memory_mb_mean": 400000 - } - } -] diff --git a/tests/perf/tests/test_qwen_image_sglang_diffusion.json b/tests/perf/tests/test_qwen_image_sglang_diffusion.json deleted file mode 100644 index 3d3aa41c6..000000000 --- a/tests/perf/tests/test_qwen_image_sglang_diffusion.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "test_name": "test_sglang_qwen_image_single_device", - "description": "sglang: single-device baseline (no parallelism)", - "server_type": "sglang", - "server_params": { - "model": "Qwen/Qwen-Image", - "serve_args": { - "num-gpus": 1, - "dit-cpu-offload": false, - "text-encoder-cpu-offload": false, - "vae-cpu-offload": false - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - }, - - { - "test_name": "test_sglang_qwen_image_ulysses2_cfg2_vae_patch4", - "description": "sglang: USP=2 + CFG-parallel=2 + VAE patch parallel via --use-parallel-tiling", - "server_type": "sglang", - "server_params": { - "model": "Qwen/Qwen-Image", - "serve_args": { - "num-gpus": 4, - "sp-degree": 2, - "ulysses-degree": 2, - "enable-cfg-parallel": true, - "use-parallel-tiling": true, - "dit-cpu-offload": false, - "text-encoder-cpu-offload": false, - "vae-cpu-offload": false - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - }, - - { - "test_name": "test_sglang_qwen_image_ulysses2_cfg2_cache_dit", - "description": "sglang: USP=2 + CFG-parallel=2 + Cache-DiT via YAML config (--cache-dit-config)", - "server_type": "sglang", - "server_params": { - "model": "Qwen/Qwen-Image", - "cache_dit_config": { - "cache_config": { - "Fn_compute_blocks": 1, - "Bn_compute_blocks": 0, - "max_warmup_steps": 4, - "residual_diff_threshold": 0.24, - "max_continuous_cached_steps": 3, - "enable_taylorseer": false, - "taylorseer_order": 1, - "scm_steps_mask_policy": "none", - "scm_steps_policy": "dynamic" - }, - "parallelism_config": { - "ulysses_size": 2, - "attention_backend": "native" - } - }, - "serve_args": { - "num-gpus": 4, - "sp-degree": 2, - "ulysses-degree": 2, - "enable-cfg-parallel": true, - "dit-cpu-offload": false, - "text-encoder-cpu-offload": false, - "vae-cpu-offload": false - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - } -] diff --git a/tests/perf/tests/test_qwen_image_vllm_omni.json b/tests/perf/tests/test_qwen_image_vllm_omni.json deleted file mode 100644 index 12ad4bb3c..000000000 --- a/tests/perf/tests/test_qwen_image_vllm_omni.json +++ /dev/null @@ -1,58 +0,0 @@ -[ - { - "test_name": "test_qwen_image_single_device", - "description": "Single-device baseline (no parallelism)", - "server_type": "vllm-omni", - "server_params": { - "model": "Qwen/Qwen-Image", - "serve_args": { - "enable-diffusion-pipeline-profiler": true - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - }, - - { - "test_name": "test_qwen_image_ulysses2_cfg2_vae_patch4", - "description": "Ulysses SP=2 + CFG-parallel=2 + VAE Patch Parallel=4", - "server_type": "vllm-omni", - "server_params": { - "model": "Qwen/Qwen-Image", - "serve_args": { - "ulysses-degree": 2, - "cfg-parallel-size": 2, - "vae-patch-parallel-size": 4, - "vae-use-tiling": true, - "enable-diffusion-pipeline-profiler": true - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - }, - - { - "test_name": "test_qwen_image_ulysses2_cfg2_cache_dit", - "description": "Ulysses SP=2 + CFG-parallel=2 + CacheDiT acceleration", - "server_type": "vllm-omni", - "server_params": { - "model": "Qwen/Qwen-Image", - "serve_args": { - "ulysses-degree": 2, - "cfg-parallel-size": 2, - "cache-backend": "cache_dit", - "cache-config": { - "Fn_compute_blocks": 1, - "Bn_compute_blocks": 0, - "max_warmup_steps": 4, - "residual_diff_threshold": 0.24, - "max_continuous_cached_steps": 3, - "enable_taylorseer": false, - "taylorseer_order": 1, - "scm_steps_mask_policy": null, - "scm_steps_policy": "dynamic" - }, - "enable-diffusion-pipeline-profiler": true - } - }, - "benchmark_params": {"$ref": "benchmark_params.json"} - } -]