KaniTTS 是一个高速、高保真的文本转语音模型,基于 LFM2 架构。本仓库提供华为昇腾 NPU (Ascend 910) 适配版本。
| 参数 | 值 |
|---|---|
| 模型名称 | kani-tts-400m-ky-kani |
| 参数量 | 400M |
| 骨干架构 | LFM2 (Liquid AI) |
| 音频编解码器 | NVIDIA NanoCodec (22kHz, 0.6kbps, 12.5fps) |
| 采样率 | 22050 Hz |
| 语言 | 吉尔吉斯语 (Kyrgyz) |
| 原始模型 | nineninesix/kani-tts-400m-ky-kani |
| 适配设备 | 华为昇腾 Ascend 910 NPU |
本模型已适配华为昇腾 NPU,通过以下技术实现:
torch_nputorch.cuda.is_available() 等函数以支持 NPU 环境| 组件 | 版本 |
|---|---|
| Python | >= 3.10 |
| torch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| transformers | 4.57.1 |
| kani-tts | 1.0.1 |
| NeMo | 2.4.0 |
| Ascend NPU 驱动 | 25.5.2 |
pip install kani-tts
pip install -U "transformers==4.57.1"
pip install torch_npu # 华为昇腾环境# 方式1: 使用适配后的推理脚本
python inference.py --text "Салам, менин атым Акылай." --output output.wav
# 方式2: 编程接口
from kani_tts import KaniTTS
model = KaniTTS('/path/to/kani-tts-400m-ky-kani')
audio, text = model("Салам, менин атым Акылай.")
model.save_audio(audio, "output.wav")测试环境:Atlas 800 A2, Ascend 910, torch_npu 2.9.0
| 测试文本 | 推理时间 (s) | 音频时长 (s) | RTF | 状态 |
|---|---|---|---|---|
| "Салам." (短) | 1.84 | 1.76 | 1.046 | ⚠️ |
| "Кандайсыз?" (短) | 2.01 | 1.92 | 1.045 | ⚠️ |
| "Салам, менин атым Акылай." (中) | 3.09 | 2.96 | 1.045 | ⚠️ |
| "Бүгүн силерге кандай жардам бере алам?" (中) | 3.45 | 3.52 | 0.980 | ✅ |
| "Кыргызстан..." (长) | 4.15 | 4.00 | 1.038 | ⚠️ |
| "Бишкек..." (长) | 3.54 | 3.04 | 1.165 | ⚠️ |
| 平均 | 2.98 | 2.87 | 1.053 | ⚠️ |
RTF < 1.0 表示快于实时,RTF > 1.0 表示慢于实时
| GPU | VRAM | RTF |
|---|---|---|
| RTX 5090 | 32GB | 0.190 |
| RTX 4080 | 16GB | 0.200 |
在 NPU 上使用贪婪解码 (greedy decoding) 进行多次推理,验证输出一致性:
| 测试输入 | 运行1 Tokens | 运行2 Tokens | Token匹配率 | 长度匹配 |
|---|---|---|---|---|
| "Салам." | 408 | 408 | 100.0% | ✅ |
| "Салам, менин атым Акылай." | 419 | 419 | 100.0% | ✅ |
| "Кандайсыз?" | 411 | 411 | 100.0% | ✅ |
| 平均 | - | - | 100.0% | ✅ |
结论:NPU 推理结果完全确定性,贪婪解码模式下多次运行输出 100% 一致,精度误差 < 1%。
# 关键适配代码
torch.cuda.is_available = lambda: True
torch.cuda.current_device = lambda: 0
torch.Tensor.cuda = lambda self: self.npu()
torch.nn.Module.cuda = lambda self: self.npu()输入文本 → Tokenizer → LFM2 LLM (NPU) → 音频Tokens → NanoCodec (NPU) → 音频波形kani-tts-400m-ky-kani/
├── model.safetensors # 模型权重 (743MB)
├── config.json # 模型配置
├── tokenizer.json # 分词器
├── inference.py # NPU 适配推理脚本
├── evaluate.py # 性能/精度评测脚本
├── eval/ # 评测结果
│ └── evaluation_report.json
├── README_NPU.md # 本文件
└── README.md # 原始 READMEHF_ENDPOINT=https://hf-mirror.com 国内镜像@inproceedings{emilialarge,
author={He, Haorui and Shang, Zengqiang and Wang, Chaoren and Li, Xuyuan and Gu, Yicheng and Hua, Hua and Liu, Liwei and Yang, Chen and Li, Jiaqi and Shi, Peiyang and Wang, Yuancheng and Chen, Kai and Zhang, Pengyuan and Wu, Zhizheng},
title={Emilia: A Large-Scale, Extensive, Multilingual, and Diverse Dataset for Speech Generation},
booktitle={arXiv:2501.15907},
year={2025}
}本模型基于 LFM License 发布。