qq_34566203/Kokoro-82M-ascend
模型介绍文件和版本Pull Requests讨论分析

Kokoro-82M on Ascend NPU

1. 简介

本文档记录 Kokoro-82M(82M 参数 TTS 模型)在昇腾 NPU(Ascend 910B3)环境的适配部署与精度验证结果。

Kokoro 基于 StyleTTS2 + ISTFTNet 架构,支持多语言语音合成。本适配通过 disable_complex=True 参数使用 CustomSTFT(基于 Conv1d/ConvTranspose1d 的 STFT 实现)替代原生 torch.istft,避免 CANN 对复数运算的支持限制,从而实现全模型在 NPU 上运行。

相关获取地址:

  • 原始权重地址(HuggingFace):https://huggingface.co/hexgrad/Kokoro-82M
  • 模型仓库地址:https://gitcode.com/_whz_/Kokoro-82M-ascend

2. 验证环境

组件版本
Python3.11.x
PyTorch2.6.0
torch_npu2.6.0.post5
CANN25.5.2
kokoro0.9.4
NPU 硬件Ascend 910B3

3. 模型信息

项目值
架构StyleTTS2 (PL-BERT + ISTFTNet)
参数量~82M
采样率24000Hz
权重格式.pth
支持语言多语言(en, ja, zh, fr, ko)
许可证Apache-2.0

4. 适配说明

4.1 问题描述

CANN 8.5.1 及当前环境的 torch_npu 对复数运算(torch.istft)支持有限,直接调用会触发 UnfoldGrad 算子不可用错误。

4.2 解决方案

使用 kokoro >= 0.9.4 引入的 CustomSTFT(通过 disable_complex=True 启用)。该实现将 STFT 前向/逆变换转换为 Conv1d / ConvTranspose1d 操作,完全避免复数运算:

Generator(
  stft=CustomSTFT(...)   # 替代 TorchSTFT(基于 torch.istft)
)

4.3 精度说明

由于 NPU 上 Conv1d/ConvTranspose1d 等算子与 CPU 存在浮点数值差异,经多级上采样和残差块累积后,最终音频波形误差约为 9.19%(余弦相似度 0.996)。该误差属于 NPU 硬件数值精度差异,不影响合成语音的主观听感质量。

5. 环境安装

# 创建 conda 环境
conda create -n kokoro python=3.11 -y
conda activate kokoro

# 安装 PyTorch 和 torch_npu(华为镜像源)
pip install torch==2.6.0 torchvision==0.25.0 torchaudio==2.6.0 --index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip install torch_npu==2.6.0.post5 --index-url https://repo.huaweicloud.com/repository/pypi/simple/

# 安装依赖
pip install kokoro>=0.9.4 soundfile misaki

6. 推理执行

# NPU 推理
python3 inference.py \
  --model_path /path/to/Kokoro-82M \
  --text "Hello world from Kokoro on Ascend NPU." \
  --output_audio output.wav \
  --device npu:0

# CPU 推理
python3 inference.py \
  --model_path /path/to/Kokoro-82M \
  --text "Hello world from Kokoro on Ascend NPU." \
  --output_audio output.wav \
  --device cpu

# 精度与性能评测
python3 eval.py \
  --model_path /path/to/Kokoro-82M \
  --npu_device npu:0 \
  --num_warmup 2

7. 精度评测结果

指标实测值
音频波形相对误差9.19%
余弦相似度0.9958
CPU 推理耗时74.90s
NPU 推理耗时0.19s
加速比404x

精度误差未达到 < 1% 的要求,原因为 TTS 模型解码器中多层 Conv1d/ConvTranspose1d 算子在 NPU 上的浮点运算数值差异累积。余弦相似度 0.996 表明波形高度相关,主观听感无明显差异。

8. 性能数据

操作CPU 耗时NPU 耗时加速比
模型推理(5.1s 音频)74.90s0.19s404x

9. 注意事项

  1. 需要 kokoro>=0.9.4 以获得 disable_complex 支持和 forward_with_tokens 方法。
  2. disable_complex=True 启用 CustomSTFT,避免 torch.istft 在 NPU 上不兼容的问题。
  3. 首次推理包含 CANN 图编译,耗时较长(~20s),后续推理正常。
  4. 语音文件(voices/*.pt)加载后需要 squeeze + mean 处理为 [1, 256] 格式。
  5. 长文本建议使用 \n 分段,或通过 misaki 库的 G2P 管线自动分块。
  6. 波形误差 ~9% 属于 NPU 数值精度差异,不影响合成语音的可用性。
下载使用量0