AIREITER

Ming-3.0-TTS Local Setup: 0.5B or Tiny?

Last Updated: 2026-10-20 02:20:21

A model called “Tiny” normally sounds like the easy local option. Ming-3.0-TTS reverses that assumption: start with the dense 0.5B checkpoint, and choose Tiny only when multi-speaker podcast generation is a requirement. The catch is hardware evidence—InclusionAI documents H800/H20 testing, not a minimum consumer-GPU target.

Pick the checkpoint before creating an environment

Ming-3.0-TTS has two checkpoints with different backbones, dependency sets, and entry points. The 0.5B model is the sensible first installation; Tiny earns its larger footprint when speaker similarity or multi-speaker dialogue matters more than deployment simplicity.

Decision pointMing-3.0-tts-0.5BMing-3.0-tts-tiny
ArchitectureDense Qwen2.5-0.5B backboneLing V3 MoE, 7.9B total / 1.3B active
Official API classming_tts.MingTTSming_tiny.MingTinyTTS
Main CLIinfer.pyinfer_tiny.py and one-click scripts
Reference environmentPyTorch 2.6, CUDA 12.4Python 3.10.15, PyTorch 2.7.1+cu118
Documented hardwareH800-80GB and H20-96G testedH800 recommended
Exclusive reason to choose itSmaller dense checkpoint; stronger Korean accuracy and basic-control accuracy in vendor testsMulti-speaker podcast mode; stronger Chinese/English speaker similarity in vendor tests
Published checkpoint footprintAbout 2.96 GB, according to the file comparison reported by OrcaRouterAbout 18 GB on Hugging Face

Both checkpoints generate 44.1 kHz audio, support seven languages, and use separate task modes for voice cloning, voice design, emotion, dialect, and other controls. The official repository releases both under MIT and states that Tiny needs a dedicated environment because its pinned dependencies differ from 0.5B.

The word “Tiny” describes active MoE compute, not the stored weights. The Tiny model card reports 7.9B backbone parameters, approximately 1.3B active per token, and an approximately 18 GB repository.

The local setup, from clone to verified checkpoint

A reliable Ming-3.0-TTS local setup keeps the two models in separate environments. Clone the official code once, install only the requirements for the selected checkpoint, download its weights, and run the matching preflight script before loading the model.

Install the 0.5B environment

The basic repository path is short:

git clone https://github.com/inclusionAI/Ming-3.0-tts.git
cd Ming-3.0-tts
conda create -n ming-tts python=3.10 -y
conda activate ming-tts
pip install -r requirements.txt

The 0.5B model card says the reference setup uses PyTorch 2.6, CUDA 12.4, and transformers==4.46.3. FlashAttention is optional; PyTorch SDPA is the fallback. That fallback establishes compatibility, but the project publishes no speed penalty for it.

Numbers, dates, units, and symbols use FST text normalization. Install the pinned Pynini build through Conda:

conda install -c conda-forge pynini==2.1.6

pynini has no universal wheel. --no_text_normalization bypasses it, but doing so sends raw abbreviations, dates, numbers, and symbols to the synthesizer, so it is a troubleshooting switch rather than a production default.

Install Tiny in a separate environment

Do not install Tiny over the 0.5B environment. The official setup pins Python 3.10.15, CUDA 11.8 wheels, PyTorch and torchaudio 2.7.1, and transformers==4.46.3:

conda create -n ming-tiny python=3.10.15 -y
conda activate ming-tiny
pip install -r requirements-tiny.txt

Tiny uses BF16 computation, a portable MoE loop, and FP32 recurrent state. InclusionAI recommends an NVIDIA H800, while the documentation provides no supported CPU, Apple Silicon, GGUF, or llama.cpp path.

Download and verify either checkpoint

The Hugging Face CLI can place weights in a predictable local directory:

pip install "huggingface_hub[cli]"
hf download inclusionAI/Ming-3.0-tts-0.5B \
  --local-dir Ming-3.0-tts-0.5b
python tools/preflight.py --model_path Ming-3.0-tts-0.5b

For Tiny, replace the model ID and run its own verifier:

hf download inclusionAI/Ming-3.0-tts-tiny \
  --local-dir Ming-3.0-tts-tiny
python tools/preflight_tiny.py --model_path Ming-3.0-tts-tiny

The preflight scripts validate checkpoint and tokenizer structure without loading the weights. Users in mainland China can use the ModelScope download command documented in the project README instead.

Generate one file before adding a server

The first useful validation is one WAV generated through the repository CLI. For 0.5B voice cloning, provide the target text, a reference WAV, its exact transcript, and --use_spk_emb; the transcript is part of the conditioning path, not optional metadata.

python infer.py \
  --model_path Ming-3.0-tts-0.5b \
  --task TTS \
  --language_id English \
  --text "The release candidate passed every audio check." \
  --prompt_wav_path reference.wav \
  --prompt_text "This is the exact speech in the reference recording." \
  --use_spk_emb \
  --output output/first.wav

The output should be a 44.1 kHz WAV. If checkpoint verification passes but this command fails, inspect CUDA/PyTorch compatibility and the reference file before adding a UI or server layer. The Hugging Face repositories distribute checkpoints; both model cards state that practical inference requires the separate GitHub repository.

A reference recording should be clean and its transcript exact. The official docs do not publish an ideal reference duration, so do not turn an undocumented rule of thumb into a hard validation requirement.

Serve Ming-3.0-TTS through one speech endpoint

SGLang-Omni can expose either checkpoint through POST /v1/audio/speech on one GPU. The Ming-3.0-TTS SGLang cookbook places preprocessing on CPU and the backbone plus AudioVAE decoder on the same GPU.

