weixin_72661020/mms-tts-uzbek-qiz-ovozi_v2
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

#+NPU

mms-tts-uzbek-qiz-ovozi_v2 on Ascend NPU

1. 简介

本文档记录 mms-tts-uzbek-qiz-ovozi_v2 在华为昇腾 NPU 环境的适配与验证结果。该模型是基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)架构的乌兹别克语语音合成模型,支持西里尔字母输入,输出 16kHz 采样率的 WAV 音频。

适配过程中发现 VITS 模型的相对位置注意力机制(Relative Position Attention)在 Ascend NPU 上存在 constant_pad_nd 算子兼容性问题,通过 CPU fallback 策略解决。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/MuzaffarSharofitdinov/mms-tts-uzbek-qiz-ovozi_v2
  • 权重下载地址(HuggingFace 镜像):https://hf-mirror.com/MuzaffarSharofitdinov/mms-tts-uzbek-qiz-ovozi_v2
  • 原始仓库(GitCode):https://gitcode.com/hf_mirrors/MuzaffarSharofitdinov/mms-tts-uzbek-qiz-ovozi_v2

参考文档:

  • https://huggingface.co/docs/transformers/model_doc/vits
  • https://arxiv.org/abs/2106.06103

2. 验证环境

组件版本
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
transformers5.0.0.dev0
CANN8.5.1
Python3.11.14
  • NPU:1 张 Ascend 910B4
  • 模型路径:./model_files
  • 模型大小:约 138MB(safetensors 格式,拆分为 2 个分卷)
  • 采样率:16000 Hz
  • 词汇表大小:45(乌兹别克语西里尔字母 + 数字 + 特殊符号)

3. 服务启动

环境准备

pip install torch torch_npu transformers scipy

下载模型权重

方式一:使用 model_files/ 目录中的 split parts(需先执行 reassemble.py):

python3 model_files/reassemble.py

方式二:通过 HuggingFace 镜像下载:

HF_ENDPOINT=https://hf-mirror.com python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(
    'MuzaffarSharofitdinov/mms-tts-uzbek-qiz-ovozi_v2',
    local_dir='./model_files'
)
"

运行推理

# 单句推理
python inference.py --text "Салом дунё" --output output.wav

# 从文件批量推理
python inference.py --input input.txt --output output_dir/

# 指定设备和语速
python inference.py --text "Салом дунё" --device npu:0 --speaking_rate 1.2 --output output.wav

运行评测

# 精度评测(12 句乌兹别克语测试)
python accuracy_run.py

# 性能基准测试
python accuracy_run_perf.py

# 质量检查
python check_accuracy_run_perf.py

输入文本必须为乌兹别克语西里尔字母。模型词汇表包含以下字符:

а б в г д е ж з и й к л м н о п р с т у ф х ч ш ъ ь э ю я ё ў ғ қ ҳ 0-6 – —

4. Smoke 验证

使用 5 组测试用例验证基础功能:

测试用例输入文本结果音频时长推理耗时
basic_greetingСалом дунёPASS3.07s45.9s
uzbek_special_charsЎзбекистон — бизнинг ватанимизPASS4.67s0.13s
longer_sentenceБугун кунон яхши кунPASS2.88s0.10s
single_charҚPASS1.68s0.09s
numbers1 2 3 4 5PASS2.67s0.10s

验证结果:5/5 全部通过。

说明:basic_greeting 首次推理耗时较长(45.9s),包含模型加载和 NPU 算子编译的开销。后续推理均在 0.15s 以内完成。

5. 性能参考

测试条件:5 组乌兹别克语文本,每组预热 3 次后连续测试 10 次。

指标数值
Mean latency0.0463 s
Median latency (P50)0.0440 s
P90 latency0.0473 s
P99 latency0.0571 s
Mean RTF0.0086
Throughput20.46 samples/s
  • RTF(Real-Time Factor)越低越好,0.0086 表示生成 1 秒音频仅需 0.0086 秒
  • 吞吐量 20.46 samples/s 表示每秒可合成约 20 句语音

各文本长度性能:

文本长度(字符)平均延迟平均音频时长RTF
短文本 (5-10)0.0405s3.09s0.0133
中文本 (20-50)0.0442s5.10s0.0087
长文本 (100+)0.0542s14.00s0.0039

吞吐量(30s 压力测试):

场景吞吐量 (samples/s)音频生成倍率
短文本25.21 句/秒75× 实时
中文本20.24 句/秒106× 实时
长文本15.94 句/秒229× 实时

7. 注意事项

NPU 兼容性问题

VITS 模型的相对位置注意力机制在 Ascend NPU 上存在已知兼容性问题。具体表现为 nn.functional.pad 在处理某些形状的张量时会报错:

RuntimeError: constant_pad_nd: NPU function error: call aclnnConstantPadNd failed

解决方案:在推理前对 VitsAttention 类的 _relative_position_to_absolute_position 和 _absolute_position_to_relative_position 方法进行 monkey-patch,将 pad 操作移至 CPU 执行后转回 NPU。详见 inference.py 中的 apply_npu_vits_patch() 函数。

输入文本要求

  • 输入必须为乌兹别克语西里尔字母(不支持拉丁字母)
  • 不在词汇表中的字符会被忽略(可能导致空输入)
  • 建议输入文本长度在 5-200 字符之间

性能说明

  • 首次推理包含 NPU 算子编译开销,耗时较长(约 45 秒)
  • 后续推理延迟稳定在 0.1-0.15 秒
  • 模型约 350MB,NPU 显存占用约 500MB

Ascend NPU 精度评测

NPU 推理验证:

指标数值
测试用例数12
精度结论---

精度评测源代码和日志详见 eval/ 目录。