Skip to content

test(vllm): cover Qwen3-TTS on the FlashInfer attention backend - #18257

Draft
JulienDarve wants to merge 1 commit into
mainfrom
jdarve/omni-tts-flashinfer-test
Draft

JulienDarve wants to merge 1 commit into
mainfrom
jdarve/omni-tts-flashinfer-test

Conversation

@JulienDarve

Copy link
Copy Markdown
Contributor

Overview

Qwen3-TTS through vLLM-Omni failed to start on B200 and GB200 because a vLLM/vLLM-Omni version pairing broke only when vLLM uses the FlashInfer attention backend. CI never caught it: every CI GPU makes vLLM choose FlashAttention, so the existing omni_audio case passed on the broken versions. This PR adds a post-merge case that forces FlashInfer, so the next pairing that breaks it fails CI instead of release QA.

Key Changes

0 lines of core logic; test-only.

  • tests/serve/test_vllm_omni.py: new omni_audio_flashinfer case (gpu_1, post_merge). It runs the same Qwen3-TTS launcher and request as omni_audio, but points the worker at a copy of vLLM-Omni's installed qwen3_tts.yaml with every stage set to attention_config.backend: FLASHINFER (passed through DYN_OMNI_STAGE_CONFIGS_PATH). The copy is written to tmp_path at test time, so Omni's own memory, connector and runner settings stay current.
  • The payload also requires the Warming up FlashInfer attention log line. That is the FlashInfer-only warmup where the bug occurred, and the check keeps the case from passing silently if the override stops taking effect.

The Dynamo Omni worker forwards no attention-backend flag to vLLM-Omni, and vLLM 0.33 removed VLLM_ATTENTION_BACKEND, so the stage config file is the only override available.

Validation

Ran test_omni_serve_deployment[omni_audio_flashinfer] from this branch on one NVIDIA RTX 6000 Ada GPU, inside the Dynamo 1.7.0 CI vLLM runtime image. The RTX 6000 Ada has compute capability 8.9, the same as CI's L4, where vLLM picks FlashAttention by default.

Case vLLM / vLLM-Omni Result
Omni pin on main today 0.32.0 / 0.32.0rc1 Fails at startup, as intended: stage 0 uses FlashInfer, logs Warming up FlashInfer attention., then raises ValueError: Missing Qwen3-TTS text conditioning (143 s)
Omni pin from #18067 (installed with container/deps/vllm/install_vllm_omni.sh) 0.32.0 / 0.32.0 Passes: both stages use FlashInfer, the warmup log check matches, the request returns 184,364 bytes of audio (1 passed in 141.57s)
Marker selection (--collect-only) 0.32.0 / 0.32.0rc1 PR filter selects only omni_audio; the post-merge and nightly vLLM 1-GPU filters select both cases; vllm and xpu_1 selects only omni_audio

The case takes about the same time as omni_audio, and it uses the same 1200 s timeout to cover model download and FlashInfer JIT compilation on a cold runner.

Not yet run in CI: post-merge cases do not run on PRs, and on today's main pin this case fails by design.

Issues and Ongoing Work

Pull Request Checklist
  • I used Dynamo's /pr-checklist skill.

🤖 Generated with Claude Code

vLLM picks FlashInfer by default only on B200/GB200, so CI's L4 runners
never exercised the FlashInfer-only warmup where Qwen3-TTS failed to start
with vLLM 0.32.0 and vLLM-Omni 0.32.0rc1. Add a post-merge case that copies
vLLM-Omni's Qwen3-TTS stage config with every stage set to FlashInfer and
checks that the FlashInfer warmup ran.

Signed-off-by: Julien Darve <jdarve@NVIDIA.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor

✅ Dynamo PR CI passed — run 42102428871 (attempt 1) on bb937a1c47

Gate checks: ✅ backend-status-check · ✅ deploy-status-check · ✅ dynamo-status-check

Posted automatically by Devin for run 42102428871. Updated on every full-CI run of this PR.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant