Repository navigation
[New Model] Support IndexTTS 2.5 - #5957
Conversation
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
Recipe quick startFull recipe: 1. Installpip install -e '.[indextts2]'Prepare the native IndexTTS 2.5 model bundle and a short, clean reference WAV for voice cloning. 2. Start the serverMODEL=/path/to/indextts-2.5
vllm serve "$MODEL" \
--omni \
--host 0.0.0.0 \
--port 8092 \
--trust-remote-code \
--deploy-config vllm_omni/deploy/indextts2_5.yaml3. Generate speech with a cloned voicepython examples/online_serving/text_to_speech/indextts2/speech_client.py \
--api-base http://127.0.0.1:8092 \
--model-version 2.5 \
--model "$MODEL" \
--ref-audio /path/to/reference.wav \
--lang zh \
--speed 1.0 \
--text '你好,这是 IndexTTS 二点五语音合成测试。' \
--output indextts2_5.wavThe same command supports:
4. Optional named-voice reuseUpload the reference audio once: curl -X POST http://127.0.0.1:8092/v1/audio/voices \
-F 'audio_sample=@/path/to/reference.wav' \
-F 'consent=user-consent-id' \
-F 'name=indextts_demo_voice'Then replace --voice indextts_demo_voiceThe validated output is 22.05 kHz mono WAV. H200 E2E covered voice cloning at 1.0x and 2.0x; Whisper-small matched the normalized input exactly for both files. |
23a5b72 to
f515ee3
Compare
|
On the benchmarking side: does IndexTTS 2.5 need the dedicated The registry header states the intent directly: Every other TTS model in that directory (Qwen3-TTS, Higgs v3, VoxCPM2, the MOSS-TTS family) is registered that way, so this would be the first per-model driver script. The README gives two reasons for the dedicated driver, and both look already covered by the shared harness:
The shared path is also strictly more capable: IndexTeam/IndexTTS-2.5:
supported_tasks: [voice_clone]
backend: openai-audio-speech
endpoint: /v1/audio/speech
trust_remote_code: true
task_extra_body:
voice_clone:
extra_params:
lang: en
text_normalization: trueOne genuine gap I hit while checking this: One thing worth verifying rather than assuming: The fixed n=500, concurrency 4/8/16/32 acceptance workload is worth keeping either way, just as a documented command in the README where the other models' reference workloads already live. |
|
Blocking on two items:
Validation: all changed CPU/core tests passed locally ( |
f515ee3 to
11e49e8
Compare
|
Thanks @linyueqian and @hsliuustc0106. I addressed the actionable code-review items in Shared TTS benchmark harness
Native speed with raw/SSE responses
Focused validation on the H200 environment after the rebase: 236 passed across the shared benchmark CLI, speech serving, and TTS adapter test suites. Ruff format/check also pass locally. I am still collecting the requested H200 profiler top-ops, peak-VRAM, and repeated-inference memory evidence. I will post those separately rather than treating the existing functional E2E result as sufficient performance validation. The official IndexTTS 2.5 native runner/checkpoint is not currently publicly reproducible, so any native-vs-vLLM comparison will be clearly scoped to an available pinned local bundle/source revision instead of presented as an authoritative upstream baseline. |
Additional validation evidenceI collected the requested profiler and repeated-inference evidence on the current PR path. One correction to the earlier smoke-test wording: the remote host alias is Functional qualityFixed-seed Chinese request:
Both outputs were 22,050 Hz mono WAV and matched the requested sentence after punctuation normalization. Peak VRAM and repeated-inference leak checkThe standard two-stage deploy config was used on one L20X GPU. NVML was sampled every 50 ms during a profiled request:
The stage-0 startup accounting reported 3.57 GiB weights, 0.13 GiB peak activation, 0.22 GiB non-Torch memory, 0.06 GiB CUDA graph memory, and a 52.0 GiB configured KV-cache allocation. The reported 59,845 MiB is therefore the configured serving footprint, not a claim that the weights require 60 GiB. After one warmup, 10 sequential unprofiled requests produced:
Median: 760.5 ms; min/max: 649/825 ms. NVML reported 59,845 MiB after every request, with no monotonic growth across the run. PyTorch profiler top CUDA operatorsStage 0 (AR talker), excluding the inclusive execution-context annotations:
Stage 1 (S2Mel + vocoder), excluding the inclusive execution-context annotations:
The complete local artifacts include per-stage gzipped Kineto traces, profiler tables, memory snapshots, the 50 ms NVML sample log, and the repeat-run TSV. Native-runner comparison boundaryI also rechecked the official public channels. The official For that reason I am providing the reproducible vLLM profiling, memory-stability, latency, and ASR evidence above, while explicitly not fabricating a native-vs-vLLM comparison until IndexTeam publishes or identifies a pinned public 2.5 runner. |
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com>
Signed-off-by: Sysy <1370724210@qq.com> Co-authored-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com>
Purpose
Add production-ready IndexTTS 2.5 support to vLLM-Omni using the official two-stage inference path:
Omniinference.zhen) frontend mode.speedrange[0.5, 2.0].The model payload and local asset contracts are fail-fast: missing conditioning, malformed model bundles, incompatible latent policy, and sequence-length mismatches return explicit errors instead of silent truncation, public-asset substitution, or zero audio.
Common-path changes are intentionally limited to explicit model/config/pipeline registration, tokenizer-free stage initialization, a model-scoped missing-HF-config path, native-speed adapter capability, the full-payload scheduler entry, and an IndexTTS-2.5-opted request-end payload snapshot. This PR does not include process environment locking, profiler changes, NPU changes, generic diffusion-attention changes, model-path sniffing, or the experimental latent deployment.
A recipe, online/offline examples, tests, and a Seed-TTS benchmark driver are included.
Test Plan
vLLM Version: 0.26.0
vLLM-Omni Commit:
f515ee3fbased on6ae7ff78(main)Environment used for E2E validation:
Validation performed:
/v1/audio/speechE2E withvoice_01.wavreference voice, fixed seed 0, and native speeds 1.0 and 2.0.Test Result
E2E input:
Both transcriptions exactly match the normalized input. The 2.0x duration is approximately 50% of the 1.0x duration, confirming that model-native speed control is applied once and produces the expected timing change.