AIREITER

Ming-3.0-TTS 로컬 설치: 0.5B와 Tiny 중 무엇을 고를까?

마지막 업데이트: 2026-10-20 02:31:34

이름에 “Tiny”가 붙었다고 해서 로컬 실행이 더 쉬운 모델은 아니다. Ming-3.0-TTS에서는 반대로 접근하는 편이 낫다. 첫 설치는 dense 구조의 0.5B 체크포인트로 시작하고, 다화자 팟캐스트 생성이 꼭 필요할 때만 Tiny를 선택하자. 다만 소비자용 GPU에서의 기준은 아직 불분명하다. InclusionAI가 공개한 테스트 환경은 H800/H20이며, 최소 사양을 제시하지는 않았다.

환경을 만들기 전에 체크포인트부터 고르자

Ming-3.0-TTS의 두 체크포인트는 백본, 의존성 구성, 실행 진입점이 서로 다르다. 처음 설치한다면 0.5B가 합리적이다. 반면 배포 편의성보다 화자 유사도나 다화자 대화 생성이 중요하다면 더 큰 Tiny가 선택지다.

선택 기준Ming-3.0-tts-0.5BMing-3.0-tts-tiny
아키텍처Dense Qwen2.5-0.5B 백본Ling V3 MoE, 전체 7.9B / 활성 1.3B
공식 API 클래스ming_tts.MingTTSming_tiny.MingTinyTTS
주요 CLIinfer.pyinfer_tiny.py 및 원클릭 스크립트
기준 환경PyTorch 2.6, CUDA 12.4Python 3.10.15, PyTorch 2.7.1+cu118
문서화된 하드웨어H800-80GB 및 H20-96G 테스트 완료H800 권장
이 모델을 고를 결정적 이유더 작은 dense 체크포인트, 벤더 테스트에서 더 높은 한국어 정확도와 기본 제어 정확도다화자 팟캐스트 모드, 벤더 테스트에서 더 높은 중국어/영어 화자 유사도
공개된 체크포인트 용량OrcaRouter가 보고한 파일 비교 기준 약 2.96 GBHugging Face 기준 약 18 GB

두 체크포인트 모두 44.1 kHz 오디오를 생성하며, 7개 언어와 음성 복제·음성 디자인·감정·방언 등 작업별 제어 모드를 지원한다. 공식 저장소는 두 모델을 MIT 라이선스로 공개했으며, Tiny는 0.5B와 고정된 의존성 버전이 달라 전용 환경이 필요하다고 안내한다.

Tiny라는 이름은 저장된 가중치 크기가 아니라 MoE의 활성 연산량을 뜻한다. Tiny 모델 카드에 따르면 백본은 7.9B 파라미터이며, 토큰당 약 1.3B가 활성화된다. 저장소 크기는 약 18 GB다.

클론부터 체크포인트 검증까지, 로컬 설치 순서

안정적으로 구성하려면 두 모델을 별도 환경에 설치해야 한다. 공식 코드는 한 번만 클론하고, 선택한 체크포인트에 필요한 의존성만 설치한 뒤 가중치를 내려받는다. 모델을 로드하기 전에는 해당 모델용 사전 검사 스크립트를 실행한다.

0.5B 환경 설치하기

기본 설치 경로는 다음과 같다.

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

0.5B 모델 카드의 기준 구성은 PyTorch 2.6, CUDA 12.4, transformers==4.46.3다. FlashAttention은 선택 사항이며, 사용할 수 없을 때는 PyTorch SDPA를 사용한다. SDPA는 호환성을 확보하는 대안이지만, 프로젝트는 이때의 속도 저하 수치를 공개하지 않았다.

숫자, 날짜, 단위, 기호는 FST 텍스트 정규화를 거친다. 고정 버전의 Pynini는 Conda로 설치한다.

conda install -c conda-forge pynini==2.1.6

pynini에는 모든 환경에서 쓸 수 있는 범용 wheel이 없다. --no_text_normalization으로 이를 건너뛸 수는 있지만, 그러면 약어·날짜·숫자·기호가 원문 그대로 음성 합성기에 전달된다. 따라서 운영 기본값이 아니라 문제 해결용 스위치로 보는 편이 맞다.

Tiny는 반드시 별도 환경에 설치

Tiny를 0.5B 환경 위에 설치하면 안 된다. 공식 구성은 Python 3.10.15, CUDA 11.8 wheel, PyTorch 및 torchaudio 2.7.1, 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는 BF16 연산, 이식성 있는 MoE 루프, FP32 recurrent state를 사용한다. InclusionAI는 NVIDIA H800을 권장하며, 지원되는 CPU·Apple Silicon·GGUF·llama.cpp 경로는 문서에 없다.

체크포인트 다운로드와 검증

Hugging Face CLI를 쓰면 가중치를 예측 가능한 로컬 경로에 받을 수 있다.

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

