# DGX-Spark-Variante von vllm_omni/deploy/qwen3_tts.yaml (vllm-omni 0.30.0): # * model_runner v1 statt v2 -- MRV2 importiert RoutedExpertsTensors, das im # vLLM-dev-Build des Images (vllm-node-030-omni) fehlt -> ImportError. # * gpu_memory_utilization 0.08 / 0.06 statt 2x 0.3 (Unified Memory ist geteilt). # * max_num_seqs 8 statt 64. # # Qwen3-TTS deploy: talker → code2wav via shared-memory chunk streaming. # Verified on 1x H100. # # Runner selection: # Model Runner V2 (MRV2) is EXPERIMENTAL and is the default runner on CUDA # for this model. Set `model_runner: v1` to opt out. The `platforms:` # sections at the end of this file keep V1 on NPU, XPU, ROCm and MUSA. # See docs/configuration/stage_configs.md ("Qwen3-TTS with Model Runner V2"). # # 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, and the MRV2 profiles rely on that bound. # * 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. model_runner: v1 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] # Adaptive chunk ramp (opt-in, takes precedence over fixed codec_chunk_ramp): # Chunk 0 uses dynamic IC; chunk 1+ sizes from live buffer-depth feedback. # Self-tunes across hardware (NPU/NVIDIA) and load conditions. # codec_chunk_adaptive: true # codec_chunk_min_frames: 2 # Code2Wav decode + transfer margin # codec_chunk_safety_margin_ms: 50 # EWMA->delta divisor (delta=max(delta_min, int(ewma/divisor))); higher=gentler ramp # codec_chunk_ramp_divisor: 15 # min chunk-size growth per emit # codec_chunk_ramp_delta_min: 2 # 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: 8 gpu_memory_utilization: 0.08 trust_remote_code: true # Omni prefix cache (reuse of talker codec rows on shared prefixes). Off # by default; set true when text repeats across requests (same voice or # shared ref_audio). The talker opts out of hidden-state caching and # defers codes.audio writes, so per-step cost is small. Stage 1 (codec # decoder) is not a supported prefix-cache stage: keep it false there. # See docs/design/feature/prefix_caching.md for the stage matrix. enable_prefix_caching: false async_scheduling: true # Bound per-step prefill work (validated MRV2 basic profile). Small # per-step batches keep first-chunk latency low. max_num_batched_tokens: 512 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 # Decoder compute dtype on GPU/NPU; 310P requires FP16 and overrides this. dtype: bfloat16 # Tuned for Base voice clone; CustomVoice / VoiceDesign are TTFA-optimal at 1. max_num_seqs: 8 gpu_memory_utilization: 0.06 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: # MRV2 is not qualified on ROCm; keep the legacy V1 runner. model_runner: v1 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: model_runner: v1 stages: - stage_id: 0 enforce_eager: false compilation_config: cudagraph_mode: PIECEWISE - stage_id: 1 compilation_config: cudagraph_mode: PIECEWISE xpu: model_runner: v1 musa: model_runner: v1