Files
vllm-omni/tests/e2e/offline_inference/test_qwen3_tts_edge_profile.py
T
tzhouamandClaude Fable 5.1 602e39647e [Edge][WP2] Finalize edge profile init knobs from init_profile; WP4 CPU emulation results
init_profile 20260909-112200 (1.7B, L20X, warm): default 152.0 s, eager_stage1
149.9 s, eager_both 110.9 s (first TTFA 15 s, no graphs), parallel_stage_init
94.6 s, edge 145.7 s. Edge profile now carries `orchestrator: parallel_stage_init:
true`, applied by the deploy_profile selector (explicit values win); graphs stay on.

hw_emulation 20260909-110229 (CPU venv, 0.6B, deploy_profile=auto):
x86_cpu_avx2 (4c, fp32) TTFA 2.65 s RTF 11.9; x86_cpu_avx512 (8c) TTFA 0.68 s
RTF 2.45; x86_cpu_amx (16c) TTFA 0.51 s RTF 1.72; arm64 logic-only same as avx2.
Emulation rows now record the auto-detected hardware class.

Adds tests/e2e/offline_inference/test_qwen3_tts_edge_profile.py (L3, one GPU).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 14:40:13 +08:00

44 lines
1.8 KiB
Python

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
"""E2E: Qwen3-TTS CustomVoice under the ``edge`` deploy profile.
The edge profile (``vllm_omni/deploy/edge/qwen3_tts.yaml``) runs both stages on
one device with small batches, a ramped codec chunk schedule and concurrent
stage init. This test drives the same profile YAML the ``deploy_profile="edge"``
selector resolves to (the runner fixture always passes ``deploy_config``) and
checks that audio is produced end to end. The chunk schedule itself is
measured by ``benchmarks/tts/stream_latency_bench.py`` (stall_at_ttfa == 0).
"""
import os
os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn"
import pytest
from tests.helpers.mark import hardware_test
from tests.helpers.stage_config import get_deploy_config_path
from vllm_omni.entrypoints.utils import profile_orchestrator_defaults, resolve_deploy_profile_path
MODEL = "Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice"
EDGE_YAML = get_deploy_config_path("edge/qwen3_tts.yaml")
tts_edge_params = [
pytest.param(
(MODEL, EDGE_YAML, {"parallel_stage_init": True, "init_timeout": 1500, "stage_init_timeout": 900}),
id="edge_profile",
)
]
@pytest.mark.advanced_model
@pytest.mark.tts
@hardware_test(res={"cuda": "L4"}, num_cards=1)
@pytest.mark.parametrize("omni_runner", tts_edge_params, indirect=True)
def test_edge_profile_text_to_audio(omni_runner, offline_client) -> None:
# The selector resolves the same file the runner was started with and
# carries the profile's orchestrator defaults.
assert os.path.realpath(resolve_deploy_profile_path(MODEL, "edge")) == os.path.realpath(EDGE_YAML)
assert profile_orchestrator_defaults(EDGE_YAML).get("parallel_stage_init") is True
offline_client.send_audio_speech_request({"input": "Edge profile end to end check.", "voice": "vivian"})