本文档记录 Darwin-TTS-1.7B-Cross 在华为昇腾 Ascend 910 NPU 环境的适配、推理与精度验证结果。
Darwin-TTS-1.7B-Cross 是世界上首个跨模态 FFN 迁移 TTS 模型。通过将 Qwen3-1.7B (LLM) 中 3% 的 FFN 权重直接融合到 Qwen3-TTS-1.7B (TTS) 的 talker 模块中,实现了情感增强的语音合成——全程无需训练。
| Blend (α) | Emotion | Quality | Status |
|---|---|---|---|
| 0% | Baseline | Normal | Original Qwen3-TTS |
| 1% | No change | Normal | Too subtle |
| 3% | Emotion appears | Normal | This model (default) |
| 5% | Emotion intensified | Normal | Max stable |
| 10% | Broken | Failed | Infinite generation |
Darwin-TTS-1.7B-Cross (4-module structure):
┌─────────────────────────────────────────────────────────┐
│ talker (28L Qwen3 LM backbone) │
│ └── 84 FFN tensors blended with LLM (α=3%) │ ← MODIFIED
│ └── talker.model.layers.N.mlp.{gate,up,down} │
├─────────────────────────────────────────────────────────┤
│ code_predictor (5L, h=1024) │ ← UNTOUCHED
├─────────────────────────────────────────────────────────┤
│ speech_tokenizer (12Hz RVQ codec) │ ← UNTOUCHED
├─────────────────────────────────────────────────────────┤
│ encoder/decoder (audio waveform) │ ← UNTOUCHED
└─────────────────────────────────────────────────────────┘NPU 适配关键技术点:
model.to("npu:0"))相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
torch-npu | 2.9.0.post1+gitee7ba04 |
torch | 2.9.0 |
transformers | 4.57.6 |
qwen_tts | 0.1.1 |
accelerate | 1.12.0 |
soundfile | 0.13.1 |
2 × Ascend 910~/.cache/modelscope/hub/models/FINAL-Bench/Darwin-TTS-1___7B-CrossQwen3-TTS-12Hz-1.7B-Base 复制 speech_tokenizer/ 子目录pip install modelscope
modelscope download --model FINAL-Bench/Darwin-TTS-1.7B-Cross
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base
# 补充 speech_tokenizer(Darwin-TTS 未包含此子目录)
BASE=~/.cache/modelscope/hub/models/Qwen/Qwen3-TTS-12Hz-1___7B-Base/speech_tokenizer
DARWIN=~/.cache/modelscope/hub/models/FINAL-Bench/Darwin-TTS-1___7B-Cross/speech_tokenizer
cp -r "$BASE" "$DARWIN"pip install qwen-tts soundfile safetensors numpy# 单语言推理
python3 inference.py --text "你好,我是达尔文人工智能。" --lang zh --output output.wav
# 多语言测试
python3 inference.py --test-all --max-tokens 300
# CPU vs NPU 对比测评
python3 inference.py --benchmark --lang zh
# 精度验证
python3 accuracy_test.pyfrom qwen_tts import Qwen3TTSModel
import torch
import torch_npu
model = Qwen3TTSModel.from_pretrained(
"FINAL-Bench/Darwin-TTS-1.7B-Cross",
device_map=None,
)
model.model = model.model.to("npu:0")
model.model.eval()
wavs, sr = model.generate_voice_clone(
text="Hello, Darwin TTS on Ascend NPU!",
ref_audio="reference.wav",
ref_text="ref",
x_vector_only_mode=True,
max_new_tokens=2048,
)基础检查:
# 生成验证音频(使用默认正弦波参考音频)
python3 inference.py \
--text "Hello, Darwin TTS is working on Ascend NPU!" \
--lang en \
--max-tokens 300 \
--output output_validation.wav验证结果:
output_validation.wav测试条件:max_new_tokens=300, do_sample=False, x_vector_only_mode=True,4 种语言各一次。
| 语言 | 输出时长 | 推理时间 | RTF |
|---|---|---|---|
| Korean (ko) | 5.84s | 35.16s | 6.02 |
| English (en) | 10.00s | 53.14s | 5.31 |
| Chinese (zh) | 13.36s | 71.84s | 5.38 |
| Japanese (ja) | 16.96s | 92.89s | 5.48 |
平均 RTF:5.55
注:RTF (Real-Time Factor) 表示每生成 1 秒音频需要的推理时间。当前为离线推理模式,适用于批量 TTS 生成场景。1.7B 参数 + 12Hz tokenizer 下该 RTF 为预期性能。
CPU 对比(中文场景):
| 指标 | NPU | CPU | 加速比 |
|---|---|---|---|
| 推理时间 | 70.56s | 415.61s | 5.89x |
| 总时间 | 77.15s | 418.13s | 5.42x |
使用自研精度验证工具 accuracy_test.py 对 NPU 计算精度做了 5 项评测。
| 测试项 | 精度 | MAE | 相对误差 | 结果 |
|---|---|---|---|---|
| 矩阵乘法 (MatMul) | float32 | 5.87e-06 | 0.000033% | PASSED |
| 层归一化 (LayerNorm) | float32 | 2.77e-08 | 0.000003% | PASSED |
| Softmax | float32 | 7.00e-10 | 0.000005% | PASSED |
| 层 | 参数 | MAE | MaxDiff | 结果 |
|---|---|---|---|---|
| Layer 0 | gate_proj.weight | 0.00000000 | 0.00000000 | OK |
| Layer 7 | up_proj.weight | 0.00000000 | 0.00000000 | OK |
| Layer 14 | down_proj.weight | 0.00000000 | 0.00000000 | OK |
| Layer 21 | gate_proj.weight | 0.00000000 | 0.00000000 | OK |
| Layer 27 | down_proj.weight | 0.00000000 | 0.00000000 | OK |
| 指标 | 数值 |
|---|---|
| 测试文本 | "Hello, Darwin TTS is working on Ascend NPU!" |
| 输出时长 | 10.96s |
| 采样率 | 24000Hz |
| RMS 能量 | 0.1382 |
| 推理时间 | 62.51s |
| RTF | 5.70 |
| 输出有效性 | YES |
| 功能测试 | PASSED |
综合结论:ALL TESTS PASSED — NPU 计算精度与 CPU 一致,推理功能正常。
参考音频:首次运行会自动生成正弦波参考音频(音质较低),建议提供真实录音以获得更好的语音克隆效果。使用方式:python3 inference.py --ref your_voice.wav
speech_tokenizer 缺失:Darwin-TTS-1.7B-Cross 模型目录不包含 speech_tokenizer/ 子目录,需要从 Qwen3-TTS-12Hz-1.7B-Base 复制或软链接。仓库内的 inference.py 已自动处理此问题。
RTF > 1:当前 NPU 推理为离线模式(RTF ≈ 5.5),如需实时推理,可考虑:
max_new_tokens 参数温度参数:do_sample=False 时 temperature 参数会被忽略(不影响结果)。需要随机采样时可设置 do_sample=True。
x_vector_only_mode:设置为 True 时仅使用说话人嵌入进行语音克隆,不需要参考文本;设置为 False 时启用 ICL 模式,需要提供 ref_text。
多语言支持:模型原生支持 10 种语言(ko/en/zh/ja/de/fr/ru/pt/es/it),已验证 4 种主要语言均可在 NPU 上正常工作。
| 文件 | 说明 |
|---|---|
inference.py | NPU 推理脚本(含单语言、多语言、benchmark 模式) |
accuracy_test.py | NPU 精度验证脚本(5 项自动化测试) |
run_benchmark.py | 性能测评运行脚本 |
benchmark_log.txt | 完整评测运行日志 |
output_validation.wav | 验证用输出音频样本 (EN, 10.96s) |
output_npu_zh.wav | 中文 TTS 输出样本 (13.36s) |
output_npu_en.wav | 英文 TTS 输出样本 (10.00s) |
Apache 2.0 — 继承自 Qwen3-TTS 原始许可