Tiny는 모델 ID를 바꾸고 전용 검증기를 실행하면 된다.

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

사전 검사 스크립트는 가중치를 로드하지 않고 체크포인트와 토크나이저 구조를 검증한다. 중국 본토 사용자는 프로젝트 README에 문서화된 ModelScope 다운로드 명령을 대신 사용할 수 있다.

서버를 올리기 전 WAV 파일 하나부터 생성

가장 먼저 확인할 일은 저장소 CLI로 WAV 파일 하나를 만드는 것이다. 0.5B에서 음성 복제를 하려면 목표 텍스트, 참조 WAV, 그 파일의 정확한 전사문, --use_spk_emb가 필요하다. 전사문은 선택 메타데이터가 아니라 조건 입력 경로의 일부다.

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

출력은 44.1 kHz WAV여야 한다. 체크포인트 검증은 통과했는데 이 명령이 실패한다면, UI나 서버 레이어를 추가하기 전에 CUDA/PyTorch 호환성과 참조 파일부터 점검하자. Hugging Face 저장소는 체크포인트를 배포할 뿐이며, 두 모델 카드 모두 실질적인 추론에는 별도의 GitHub 저장소가 필요하다고 명시한다.

참조 녹음은 깨끗해야 하며 전사문은 정확해야 한다. 공식 문서는 이상적인 참조 길이를 공개하지 않았으므로, 문서화되지 않은 경험칙을 필수 검증 조건으로 만들면 안 된다.

하나의 음성 엔드포인트로 Ming-3.0-TTS 서빙하기

SGLang-Omni는 단일 GPU에서 어느 체크포인트든 POST /v1/audio/speech로 제공할 수 있다. Ming-3.0-TTS SGLang cookbook에 따르면 전처리는 CPU에서, 백본과 AudioVAE 디코더는 같은 GPU에서 실행된다.

체크포인트 하나를 실행한다.

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

이후 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

이 엔드포인트는 wav, mp3, flac, pcm을 받으며 기본값은 WAV다. 빈 입력은 HTTP 400을 반환한다. model 필드는 서버를 시작할 때 사용한 체크포인트와 일치해야 한다.

토큰 단위 스트리밍을 전제로 재생 구조를 설계해서는 안 된다. SGLang cookbook에 따르면 stream=true여도 생성이 끝날 때까지 기다린 뒤 하나의 완성된 PCM 응답 본문을 반환한다. 음성 복제에 쓸 참조 녹음도 하나만 허용하며, 두 번째 참조를 넣으면 거부된다.

제어 기능은 조합형 옵션이 아니라 작업 모드다

Ming-3.0-TTS의 제어 기능은 각각 독립된 작업 계약으로 구성된다. 사용할 수 있는 제어를 한 요청에 모두 섞기보다, 원하는 결과에 맞는 작업을 선택해야 한다.

목표0.5B 작업Tiny 작업중요한 입력 규칙
한 화자 음성 복제TTSseed참조 오디오와 정확한 전사문
독일어, 스페인어, 프랑스어, 한국어, 일본어MULTILINGUALmultilingual참조와 전사문, 명시적인 목표 언어
문장 안의 웃음, 한숨, 호흡TTSparalinguistic중국어 또는 영어, 문서화된 인라인 태그 사용
자연어 전달 방식 지시FREEFORMfreeform참조는 권장하지 않으며 다른 제어 작업과 조합 금지
텍스트로 음성 디자인VOICE_DESIGNvoice_design참조 오디오 없음
감정 설정EMOTIONemotion참조 오디오, 참조 전사문은 없음
속도, 피치, 볼륨 설정BASICbasic세 가지 제어값을 모두 제공
사천어 또는 광둥어DIALECTdialectlanguage_id 없음
다화자 스크립트지원하지 않음podcast화자별 참조와 전사문, 각 줄은 speaker_N:으로 시작

공식 cookbook은 자유 형식 모드를 음성 디자인, 내장 음성, 감정, 방언, 기본 속성과 조합할 수 없다고 명시한다. 한 문장 안에 여러 비언어적 이벤트를 넣는 것은 지원하지만, 저장소의 제한 사항은 단일 이벤트보다 안정성이 낮다고 설명한다.

점수가 보여주는 것과 보여주지 않는 것

공개된 근거만 놓고 보면 기본 선택은 0.5B, Tiny는 특화 모델에 가깝다. 공식 README에 재현된 Artificial Analysis 결과에서는 Ming-3.0-TTS가 2026년 10월 Controlled Voice Elo 1,069와 발음 견고성 93.2%를 기록했다. 다만 이 리더보드 수치는 Tiny의 품질을 증명하는 결과가 아니라 0.5B 모델에 해당한다.

