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>
44 lines
1.8 KiB
Python
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"})
|