Qwen3-TTS auf der DGX: Startskript, Deploy-Config, Node-Client
- dgx/start-qwen3-tts.sh startet CustomVoice (:8011) oder Base/Klon (:8012) via vllm-omni im Image vllm-node-030-omni - dgx/qwen3_tts_spark.yaml: V1-Runner (MRV2 scheitert am vLLM-dev-Build) und 0.08/0.06 Speicher statt 2x 0.3 - SpeechSynthesis_Qwen.js als Ersatz fuer das Azure-Skript: Stimmenauswahl inkl. Klonstimmen, <break>-Pausen, Musik, Ausgabe als WAV/G.722/MP3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
097c9e7141
commit
29d0dc0637
3 files changed
+415
No files matched your search
@@ -0,0 +1,163 @@
|
||||
# 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
|
||||
Reference in new issue
Block a user