Signed-off-by: BeatSeat <wendavid552@gmail.com> Signed-off-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com> Co-authored-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com>
84 lines
2.6 KiB
YAML
84 lines
2.6 KiB
YAML
# GLM-TTS deploy: 2-stage AR -> DiT flow-matching.
|
||
#
|
||
# Default mode is async-chunk streaming through SharedMemoryConnector.
|
||
# Stage 0 (AR LLM) streams speech token chunks to Stage 1 (DiT + vocoder)
|
||
# via the shared-memory connector. Stage 1 runs as LLM_GENERATION type
|
||
# to support chunk_transfer_adapter consumption.
|
||
#
|
||
# Stage 1 keeps vLLM eager scheduling but enables the GLM-TTS bucketed DiT
|
||
# CUDA graph wrapper via hf_overrides.use_dit_cuda_graphs. Graph capture falls
|
||
# back to eager if a dynamic shape exceeds the captured buckets.
|
||
#
|
||
# Verified on 1x A40 48GB (both stages share GPU 0).
|
||
# Memory footprint ~16.6 GiB peak; fits 24GB cards with the settings below.
|
||
async_chunk: true
|
||
trust_remote_code: true
|
||
|
||
connectors:
|
||
glm_tts_shm:
|
||
name: SharedMemoryConnector
|
||
extra:
|
||
codec_streaming: true
|
||
connector_get_sleep_s: 0.002
|
||
connector_get_max_wait_first_chunk: 3000
|
||
connector_get_max_wait: 300
|
||
# Progressive chunk sizes matching original GLM-TTS defaults.
|
||
codec_chunk_frames: [25, 50, 200]
|
||
codec_left_context_frames: 25
|
||
crossfade_sec: 0.1
|
||
|
||
stages:
|
||
- stage_id: 0
|
||
max_num_seqs: 1
|
||
gpu_memory_utilization: 0.55
|
||
# BF16 for AR decode: memory-bandwidth bound on single-batch decode,
|
||
# bf16 halves HBM reads per step (~1.7x throughput on L4/A40).
|
||
dtype: bfloat16
|
||
enforce_eager: false
|
||
async_scheduling: true
|
||
enable_prefix_caching: false
|
||
max_num_batched_tokens: 512
|
||
max_model_len: 2048
|
||
devices: "0"
|
||
output_connectors:
|
||
to_stage_1: glm_tts_shm
|
||
default_sampling_params:
|
||
temperature: 1.0
|
||
top_k: 25
|
||
top_p: 0.8
|
||
max_tokens: 2048
|
||
min_tokens: 1
|
||
seed: 42
|
||
detokenize: false
|
||
hf_overrides:
|
||
sample_method: ras
|
||
ras_top_p: 0.8
|
||
ras_top_k: 25
|
||
ras_win_size: 10
|
||
ras_tau_r: 0.1
|
||
min_token_text_ratio: 2.0
|
||
max_token_text_ratio: 20.0
|
||
skip_mm_profiling: true
|
||
|
||
- stage_id: 1
|
||
max_num_seqs: 1
|
||
gpu_memory_utilization: 0.25
|
||
enforce_eager: true
|
||
max_model_len: 8192
|
||
max_num_batched_tokens: 2048
|
||
# Force float32 for the flow-matching DiT stage. The Euler ODE solver
|
||
# (10 steps × 2 forward passes each) accumulates rounding errors in half
|
||
# precision that manifest as audible hiss on H20/H100. float32 matches
|
||
# the reference implementation and eliminates the noise floor.
|
||
dtype: float32
|
||
devices: "0"
|
||
enable_prefix_caching: false
|
||
input_connectors:
|
||
from_stage_0: glm_tts_shm
|
||
default_sampling_params:
|
||
max_tokens: 2048
|
||
hf_overrides:
|
||
use_dit_cuda_graphs: true
|
||
disable_hybrid_kv_cache_manager: true
|
||
skip_mm_profiling: true
|