Skip to content

[New Model] Ming-3-TTS (inclusionAI/Ming-3.0-tts-tiny) Support - #9119

Merged
lishunyang12 merged 30 commits into
vllm-project:mainfrom
yuanheng-zhao:model/ming3-tts-vllm32
Oct 21, 2026
Merged

lishunyang12 merged 30 commits into
vllm-project:mainfrom
yuanheng-zhao:model/ming3-tts-vllm32

Conversation

@yuanheng-zhao

@yuanheng-zhao yuanheng-zhao commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

PLEASE FILL IN THE PR DESCRIPTION HERE.

Contributor intent (required human answers)

All four questions must be answered by the human contributor before submission.
An agent may reuse explicit human answers with a public-safe source reference;
it must not invent, infer, or prefill missing answers. If an answer is missing
or materially ambiguous, ask the human and wait. Do not publish private
conversation content without authorization.

1. What outcome do you want to achieve?

Support deploying inclusionAI/Ming-3.0-tts-tiny with vLLM 0.32.

2. What is the highest-leverage variable for that outcome?

Successful model loading, service startup, speech generation, and basic features.

3. How will this work move that variable?

Add the integration needed to deploy and generate audio from unsupported.

4. Whose customer or user needs does this address, and what are those needs?

Users who need this model to generate audio for different TTS scenarios.

Purpose

Add Ming-3.0-TTS Tiny support (inclusionAI/Ming-3.0-tts-tiny), including checkpoint loading, AR/Flow decoding, streaming AudioVAE, voice cloning, instruction controls, and Podcast requests.

Co-authored with @runheyang

Test Plan

vLLM Version: 0.32.0

vLLM-Omni Commit: rebased on top of db23219

  • Unit tests, contract/transport, shared Ming, adapter, and speech API regression tests
  • Deployment and generation, check recipes/inclusionAI/Ming-3.0-TTS.md

Test Result

Example output files:

model_card_clone.wav
model_card_dialect.wav

BEFORE SUBMITTING: read CONTRIBUTING.md and run the precheck-pr skill with the code agent for a self-check against project conventions.

Note

To avoid agent spam, vLLM-Omni limits contributors without write access to 5 open PRs. If this blocks well-intentioned critical work, please contact a committer to request bypass list access.
(anything written below this line will be removed by GitHub Actions)

yuanheng-zhao and others added 23 commits October 19, 2026 14:54
…lize stop decision, cleanup exposed vars

Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Preserve the SFT checkpoint KDA gate settings while retaining legacy
configuration behavior. Read checkpoint sampling and decode limits, and
use those limits for speech request validation and default token budgets.
Keep the existing deployment defaults unchanged.

Source-Commit: 2407d27c3
Source-Snapshot: 460202bf1dd36cf9d95cc405a9849f62cf5d957b
Validation: applicable pre-commit hooks and Python syntax checks passed.
CPU pytest and model inference pending the prepared server environment.
AI assistance: Codex reorganized the changes and regression tests.

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Select softplus-scale posterior sampling at the existing shared encoder
call. Preserve the configured encoder depth, checkpoint tensors, dtypes
and request generator; avoid adding a forwarding-only encoder module.

Exercise configured encoder depths and retain the prefill RNG regression.
Source-Commits: 044122896, 9e3747406
Source-Snapshot: 460202bf1dd36cf9d95cc405a9849f62cf5d957b
Validation: applicable pre-commit hooks and Python syntax checks passed.
CPU pytest and reference-model inference await the server environment.
AI assistance: Codex reorganized and simplified the changes and tests.
Co-authored-by: duleilei.dll <duleilei.dll@antgroup.com>

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Reuse the shared MoE prompt builder with LingV3 token/EOS semantics.
Support short and complete structured controls, freeform instructions,
target languages, masked-speaker and no-speaker-slot conditioning.

Carry per-reference waveform boundaries and speaker order for Podcast;
validate its checkpoint alignment and resolve text-derived decode limits
through the request token budget and stop decision.

Source-Commits: a5f8e3df5, 08bea7068, c8d5a94ea, 9f362cff8, 1af88162a, 460202bf1
Validation: applicable pre-commit hooks, syntax and 22 isolated token,
language, instruction and decode-window logic checks passed. These checks
are not project pytest or real inference. Server validation is pending.
AI assistance: Codex reorganized the implementation and regression tests.

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Reuse the existing speaker cache for uploaded voice generations and
content-keyed reference clips. Scope per-reference entries by model,
preserve clip ordering and keep request prompt latents uncached.

Cover voice replacement, model changes, individual Podcast references
and additional-information serialization through the adapter.
Source-Commits: dfea23962, 08bea7068
Source-Snapshot: 460202bf1dd36cf9d95cc405a9849f62cf5d957b
Validation: applicable pre-commit hooks and Python syntax checks passed.
CPU pytest and concurrent real inference await the server environment.
AI assistance: Codex reorganized the implementation and regression tests.

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Use CFG 1.0 for the shared cond + cfg * (cond - uncond) formulation.
Validate and transport explicit CFG and temperature overrides. Leave the
Flow temperature unset when the request omits it, preserving the
checkpoint default instead of copying the AR stage temperature of zero.

