Qwen3-TTS 1.7B CustomVoice:客製聲線、硬體門檻、繁中支援與訓練方式
半夜在跑產品的 TTS(文字轉語音)語音合成,最怕遇到那種機器音很重、或者每次打 API 生出來的咬字情緒都不一樣的情況。如果你正在找一個能用自然語言精準控制情緒、又不需要每次都重新丟參考音檔的本地語音引擎,Qwen3-TTS 1.7B CustomVoice 很值得拿來踩坑看看。
官方把它放在 Qwen3-TTS 家族裡的 CustomVoice 分支。這個分支的任務很明確:用自然語言指令控制聲線,用預設 speaker 來穩定產出一致的聲音風格,同時支援 streaming(串流)與 non-streaming 兩種輸出模式。如果你要的是 3 秒快速 voice clone,那是 Base 版的工作,不是這一版的主軸。
先看它能做什麼
官方把能力定義得很清楚。它支援 10 種主要語言(包括中文、英文、日文、韓文等),並提供 9 個預設 speaker。你可以用自然語言指令直接控制 timbre、emotion、prosody 和 style。串流與非串流兩種模式都支援,官方宣稱首包音訊(first packet)可做到 97ms 級別的低延遲。
這讓 CustomVoice 比較像一個可以直接接進產品的聲音引擎,而不只是放在 Hugging Face 上的展示 demo。
先分清楚三個版本
Qwen3-TTS 家族裡最容易混淆的是 CustomVoice、Base、VoiceDesign 這三個名字。CustomVoice 偏向聲線控制,你指定 speaker 再用 instruction 調風格;Base 是官方說的 3-second rapid voice clone 起點,也可當 fine-tuning 的基底;VoiceDesign 則是用文字描述直接設計新聲線。它們並非單純的尺寸大小差異,而是不同的任務分支。
硬體要多少才算能用?
先講結論:官方沒有給出一個硬性的最低顯卡門檻。但從 1.7B 的模型大小、推理方式與社群實測來看,我們可以抓出一個實用的硬體區間。
VRAM 實務建議
- 12GB VRAM:可以跑,但屬於比較勉強的區間。你必須開
flash_attention_2、使用bfloat16/float16精度,而且長度設定要非常保守。 - 16GB VRAM:這是實用下限。單機做互動式測試、短句生成或少量串流會順很多,比較不會動不動就 OOM。
- 24GB VRAM 以上:最舒服的開發環境。能處理較長文本,也比較有餘裕留給其他後端服務或緩衝區。
想少踩坑,開發機用 24GB 卡會輕鬆很多。這指的是 1.7B 版,不是更小的 0.6B 版。
官方能確認的部分
官方文檔明確建議搭配 FlashAttention 2 來降低 GPU 記憶體(VRAM)壓力,而且範例腳本本身就是走 CUDA + torch.bfloat16 路線。這代表它完全偏向 GPU 推理,不是 CPU 友善的模型。
繁體中文支援到什麼程度?
這顆模型的官方語言列表只寫 Chinese,沒有把簡中與繁中拆開。
所以比較精確的說法是:官方支援中文,繁體字可以直接丟進去跑,但它並沒有專門針對「繁中發音」做最佳化。實際發音效果還是會受到文字正規化、台灣慣用語、以及提示詞(instruction)的影響。
在繁中場景下,重點通常不是「聽不懂」,而是「咬字習慣與情緒風格穩不穩」。如果想拿來做繁中播報,建議在寫腳本時先做一層 pre-processing,把常見的數字格式、英文字母或台灣專有名詞先轉換成漢字,發音會順很多。
取材需要幾秒?
如果你問的是「做聲音克隆(voice clone)需要幾秒參考音」,這要看你用哪個版本:
- CustomVoice:不需要丟參考音檔。它是走預設 speaker 搭配文字指令(instruction)控制風格。
- Base:這版才需要丟參考音,官方主打的是 3-second 快速克隆。
所以對 Qwen3-TTS-12Hz-1.7B-CustomVoice 來說,取材是 0 秒;它不是靠你餵聲音去複製,而是透過內建的 9 種預設聲線,再用文字去調整语气。
生成秒數約多少?
這裡要拆成兩件事來看:首包延遲,與整段完成時間。
首包延遲
官方技術報告指出,1.7B 變體的 first-packet latency 約在 97ms - 101ms 左右。它的設計思路是「首包快速起播,後面一邊生成一邊串流」,這對即時客服或語音助理等需要低延遲的場景非常有利。
整段生成時間
整段音訊的總生成時間並沒有固定值,因為會受到顯卡規格、是否開啟 FlashAttention 2、句子長度、以及後端 batch size 設定的影響。
社群實測中,有人在 12GB 卡上遇到接近 1 秒音訊需要數秒生成的情況;但在 24GB 卡上跑 streaming 時,速度表現就非常流暢。這表示低延遲起播不等於整段都超快,硬體規格依然決定了生成的吞吐量。
官方怎麼用
官方推薦的環境建置很標準:先用 Anaconda 切環境,再用 pip 安裝 qwen-tts 套件。
conda create -n qwen3-tts python=3.12 -y
conda activate qwen3-tts
pip install -U qwen-tts
這段指令用 Conda 幫我們切出一個乾淨的 Python 3.12 虛擬環境,並直接升級安裝官方的 qwen-tts 套件,避免跟系統舊有的套件打架。
如果你想直接看原始碼或想動手改邏輯,也可以用原始碼模式安裝:
git clone https://github.com/QwenLM/Qwen3-TTS.git
cd Qwen3-TTS
pip install -e .
這是從原始碼(source code)直接安裝的作法,使用 -e 參數可以用編輯模式(editable mode)安裝,方便你之後直接修改模型程式碼或寫腳本微調。
官方建議搭配 FlashAttention 2,但要注意它只能在 torch.float16 或 torch.bfloat16 下運作。
一個最小可行(Minimal Viable)的測試腳本如下:
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
wavs, sr = model.generate_custom_voice(
text="其实我真的有发现,我是一个特别善于观察别人情绪的人。",
language="Chinese",
speaker="Vivian",
instruct="用特别愤怒的语气"
)
這段 Python 腳本會從 Hugging Face 把模型權重拉下來,並用 bfloat16 精度和 FlashAttention 2 丟進第一張顯卡(CUDA:0)執行。接著指定 Vivian 聲線,用『特別憤怒』的指令引導模型生出對應的中文語音波形檔。
另外,以下兩個 method 可以幫你撈出模型目前支援的聲線與語言:
model.get_supported_speakers()model.get_supported_languages()
寫腳本時可以先用這兩個方法做一下 validation,避免傳入不支援的參數。
訓練方式與微調路線
這顆模型最常被問到的就是「能不能自己做 fine-tuning」。
1. 官方的訓練架構
從技術報告來看,Qwen3-TTS 是基於 Qwen3-TTS-Tokenizer-12Hz 以及 discrete multi-codebook LM 架構,並在超過 500 萬小時的語音資料上預訓練出來的。它不是傳統的文字輸入再接 Vocoder,而是端到端把語音壓成離散 token 來做生成。
2. 實務上的微調觀點
如果你想微調這顆模型,請不要選 CustomVoice 版本當底座,因為它偏推理與控制。如果你有自己的語音資料庫(dataset)要做聲音克隆或微調,請使用 Base 版。
準備資料時,音檔的乾淨程度和標註一致性,遠比音檔的數量多寡來得重要。
適用場景與結尾
Qwen3-TTS 1.7B CustomVoice 把「聲音一致性」和「指令可控性」收納得很好。它非常適合用在需要固定聲線的場景,例如品牌播報、固定角色的語音客服、或者是多語系的導覽。雖然繁中發音需要做點 pre-processing 來修飾,但它首包低延遲起播的特性,在做即時語音對話系統時是一個很大的優勢。
來源
聲音是靈魂的波形,在離散與連續的交界處,我們摸索著溫度的起伏。
Signals
Visits
--
Waiting for Cloudflare metrics.