| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| CANN | 8.2.RC1 | 快速安装CANN |
| Python | 3.10.12 | - |
| torch | 2.7.1+cpu | - |
| torch_npu | 2.7.1.dev20250724 | - |
执行如下命令:
apt update
apt install jq
pip insatll peft==0.17.0
pip install torchvision==0.22.1+cpu
pip install torchaudio==2.7.1+cpu
pip install vllm==0.10.0
pip install vllm-ascend==0.10.0rc1如果torch版本被动升级,如下命令重新安装:
pip install torch==2.7.1+cpu --no-deps最快捷地使用 Qwen3-TTS 的方式是从 PyPI 安装 qwen-tts Python 包。该包会自动安装所需的运行时依赖项,并允许您加载任意已发布的 Qwen3-TTS 模型。
运行
pip install -U qwen-tts以下为已发布的 Qwen3-TTS 模型的介绍及下载信息。请根据您的需求选择并下载合适的模型。
| Tokenizer 名称 | 描述 |
|---|---|
| Qwen3-TTS-Tokenizer-12Hz | Qwen3-TTS-Tokenizer-12Hz 模型,可将输入语音编码为离散码,并能将其解码还原为语音。 |
| 模型 | 特性 | 语言支持 | 流式生成 | 指令控制 |
|---|---|---|---|---|
| Qwen3-TTS-12Hz-1.7B-VoiceDesign | 根据用户提供的描述进行音色设计。 | 中文、英文、日文、韩文、德文、法文、俄文、葡萄牙文、西班牙文、意大利文 | ✅ | ✅ |
| Qwen3-TTS-12Hz-1.7B-CustomVoice | 通过用户指令对目标音色进行风格控制;支持 9 种优质音色,涵盖性别、年龄、语言和方言的多种组合。 | 中文、英文、日文、韩文、德文、法文、俄文、葡萄牙文、西班牙文、意大利文 | ✅ | ✅ |
| Qwen3-TTS-12Hz-1.7B-Base | 基础模型,支持从用户提供的 3 秒音频中快速克隆音色;可用于微调(FT)其他模型。 | 中文、英文、日文、韩文、德文、法文、俄文、葡萄牙文、西班牙文、意大利文 | ✅ | |
| Qwen3-TTS-12Hz-0.6B-CustomVoice | 支持 9 种优质音色,涵盖性别、年龄、语言和方言的多种组合。 | 中文、英文、日文、韩文、德文、法文、俄文、葡萄牙文、西班牙文、意大利文 | ✅ | |
| Qwen3-TTS-12Hz-0.6B-Base | 基础模型,支持从用户提供的 3 秒音频中快速克隆音色;可用于微调(FT)其他模型。 | 中文、英文、日文、韩文、德文、法文、俄文、葡萄牙文、西班牙文、意大利文 | ✅ |
此次案例将介绍一下Qwen3-TTS在语音生成、语音设计和语音克隆的应用,着重讲解Qwen3-TTS-12Hz-1.7B-CustomVoice、Qwen3-TTS-12Hz-1.7B-VoiceDesign和Qwen3-TTS-12Hz-1.7B-Base的使用步骤。
pip install modelscope
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base创建脚本
vim CustomVoice.py脚本如下:
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"./Qwen3-TTS/Qwen3-TTS-12Hz-1.7B-CustomVoice",
device_map="npu:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
# single inference
wavs, sr = model.generate_custom_voice(
text="其实我真的有发现,我是一个特别善于观察别人情绪的人。",
language="Chinese", # Pass `Auto` (or omit) for auto language adaptive; if the target language is known, set it explicitly.
speaker="Vivian",
instruct="用特别愤怒的语气说", # Omit if not needed.
)
sf.write("./Qwen3-TTS/output_custom_voice.wav", wavs[0], sr)然后运行
python CustomVoice.py注意:device_map="auto"容易报错,报错日志见如下:
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, npu:1 and npu:0! (when checking argument for argument tensors in method wrapper_NPU__cat)
主要原因:
transformers 库在某些版本中默认启用多 NPU 支持,特别是当使用 from_pretrained 加载模型时
解决办法:
显式指定设备,即device_map="npu:0"
创建脚本
vim voice_design.py脚本如下:
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"./Qwen3-TTS/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
device_map="npu:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
# single inference
wavs, sr = model.generate_voice_design(
text="哥哥,你回来啦,人家等了你好久好久了,要抱抱!",
language="Chinese",
instruct="体现撒娇稚嫩的萝莉女声,音调偏高且起伏明显,营造出黏人、做作又刻意卖萌的听觉效果。",
)
sf.write("./Qwen3-TTS/output_voice_design.wav", wavs[0], sr)
# batch inference
wavs, sr = model.generate_voice_design(
text=[
"哥哥,你回来啦,人家等了你好久好久了,要抱抱!",
"It's in the top drawer... wait, it's empty? No way, that's impossible! I'm sure I put it there!"
],
language=["Chinese", "English"],
instruct=[
"体现撒娇稚嫩的萝莉女声,音调偏高且起伏明显,营造出黏人、做作又刻意卖萌的听觉效果。",
"Speak in an incredulous tone, but with a hint of panic beginning to creep into your voice."
]
)
sf.write("./Qwen3-TTS/output_voice_design_1.wav", wavs[0], sr)
sf.write("./Qwen3-TTS/output_voice_design_2.wav", wavs[1], sr)然后运行
python voice_design.py创建脚本
vim voice_clone.py脚本如下:
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"./Qwen3-TTS/Qwen3-TTS-12Hz-1.7B-Base",
device_map="npu:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
ref_audio = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-TTS-Repo/clone.wav"
ref_text = "Okay. Yeah. I resent you. I love you. I respect you. But you know what? You blew it! And thanks to you."
wavs, sr = model.generate_voice_clone(
text="I am solving the equation: x = [-b ± √(b²-4ac)] / 2a? Nobody can — it's a disaster (◍•͈⌔•͈◍), very sad!",
language="English",
ref_audio=ref_audio,
ref_text=ref_text,
)
sf.write("./Qwen3-TTS/output_voice_clone.wav", wavs[0], sr)然后运行
python voice_clone.py