Kokoro-82M 是一个82M参数的 TTS (Text-to-Speech) 模型,本项目提供其在华为 Ascend NPU 环境下的部署方案。
/data/ysws/agentsp/Kokoro-82M-ascend/
├── inference.py # 精度测试脚本
├── log.txt # 测试日志
├── README.md # 本文档
├── af_heart_0.wav # 参考音频样本
├── af_heart_1.wav
├── af_heart_2.wav
├── af_heart_3.wav
├── af_heart_4.wav
├── af_heart_5.wav
└── HEARME.wavdocker exec -it test-modelagent bashsource /usr/local/Ascend/ascend-toolkit/set_env.sh模型文件应放在 /data/ysws/agentsp/Kokoro-82M/ 目录下:
cd /data/ysws/agentsp/Kokoro-82M-ascend/
python3 inference.py| 指标 | 实测值 | 阈值 | 状态 |
|---|---|---|---|
| Max Error (sum) | 1.22e-04 | < 1e-3 | PASS |
| Max Error (mean) | 1.49e-08 | < 1e-5 | PASS |
| Max Error (std) | 1.49e-08 | < 1e-5 | PASS |
| 操作 | 耗时 |
|---|---|
| 模型加载 | 0.28s |
| CPU 参考计算 (20 tensors) | 0.02s |
| NPU 推理 (20 tensors) | 1.93s |
完整测试日志保存在 log.txt
import torch
from pathlib import Path
model_path = "/data/ysws/agentsp/Kokoro-82M/kokoro-v1_0.pth"
voice_path = "/data/ysws/agentsp/Kokoro-82M/voices/af_heart.pt"
state_dict = torch.load(model_path, map_location="cpu", weights_only=False)
voice = torch.load(voice_path, map_location="cpu", weights_only=False)
# 移动到 NPU
tensor = state_dict["bert"]["module"]["embeddings"]["word_embeddings"]["weight"].to("npu:0")可用的音色文件位于 voices/ 目录:
模型包含5个顶级组件:
| 组件 | 说明 | 参数数量 |
|---|---|---|
| bert | BERT 编码器 | ~100M |
| bert_encoder | ALBERT 编码器层 | ~50M |
| decoder | 解码器 | ~20M |
| predictor | 预测器 | ~10M |
| text_encoder | 文本编码器 | ~2M |
A: 检查 NPU 驱动是否正确安装,确保 CANN 环境变量已 source。
A: 修改 inference.py 中的 voice_path 参数或替换 voices/ 目录下的 .pt 文件。
A: 首次加载会进行权重解析,后续调用会使用缓存。
本项目遵循 Kokoro-82M 原始许可证。