016

Qwen3-TTS 1.7B CustomVoice:客製聲線、硬體門檻、繁中支援與訓練方式

Qwen3-TTS 1.7B CustomVoice:客製聲線、硬體門檻、繁中支援與訓練方式 封面圖

先把 Qwen3-TTS 家族裡的 CustomVoice、Base、VoiceDesign 分清楚,再看它的硬體需求、繁中支援、生成速度與微調路線。

Seer

2026-06-07

半夜在跑產品的 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.float16torch.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 來修飾,但它首包低延遲起播的特性,在做即時語音對話系統時是一個很大的優勢。

來源

聲音是靈魂的波形,在離散與連續的交界處,我們摸索著溫度的起伏。

Visits

--

Waiting for Cloudflare metrics.