From 8a4eee9bed1b0eaf785669856ea0f63f39da48ed Mon Sep 17 00:00:00 2001 From: tzhouam Date: Fri, 13 Feb 2026 06:39:28 +0000 Subject: [PATCH] Enhance configuration and debugging: Added asyncio mode to pytest settings, increased timeout for Qwen3-TTS E2E test, and improved logging in GPU model runner for better traceability of input modalities. Updated Dockerfile.ci to streamline VLLM installation process. Signed-off-by: tzhouam --- .buildkite/pipeline.yml | 2 +- docker/Dockerfile.ci | 15 ++------------- pyproject.toml | 1 + .../models/qwen2_5_omni/qwen2_5_omni_thinker.py | 2 +- .../models/qwen3_omni/qwen3_omni_moe_thinker.py | 2 +- 5 files changed, 6 insertions(+), 16 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c435f311e..88cfc22d5 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -232,7 +232,7 @@ steps: type: DirectoryOrCreate - label: "Qwen3-TTS E2E Test" - timeout_in_minutes: 10 + timeout_in_minutes: 20 depends_on: image-build commands: - export VLLM_LOGGING_LEVEL=DEBUG diff --git a/docker/Dockerfile.ci b/docker/Dockerfile.ci index 13f232a14..b9363e76a 100644 --- a/docker/Dockerfile.ci +++ b/docker/Dockerfile.ci @@ -20,22 +20,11 @@ RUN apt-get update && \ # causing it to fall back to the older stable release from PyPI. RUN uv pip install --system --upgrade --force-reinstall --prerelease=allow vllm --extra-index-url https://wheels.vllm.ai/2d5be1dd5ce2e44dfea53ea03ff61143da5137eb -# # Keep flashinfer runtime packages in version sync. -# # We derive the version from installed flashinfer (pulled by vllm) -# # and enforce the same version for flashinfer-cubin / flashinfer-jit-cache. -# RUN FLASHINFER_VERSION="$(python3 -c 'import importlib.metadata as m; print(m.version("flashinfer-python"))' 2>/dev/null || python3 -c 'import importlib.metadata as m; print(m.version("flashinfer"))')" && \ -# FLASHINFER_CUDA_TAG="$(python3 -c 'import torch; print((torch.version.cuda or "12.4").replace(".", ""))')" && \ -# uv pip install --system --upgrade --force-reinstall \ -# "flashinfer-cubin==${FLASHINFER_VERSION}" \ -# "flashinfer-jit-cache==${FLASHINFER_VERSION}" \ -# --extra-index-url "https://flashinfer.ai/whl/cu${FLASHINFER_CUDA_TAG}" && \ -# flashinfer show-config -# Uninstall the old nvidia-cublas-cu12 brought by torch/vllm before reinstalling the pinned version + RUN uv pip uninstall --system nvidia-cublas-cu12 # Install vllm-omni into the same uv-managed Python environment used by the base image. # Use bash -c so that $(python3 -c ...) is expanded inside the container. -RUN /bin/bash -c 'VLLM_USE_PRECOMPILED=1 uv pip install --python "$(python3 -c "import sys; print(sys.executable)")" --no-cache-dir -e ".[dev]"' - +RUN uv pip install --python "$(python3 -c 'import sys; print(sys.executable)')" --no-cache-dir ".[dev]" RUN /bin/bash -c 'FLASHINFER_CUDA_TAG="$(python3 -c "import torch; print((torch.version.cuda or \"12.4\").replace(\".\", \"\"))")" && \ uv pip install --system --upgrade --force-reinstall \ diff --git a/pyproject.toml b/pyproject.toml index b2293da7c..965a3e4b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -137,6 +137,7 @@ warn_unreachable = true strict_equality = true [tool.pytest.ini_options] +asyncio_mode = "auto" testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] diff --git a/vllm_omni/model_executor/models/qwen2_5_omni/qwen2_5_omni_thinker.py b/vllm_omni/model_executor/models/qwen2_5_omni/qwen2_5_omni_thinker.py index 58a4b25d2..8ee516376 100644 --- a/vllm_omni/model_executor/models/qwen2_5_omni/qwen2_5_omni_thinker.py +++ b/vllm_omni/model_executor/models/qwen2_5_omni/qwen2_5_omni_thinker.py @@ -317,7 +317,7 @@ class Qwen2_5OmniThinkerForConditionalGeneration( mm_input_by_modality["image"] = self._parse_and_validate_image_input(**kwargs) if input_key in ("pixel_values_videos", "video_embeds") and "video" not in mm_input_by_modality: mm_input_by_modality["video"] = self._parse_and_validate_video_input(**kwargs) - if input_key in ("input_audio_features") and "audio" not in mm_input_by_modality: + if input_key in ("input_audio_features",) and "audio" not in mm_input_by_modality: mm_input_by_modality["audio"] = self._parse_and_validate_audio_input(**kwargs) return mm_input_by_modality diff --git a/vllm_omni/model_executor/models/qwen3_omni/qwen3_omni_moe_thinker.py b/vllm_omni/model_executor/models/qwen3_omni/qwen3_omni_moe_thinker.py index 3dda39423..a0920c069 100644 --- a/vllm_omni/model_executor/models/qwen3_omni/qwen3_omni_moe_thinker.py +++ b/vllm_omni/model_executor/models/qwen3_omni/qwen3_omni_moe_thinker.py @@ -803,7 +803,7 @@ class Qwen3OmniMoeThinkerForConditionalGeneration( mm_input_by_modality["image"] = self._parse_and_validate_image_input(**kwargs) if input_key in ("pixel_values_videos", "video_embeds") and "video" not in mm_input_by_modality: mm_input_by_modality["video"] = self._parse_and_validate_video_input(**kwargs) - if input_key in ("input_audio_features") and "audio" not in mm_input_by_modality: + if input_key in ("input_audio_features",) and "audio" not in mm_input_by_modality: mm_input_by_modality["audio"] = self._parse_and_validate_audio_input(**kwargs) return mm_input_by_modality