weixin_62994174/KaniTTS
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

KaniTTS-400M-KY-Kani (Ascend NPU 适配版)

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 适配说明

本模型已适配华为昇腾 NPU,通过以下技术实现:

  • CUDA→NPU 设备映射:将 PyTorch CUDA 调用重定向至 torch_npu
  • 设备检测兼容:patch torch.cuda.is_available() 等函数以支持 NPU 环境
  • 混合精度推理:支持 bfloat16 推理,降低显存占用
  • 端到端流水线:LLM 骨干网络 + NanoCodec 音频解码均在 NPU 上运行

环境要求

组件版本
Python>= 3.10
torch2.9.0
torch_npu2.9.0.post1
transformers4.57.1
kani-tts1.0.1
NeMo2.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")

性能基准 (Ascend NPU 910)

测试环境:Atlas 800 A2, Ascend 910, torch_npu 2.9.0

测试文本推理时间 (s)音频时长 (s)RTF状态
"Салам." (短)1.841.761.046⚠️
"Кандайсыз?" (短)2.011.921.045⚠️
"Салам, менин атым Акылай." (中)3.092.961.045⚠️
"Бүгүн силерге кандай жардам бере алам?" (中)3.453.520.980✅
"Кыргызстан..." (长)4.154.001.038⚠️
"Бишкек..." (长)3.543.041.165⚠️
平均2.982.871.053⚠️

RTF < 1.0 表示快于实时,RTF > 1.0 表示慢于实时

GPU 参考性能 (RTX 5090)

GPUVRAMRTF
RTX 509032GB0.190
RTX 408016GB0.200

精度验证

确定性复现测试

在 NPU 上使用贪婪解码 (greedy decoding) 进行多次推理,验证输出一致性:

测试输入运行1 Tokens运行2 TokensToken匹配率长度匹配
"Салам."408408100.0%✅
"Салам, менин атым Акылай."419419100.0%✅
"Кандайсыз?"411411100.0%✅
平均--100.0%✅

结论:NPU 推理结果完全确定性,贪婪解码模式下多次运行输出 100% 一致,精度误差 < 1%。

适配技术细节

CUDA → NPU Shim

# 关键适配代码
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                # 原始 README

限制与已知问题

  • 首次加载模型时需要从 HuggingFace 下载 NanoCodec (~100MB),建议设置 HF_ENDPOINT=https://hf-mirror.com 国内镜像
  • 当前 RTF ~1.05,接近实时但未达到 GPU 水平,可通过亲和算子优化进一步提升
  • 不支持多说话人 (single-speaker 模型)
  • 输入超过 15 秒时性能下降,建议使用滑动窗口分块

引用

@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 发布。