Qwen3-TTS

Qwen3-TTS는 고품질 텍스트-음성 합성을 위한 Mimi 디코더가 탑재된 12Hz 코덱 언어 모델입니다. 모델은 4비트 양자화되어 있으며 Apple Silicon에서 실시간보다 빠르게 실행됩니다.

파이프라인

음성 합성은 3단계 파이프라인을 따릅니다:

  1. Talker — 입력 텍스트를 12.5 Hz로 첫 번째 코드북 토큰으로 변환하는 28 레이어 트랜스포머
  2. Code Predictor — 첫 번째 코드북 은닉 상태로부터 나머지 15개 코드북을 예측하는 5 레이어 트랜스포머
  3. Mimi Codec Decoder — 16개 코드북 토큰을 모두 24 kHz 오디오 파형으로 변환

아키텍처

Talker

Talker는 텍스트 입력으로부터 코덱 토큰을 생성하는 핵심 자동 회귀 모델입니다.

파라미터
레이어28
은닉 차원1024
Query 헤드16
Key/Value 헤드8 (GQA)
MLPSwiGLU
위치 인코딩RoPE

Code Predictor

첫 번째 코드북의 은닉 상태를 받아 나머지 15개 코드북을 병렬로 예측하는 경량 5 레이어 트랜스포머입니다. 이로써 스텝당 전체 Talker를 16번 실행하는 것을 피할 수 있습니다.

Mimi Codec Decoder

Mimi 디코더는 양자화된 코덱 토큰을 다시 오디오로 변환합니다:

  1. RVQ 디코드 (16 코드북)
  2. Pre-convolution (512 → 1024 채널)
  3. Pre-transformer (1024 → 512 병목, 8 레이어, SwiGLU + LayerScale)
  4. 업샘플 (2x, 2x)
  5. SEANet 디코더 (8x, 5x, 4x, 3x 업샘플 단계)
  6. 24 kHz 파형 출력

모델 변형

모델크기HuggingFace
Qwen3-TTS-0.6B Base (4비트)1.7 GBaufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-4bit
Qwen3-TTS-0.6B Base (8비트)2.4 GBaufklarer/Qwen3-TTS-12Hz-0.6B-Base-MLX-8bit
Qwen3-TTS-0.6B CustomVoice (4비트)1.7 GBaufklarer/Qwen3-TTS-12Hz-0.6B-CustomVoice-MLX-4bit
Qwen3-TTS-1.7B Base (4비트)3.2 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-4bit
Qwen3-TTS-1.7B Base (8비트)4.8 GBaufklarer/Qwen3-TTS-12Hz-1.7B-Base-MLX-8bit
Qwen3-TTS CoreML (FP16)2.1 GBaufklarer/Qwen3-TTS-CoreML

CoreML 백엔드

CoreML 백엔드는 Core ML을 통해 GPU에서 전체 Qwen3-TTS 파이프라인을 실행하여 MLX 종속성 없이 iOS와 macOS에 배포할 수 있게 합니다. 모델은 Apple의 컴퓨팅 스택에 최적화된 6개의 전용 서브모델로 분할됩니다:

  1. TextProjector — 텍스트 토큰 임베딩을 공유 은닉 공간으로 투영
  2. CodeEmbedder — 첫 번째 코드북 토큰과 제어 토큰을 임베딩
  3. MultiCodeEmbedder — 1–15번 코드북의 토큰을 임베딩
  4. CodeDecoder — 무상태 KV 캐시(최대 256 위치)를 갖는 28 레이어 자동 회귀 트랜스포머
  5. MultiCodeDecoder — 1–15번 코드북용 5 레이어 코드 프레딕터
  6. SpeechDecoder — Mimi 코덱 디코더, 16개 코드북 토큰을 24 kHz 오디오로 변환
# CoreML 합성
.build/release/audio speak "Hello, world!" --engine coreml -o hello.wav

# CoreML은 기본적으로 temperature 0.8을 사용합니다 (품질 출력을 위해 필수)
.build/release/audio speak "Long text here." --engine coreml --temperature 0.9 -o out.wav
CoreML KV 캐시 한계

CoreML CodeDecoder는 고정 256 위치 KV 캐시를 사용합니다. 긴 구문은 개별 문장으로 분할해야 합니다. 디코드 토큰은 프리필 이후 남은 캐시 슬롯에 맞도록 자동으로 제한됩니다.

CLI 사용법

텍스트로부터 음성 생성:

.build/release/audio speak "Hello, world!" --output hello.wav

옵션

플래그설명
--engineTTS 엔진: qwen3 (MLX, 기본값), coreml (CoreML/GPU), 또는 cosyvoice
--output, -o출력 WAV 파일 경로
--language언어 (기본값: english). 화자의 네이티브 방언을 사용하려면 생략.
--model모델 변형: base 또는 customVoice
--speaker화자 음색 (--model customVoice 필요)
--temperature샘플링 온도 (기본값: 0.3)
--top-kTop-k 샘플링 파라미터
--max-tokens생성할 최대 토큰 수 (기본값: 500)
--stream스트리밍 활성화 — 생성 중 오디오 청크를 방출
--first-chunk-frames첫 스트림 청크의 프레임 수
--chunk-frames이후 스트림 청크당 프레임 수
--batch-file배치 합성을 위한 한 줄당 한 발화 텍스트 파일 경로
--batch-size배치 모드에서 병렬 처리되는 발화 수

예제

# 기본 합성
.build/release/audio speak "The quick brown fox." -o fox.wav

# 스트리밍 출력
.build/release/audio speak "Long passage of text..." --stream -o stream.wav

# 파일로부터 배치 합성
.build/release/audio speak --batch-file sentences.txt --batch-size 4 -o output_dir/

스트리밍

--stream 플래그는 생성 중 청크 단위 오디오 출력을 활성화합니다. 전체 발화가 완료될 때까지 기다리는 대신, 토큰이 생성되는 대로 오디오가 청크로 방출됩니다. 각 청크의 크기를 제어하려면 --first-chunk-frames--chunk-frames를 사용하세요.

배치 모드

여러 발화를 합성하려면 한 줄당 하나의 발화를 포함한 텍스트 파일과 함께 --batch-file을 사용하세요. --batch-size 플래그는 병렬로 처리되는 발화 수를 제어합니다.

성능

M2 Max에서 Qwen3-TTS는 약 0.55의 RTF(실시간 대비 속도)를 달성하며, 이는 실시간보다 빠르게 음성을 생성한다는 것을 의미합니다. compile() 워밍업을 사용하면 각 스텝은 약 37 ms가 소요됩니다.

안전 한계

기본 최대값은 500 토큰이며, 이는 12.5 Hz에서 약 40초의 오디오를 생성합니다. 더 높은 값을 설정하면 Metal GPU 워치독 타임아웃을 초과할 위험이 있으며, Apple Silicon에서 GPU가 컴포지터와 공유되기 때문에 시스템 재부팅이 발생할 수 있습니다.

언어

Qwen3-TTS는 다언어 텍스트-음성 합성을 지원합니다. 모델은 입력 언어를 자동으로 감지하여 그에 맞게 음성을 생성합니다.

Swift API

import Qwen3TTS

let model = try await Qwen3TTSModel.loadFromHub()
let audio = try await model.speak("Hello, world!")
try audio.write(to: "hello.wav")