diff --git a/docs/user_guide/acceleration/parallelism_acceleration.md b/docs/user_guide/acceleration/parallelism_acceleration.md index 0ced0731b..31852c6d2 100644 --- a/docs/user_guide/acceleration/parallelism_acceleration.md +++ b/docs/user_guide/acceleration/parallelism_acceleration.md @@ -40,6 +40,15 @@ outputs = omni.generate(prompt="A cat sitting on a windowsill", num_inference_st See `examples/offline_inference/text_to_image/text_to_image.py` for a complete working example. +##### Online Serving + +You can enable Ulysses-SP in online serving for diffusion models via `--usp`: + +```bash +# Text-to-image (requires >= 2 GPUs) +vllm serve Qwen/Qwen-Image --omni --port 8091 --usp 2 +``` + ##### Benchmarks !!! note "Benchmark Disclaimer" These benchmarks are provided for **general reference only**. The configurations shown use default or common parameter settings and have not been exhaustively optimized for maximum performance. Actual performance may vary based on: diff --git a/vllm_omni/entrypoints/cli/serve.py b/vllm_omni/entrypoints/cli/serve.py index 4680083fe..40958bd5e 100644 --- a/vllm_omni/entrypoints/cli/serve.py +++ b/vllm_omni/entrypoints/cli/serve.py @@ -134,9 +134,18 @@ class OmniServeCommand(CLISubcommand): serve_parser.add_argument( "--num-gpus", type=int, - default=1, + default=None, help="Number of GPUs to use for diffusion model inference.", ) + serve_parser.add_argument( + "--usp", + "--ulysses-degree", + dest="ulysses_degree", + type=int, + default=None, + help="Ulysses Sequence Parallelism degree for diffusion models. " + "Equivalent to setting DiffusionParallelConfig.ulysses_degree.", + ) # Cache optimization parameters serve_parser.add_argument( diff --git a/vllm_omni/entrypoints/openai/api_server.py b/vllm_omni/entrypoints/openai/api_server.py index 1f4798af4..000e95a81 100644 --- a/vllm_omni/entrypoints/openai/api_server.py +++ b/vllm_omni/entrypoints/openai/api_server.py @@ -40,7 +40,7 @@ from vllm.logger import init_logger from vllm.transformers_utils.tokenizer import MistralTokenizer from vllm.utils import decorate_logs -from vllm_omni.diffusion.data import OmniDiffusionConfig +from vllm_omni.diffusion.data import DiffusionParallelConfig, OmniDiffusionConfig from vllm_omni.diffusion.utils.hf_utils import is_diffusion_model from vllm_omni.entrypoints.async_diffusion import AsyncOmniDiffusion from vllm_omni.entrypoints.async_omni import AsyncOmni @@ -236,6 +236,18 @@ async def build_async_diffusion( config_field_names = {f.name for f in fields(OmniDiffusionConfig)} diffusion_kwargs: dict[str, Any] = {"model": args.model} + # Diffusion parallelism configuration (e.g. `--usp 2`). + parallel_config_kwargs: dict[str, Any] = {} + for field in fields(DiffusionParallelConfig): + if not hasattr(args, field.name): + continue + value = getattr(args, field.name) + if value is None: + continue + parallel_config_kwargs[field.name] = value + if parallel_config_kwargs: + diffusion_kwargs["parallel_config"] = DiffusionParallelConfig(**parallel_config_kwargs) + for field_name in config_field_names: if not hasattr(args, field_name): continue