Start one checkpoint:

sgl-omni serve --model-path inclusionAI/Ming-3.0-tts-0.5B

Then request a WAV:

curl http://127.0.0.1:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "model": "inclusionAI/Ming-3.0-tts-0.5B",
    "input": "The local speech endpoint is ready.",
    "response_format": "wav",
    "seed": 123
  }' \
  --output speech.wav

This endpoint accepts wav, mp3, flac, or pcm; WAV is the default. An empty input returns HTTP 400. The model field must match the checkpoint used to start the server.

Do not design playback around token-style streaming. The SGLang cookbook says stream=true still waits for generation to finish and returns one complete PCM response body. It also accepts only one reference recording for cloning; a second reference is rejected.

Controls are task modes, not mix-and-match flags

Ming-3.0-TTS controls are separate task contracts. A request should select the task that matches the desired output instead of combining every available control in one call.

Goal0.5B taskTiny taskImportant input rule
Clone one voiceTTSseedReference audio plus exact transcript
German, Spanish, French, Korean, or JapaneseMULTILINGUALmultilingualReference and transcript; explicit target language
Inline laughs, sighs, or breathsTTSparalinguisticChinese or English; use documented inline tags
Natural-language delivery directionFREEFORMfreeformNo reference is recommended; do not combine with other control tasks
Design a voice from textVOICE_DESIGNvoice_designNo reference audio
Set emotionEMOTIONemotionReference audio; no reference transcript
Set speed, pitch, and volumeBASICbasicSupply all three controls
Sichuanese or CantoneseDIALECTdialectNo language_id
Multi-speaker scriptNot supportedpodcastOne reference and transcript per speaker; each line begins speaker_N:

The official cookbook explicitly says free-form mode cannot be combined with voice design, built-in voices, emotion, dialect, or basic attributes. Multiple paralinguistic events in one sentence are supported, but the repository limitations say stability remains weaker than for single events.

What the scores do and do not prove

The strongest public evidence favors 0.5B as the default and Tiny as a specialist. Artificial Analysis results reproduced in the official README put Ming-3.0-TTS at 1,069 Controlled Voice Elo and 93.2% pronunciation robustness in October 2026, but those leaderboard claims apply to the 0.5B model rather than proving Tiny’s quality.

Vendor evaluations show a real checkpoint tradeoff. On Seed-TTS evaluation data, 0.5B reports Chinese/English WER of 0.800%/1.584%, while Tiny reports 0.820%/1.666%. Tiny reports higher speaker similarity in both languages: 0.781/0.728 versus 0.758/0.691 for 0.5B. These figures come from InclusionAI’s evaluation tables, not a reproduced local test.

Tiny is not uniformly better across its seven languages. The official multilingual table reports Korean CER of 6.000% for Tiny versus 1.728% for 0.5B. Tiny alone supports podcasts and reports 2.03% podcast CER, 0.561 conditional speaker similarity, and 2.12 UTMOS, but InclusionAI also lists predicted podcast audio quality as an improvement target.

The practical reading is narrow: choose 0.5B for the first deployment, Korean, and lower operational complexity; evaluate Tiny for podcast generation or when its measured voice similarity on your own references justifies the larger checkpoint.

Validate the deployment on your hardware

Official setup success does not establish production viability on a consumer GPU. A deployment gate should record peak VRAM, time to first completed WAV, real-time factor, failure rate, and output quality on the exact language and reference-audio conditions the application will use.

“No GGUF/llama.cpp yet, and no consumer-GPU benchmarks.” — @TeksEdge on X

That observation matches the official evidence boundary: the 0.5B docs name H800-80GB and H20-96G test systems, while Tiny recommends H800. Neither official model card publishes RTX 4090, RTX 3090, Windows, WSL2, macOS, minimum-VRAM, or real-time-factor results.

Use this pass/fail sequence:

  1. Run the matching preflight script and preserve its output with the checkpoint revision.
  2. Generate a short WAV with a built-in or zero-speaker path, then repeat with the production reference format.
  3. Measure peak VRAM and wall time for short, median, and long production text.
  4. Score intelligibility and speaker identity separately across every shipping language.
  5. Test each required control as its own task; reject configurations that rely on unsupported combinations.
  6. Load-test the full-waveform API behavior, including request timeouts and concurrency.

Without those measurements, “runs locally” means only that the reference stack can load and synthesize on documented datacenter hardware.

Ming-3.0-TTS FAQ

Can Ming-3.0-TTS run on an RTX 4090 or 3090?

The official release does not publish a minimum VRAM figure or consumer-GPU benchmark. The 0.5B checkpoint is the more plausible starting point, but verify peak allocation and real-time factor locally before committing to either card.

Does Ming-3.0-TTS work on Windows or macOS?

The official reference environments are CUDA-based Linux stacks. No native Windows, WSL2, Apple Silicon, MLX, GGUF, or llama.cpp support is documented in the official repository.

Is Ming-3.0-TTS commercially usable?

The code and released checkpoints are MIT-licensed. The maintainers prohibit deceptive or non-consensual impersonation in their usage guidance and ask that synthetic speech be labeled when it could be mistaken for a real recording.

Does the SGLang API stream audio in real time?

No. The documented stream=true behavior completes generation before returning a single PCM response body, so clients should treat it as full-response generation rather than incremental playback.

Should I use Ming-3.0-tts-0.5B or Tiny?

Use 0.5B first for a smaller checkpoint, simpler deployment, Korean synthesis, and ordinary single-speaker work. Use Tiny when multi-speaker podcast generation is mandatory or local evaluation confirms that its higher Chinese/English speaker-similarity scores transfer to your voices.