Cover absent and explicit zero temperature, invalid controls, and runtime
state propagation. Align the existing vectorized test call with the
baseline method's required sample_eligible argument.
Source-Commits: 386d6a240, 9f362cff8, 460202bf1
Validation: applicable pre-commit hooks, syntax and 25 isolated source-logic
checks passed. Full CPU pytest and real inference await the server.
AI assistance: Codex reorganized the changes, fixed default propagation
and added regression coverage.

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Extend the existing recipe with controlled and emergent speech, ordered
Podcast references, checkpoint requirements and Flow sampling semantics.
Use curl requests rather than new model-specific Python examples.
Document retained reference duration limits and explicit seed handling.

Validation: all applicable pre-commit hooks passed for the nine changed
files. Seven Bash blocks passed bash -n; five request bodies parsed as JSON.
Subsequent branch validation on 2026-10-18: 137 CPU contract tests passed
(Python 3.12.15, PyTorch 2.13.0+cu130, Transformers 5.14.1, vLLM 0.29.0).
The same production files passed 26 sequential online smoke cases on one
NVIDIA L20X: finite, nonempty mono 44.1 kHz WAVs and byte-identical seeded
repeats. Runtime used context length 4096, process-scoped CUDA 13.0
compatibility libraries, checkpoint Flow temperature 1.5 and CFG 1.0.
Native-reference accuracy, concurrent serving and performance were not
evaluated; perceptual quality remains for listening review.
AI assistance: Codex drafted and checked the recipe updates.

Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
@yuanheng-zhao yuanheng-zhao added the new model add new model label Oct 19, 2026
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
@yuanheng-zhao
yuanheng-zhao force-pushed the model/ming3-tts-vllm32 branch from bd32e11 to 4e19895 Compare October 19, 2026 17:04
@yuanheng-zhao
yuanheng-zhao marked this pull request as ready for review October 19, 2026 17:07
@yuanheng-zhao yuanheng-zhao changed the title [New Model] Ming-3-TTS (inclusionAI/Ming-3.0-audio-tiny) Support [New Model] Ming-3-TTS (inclusionAI/Ming-3.0-tts-tiny) Support Oct 20, 2026
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>

@amy-why-3459 amy-why-3459 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked 4e198958..a43e5029. The seeding and step-count points look addressed: _get_request_generator now seeds the per-request torch.Generator with generator.seed() instead of torch.seed(), so the process-wide RNG is left alone, and DEFAULT_CFM_STEPS now drives the graph sampler, the warmup/request solver noise, and the solver_noise shape check (derived from len(t) - 1).

The y0 layout point on cfm_cudagraph.py is still open at this head: the graph path still draws (B, patch_size, latent_dim) directly (L130-135), while the eager FlowLoss.sample and _draw_request_cfm_noises draw (B, latent_dim, patch_size) and transpose. With patch_size > 1, a fixed tts_local_seed can still get different first-step noise depending on whether the step runs through the graph or eager path.

@hsliuustc0106 hsliuustc0106 added the high priority high priority issue, needs to be done asap label Oct 20, 2026 — with ChatGPT Codex Connector
@yuanheng-zhao yuanheng-zhao added ready label to trigger buildkite CI tts code related to tts models labels Oct 20, 2026
@yuanheng-zhao yuanheng-zhao added ready label to trigger buildkite CI tts code related to tts models and removed ready label to trigger buildkite CI tts code related to tts models labels Oct 20, 2026
@yuanheng-zhao

Copy link
Copy Markdown
Collaborator Author

PTAL @hsliuustc0106 @Gaohan123 The AMD/Intel CI error should be unrelated

@Sy0307 Sy0307 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three inline comments on prefill handling, eager-mode configuration, and an unused shared AudioVAE branch. These are based on static code tracing; I have not run model/GPU validation.

Comment thread vllm_omni/model_executor/models/ming3_tts/ming3_tts.py
Comment thread vllm_omni/model_executor/models/ming3_tts/ming3_tts_llm.py Outdated
Comment thread vllm_omni/model_executor/models/common/ming/audio_vae.py Outdated
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
@yuanheng-zhao
yuanheng-zhao requested a review from Sy0307 October 20, 2026 17:30
@yuanheng-zhao yuanheng-zhao added ready label to trigger buildkite CI tts code related to tts models and removed ready label to trigger buildkite CI tts code related to tts models labels Oct 20, 2026

@amy-why-3459 amy-why-3459 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looked at the two new commits (59737ef chunked-prefill conditioning, 3db61eb CFM graph gating). The chunked-prefill path looks right to me: speaker/prompt-audio positions are global, each slice is clipped against [offset, offset + len), the reference work happens once per request, and the cache is dropped in on_requests_finished. One concern on the shared Ming module, inline.

Comment thread vllm_omni/model_executor/models/ming_tts/ming_tts_llm.py Outdated
Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
@yuanheng-zhao yuanheng-zhao added ready label to trigger buildkite CI and removed ready label to trigger buildkite CI labels Oct 21, 2026
@lishunyang12
lishunyang12 merged commit 524f04c into vllm-project:main Oct 21, 2026
9 of 11 checks passed
ZhengWG pushed a commit to ZhengWG/vllm-omni that referenced this pull request Oct 21, 2026
…project#9119)

Signed-off-by: Yuanheng <jonathan.zhaoyh@gmail.com>
Signed-off-by: 禾波 <yangrunhe.yrh@antgroup.com>
Co-authored-by: 禾波 <yangrunhe.yrh@antgroup.com>
Co-authored-by: Co-Author runheyang <2591045161@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

high priority high priority issue, needs to be done asap new model add new model ready label to trigger buildkite CI tts code related to tts models

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants