Files
vllm-omni/vllm_omni/deploy/qwen3_tts.yaml
T

128 lines
5.1 KiB
YAML

# Qwen3-TTS deploy: talker → code2wav via shared-memory chunk streaming.
# Verified on 1x H100.
#
# Fields omitted from a stage fall back to StageDeployConfig defaults (see
# vllm_omni/config/stage_config.py). Notable choices for this model:
# * Stage 0 (talker) sets max_num_batched_tokens=512 for async-chunk
# latency tuning (not correctness) — small per-step batches keep
# first-chunk latency low.
# * Stage 1 (code2wav) sets max_num_batched_tokens=65536 for correctness:
# codec prefill length (Q * num_frames) exceeds the 32k default.
# * Stage 0 does not set enforce_eager — talker runs cudagraph by default.
# Stage 1 defaults to false so Code2Wav can use its inner cudagraph;
# set true to disable that path in eager mode.
async_chunk: true
connectors:
connector_of_shared_memory:
name: SharedMemoryConnector
extra:
codec_streaming: true
connector_get_sleep_s: 0.01
connector_get_max_wait_first_chunk: 3000
connector_get_max_wait: 300
# Must match the decoder sliding attention window.
codec_chunk_frames: 25
codec_left_context_frames: 72
# Emit only the first audio chunk early, then return to codec_chunk_frames.
initial_codec_chunk_frames: 1
# Chunk ramp (opt-in): gradual size increase for first N chunks to
# eliminate the IC→steady cliff (1→25). Uncomment to enable.
# Each entry is the size of that chunk index; indices past the table
# fall back to codec_chunk_frames. When enabled, ramp overrides
# initial_codec_chunk_frames (including the per-request API field).
# Example:
# codec_chunk_ramp: [4, 4, 8, 16, 25]
# Decoder CUDA Graph sizing:
# * async_chunk=true derives all stateful ICL/xvec shapes from
# codec_chunk_ramp when enabled, otherwise from
# initial_codec_chunk_frames, codec_chunk_frames, and sliding_window;
# decode_cudagraph_capture_sizes is ignored in this mode.
# * async_chunk=false captures stateless shapes 150 and
# decode_chunk_frames + decode_left_context_frames (325 by default).
# Extra stateless shapes may be added (union, not intersection) with:
# decode_cudagraph_capture_sizes: [97, 400]
# Graph batch size defaults to 1. Add larger buckets only when needed:
# decode_cudagraph_batch_sizes: [1, 2, 4]
# Limit eager batches to reduce temporary stateful cache allocations; CUDA Graph batching uses the buckets above.
decode_batch_max_size: 4
stages:
- stage_id: 0
max_num_seqs: 64
gpu_memory_utilization: 0.3
trust_remote_code: true
# Prefix caching on by default. The HS opt-out (talker only consumes the
# last token's hidden state) and deferred mm-output writes added in this
# PR make per-step bookkeeping negligible, and any text repetition across
# requests (same voice or shared ref_audio) is a net throughput win.
# Disable explicitly if memory headroom is tight on a single-GPU deploy.
enable_prefix_caching: false
async_scheduling: true
max_num_batched_tokens: 32768
max_model_len: 4096
devices: "0"
output_connectors:
to_stage_1: connector_of_shared_memory
default_sampling_params:
temperature: 0.9
top_k: 50
max_tokens: 4096
# Official qwen-tts generates the talker with min_new_tokens=2; without
# it, checkpoints that sample codec EOS on the first frame return empty
# audio (HTTP 400). See #4962.
min_tokens: 2
repetition_penalty: 1.05
# Suppress codebook-0 silence tokens for the first N decode frames of a
# request (#4966). Applies to every request on this stage, so intended
# for x-vector-only (Base voice-clone) deploys. 0 = off.
silence_ban_frames: 0
subtalker_sampling_params:
do_sample: true
temperature: 0.9
top_k: 50
top_p: 1.0
- stage_id: 1
# Tuned for Base voice clone; CustomVoice / VoiceDesign are TTFA-optimal at 1.
max_num_seqs: 64
gpu_memory_utilization: 0.3
enforce_eager: false
trust_remote_code: true
enable_prefix_caching: false
async_scheduling: true
# Must be divisible by num_code_groups and cover (left_context + chunk).
# Prefill length is Q * num_frames (e.g. 16 * 2148 = 34368); keep
# headroom past 32k.
max_num_batched_tokens: 65536
# async_chunk appends windows per step; max_model_len must cover the
# accumulated flat codec stream.
max_model_len: 65536
devices: "0"
input_connectors:
from_stage_0: connector_of_shared_memory
default_sampling_params:
temperature: 0.0
top_p: 1.0
top_k: -1
max_tokens: 65536
repetition_penalty: 1.0
platforms:
rocm:
stages:
- stage_id: 1
# MIOpen Conv1d cannot be invoked while vLLM captures the outer
# Code2Wav model graph. Keep CUDA's graph-enabled default, but run
# Stage 1 eager on ROCm so decoder convolutions execute normally.
enforce_eager: true
npu:
stages:
- stage_id: 0
enforce_eager: false
compilation_config:
cudagraph_mode: PIECEWISE
- stage_id: 1
compilation_config:
cudagraph_mode: PIECEWISE