벤더 평가에서는 체크포인트 간 뚜렷한 교환 관계가 보인다. Seed-TTS 평가 데이터에서 0.5B의 중국어/영어 WER은 0.800%/1.584%이며, Tiny는 0.820%/1.666%다. 반대로 화자 유사도는 Tiny가 두 언어 모두 높다. Tiny는 0.781/0.728, 0.5B는 0.758/0.691을 보고했다. 이 수치는 로컬에서 재현된 테스트가 아니라 InclusionAI의 평가 표에서 나온 값이다.

Tiny가 7개 언어 전반에서 항상 더 나은 것은 아니다. 공식 다국어 표에서는 한국어 CER이 Tiny 6.000%, 0.5B 1.728%로 제시된다. 팟캐스트는 Tiny만 지원하며, 팟캐스트 CER 2.03%, 조건부 화자 유사도 0.561, UTMOS 2.12를 보고했다. 다만 InclusionAI 역시 예측된 팟캐스트 오디오 품질을 개선 과제로 적고 있다.

실무적으로는 결론이 단순하다. 첫 배포, 한국어, 낮은 운영 복잡도에는 0.5B를 고르고, 다화자 팟캐스트 생성이 필요하거나 자체 참조 음성 평가에서 더 높은 Tiny의 화자 유사도가 충분한 가치를 보일 때 Tiny를 검토하면 된다.

실제 하드웨어에서 배포 가능 여부 검증하기

공식 설치에 성공했다고 소비자용 GPU에서 운영할 수 있다는 뜻은 아니다. 배포 판단 단계에서는 애플리케이션이 실제로 사용할 언어와 참조 오디오 조건에서 최대 VRAM, 첫 WAV 완성까지 걸리는 시간, 실시간 계수, 실패율, 출력 품질을 기록해야 한다.

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

이 지적은 공식 근거의 경계와 맞닿아 있다. 0.5B 문서는 H800-80GB 및 H20-96G 테스트 시스템을 언급하고, Tiny는 H800을 권장한다. 두 공식 모델 카드 모두 RTX 4090, RTX 3090, Windows, WSL2, macOS, 최소 VRAM, 실시간 계수 결과를 공개하지 않았다.

다음 순서로 통과 여부를 판단하자.

  1. 해당 모델의 사전 검사 스크립트를 실행하고, 체크포인트 리비전과 함께 출력을 보관한다.
  2. 내장 음성 또는 zero-speaker 경로로 짧은 WAV를 생성한 뒤, 운영 환경의 참조 형식으로 반복한다.
  3. 짧은 텍스트, 중간 길이 텍스트, 긴 운영용 텍스트에서 최대 VRAM과 실제 경과 시간을 측정한다.
  4. 배포할 모든 언어에서 명료도와 화자 정체성을 별도로 평가한다.
  5. 필요한 제어 기능을 각각 독립 작업으로 테스트하고, 지원되지 않는 조합에 의존하는 구성은 제외한다.
  6. 요청 타임아웃과 동시성을 포함해 전체 파형 API 동작을 부하 테스트한다.

이런 측정이 없다면 “로컬에서 실행된다”는 말은 문서화된 데이터센터 하드웨어에서 기준 스택이 로드되고 합성된다는 뜻에 불과하다.

Ming-3.0-TTS FAQ

Ming-3.0-TTS는 RTX 4090이나 3090에서 실행할 수 있나?

공식 릴리스는 최소 VRAM 수치나 소비자용 GPU 벤치마크를 공개하지 않았다. 0.5B 체크포인트가 더 그럴듯한 출발점이지만, 어느 카드로 갈지 결정하기 전에는 로컬에서 최대 할당량과 실시간 계수를 확인해야 한다.

Ming-3.0-TTS는 Windows 또는 macOS에서 작동하나?

공식 기준 환경은 CUDA 기반 Linux 스택이다. 공식 저장소에는 네이티브 Windows, WSL2, Apple Silicon, MLX, GGUF, llama.cpp 지원이 문서화되어 있지 않다.

Ming-3.0-TTS를 상업적으로 사용할 수 있나?

코드와 공개 체크포인트는 MIT 라이선스다. 관리자는 사용 지침에서 기만적이거나 동의 없는 사칭을 금지하며, 실제 녹음으로 오인될 수 있는 합성 음성에는 표시를 요청한다.

SGLang API는 오디오를 실시간 스트리밍하나?

아니다. 문서화된 stream=true 동작은 생성이 끝난 뒤 단일 PCM 응답 본문을 반환한다. 따라서 클라이언트는 점진 재생이 아니라 전체 응답 생성 방식으로 다뤄야 한다.

Ming-3.0-tts-0.5B와 Tiny 중 무엇을 써야 하나?

더 작은 체크포인트, 단순한 배포, 한국어 합성, 일반적인 단일 화자 작업에는 우선 0.5B를 사용하자. 다화자 팟캐스트 생성이 필수이거나, 로컬 평가에서 Tiny의 높은 중국어/영어 화자 유사도 점수가 실제 사용하는 음성에도 유효하다고 확인됐을 때 Tiny를 선택하면 된다.