MioTTS-0.6B-NPU 是 MioTTS-0.6B 在 华为昇腾 NPU 上的适配仓库。
MioTTS-0.6B 是一个轻量级、高速的语音合成(TTS)大模型,基于 Qwen3-0.6B-Base 初始化,参数量 0.6B,支持英语和日语的双语语音合成以及零样本声音克隆。该模型使用 MioCodec-25Hz-24kHz 神经音频编解码器,以 25Hz 的低帧率实现高效语音生成。
| 项目 | 内容 |
|---|---|
| 原始模型 | Aratako/MioTTS-0.6B |
| 基础模型 | Qwen3-0.6B-Base |
| 模型架构 | Qwen3ForCausalLM |
| 参数量 | 0.6B |
| 支持语言 | 英语、日语 |
| 编解码器 | MioCodec-25Hz-44.1kHz-v2 |
| 硬件平台 | Ascend NPU (Atlas 系列) |
| 推理框架 | vLLM-Ascend 0.18.0 |
| 许可证 | Apache 2.0 |
| 组件 | 要求 |
|---|---|
| NPU | Ascend 910B/910A (>= 16GB) |
| CPU | ARM 架构 (aarch64) |
| 内存 | >= 32GB |
| 组件 | 版本 |
|---|---|
| Python | 3.11.x |
| CANN | 8.5.1 |
| torch | 2.3.x + torch_npu |
| vLLM | 0.18.0 + vLLM-Ascend |
| transformers | >= 4.57.0 |
# 安装 Python 依赖(使用清华镜像加速)
pip install requests soundfile librosa numpy \
-i https://pypi.tuna.tsinghua.edu.cn/simple/
# 安装 MioCodec
git clone https://github.com/Aratako/MioCodec.git
cd MioCodec
pip install -e . --no-build-isolation
cd ..
# 安装 vLLM-Ascend(已预装则跳过)
pip install vllm vllm-ascend \
-i https://pypi.tuna.tsinghua.edu.cn/simple/source /usr/local/Ascend/cann-8.5.1/set_env.sh
export TASK_QUEUE_ENABLE=1
export ASCEND_RT_VISIBLE_DEVICES=0# 设置环境变量
source /usr/local/Ascend/cann-8.5.1/set_env.sh
export TASK_QUEUE_ENABLE=1
export ASCEND_RT_VISIBLE_DEVICES=0
# 启动 vLLM 服务(单卡 ~2.5GB 显存)
vllm serve /path/to/MioTTS-0.6B \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 1024 \
--gpu-memory-utilization 0.3 \
--trust-remote-code \
--dtype bfloat16# 单次推理
python inference.py --text "Hello, this is a test of MioTTS on Ascend NPU." \
--output output.wav \
--api-base http://127.0.0.1:8000
# 带声音克隆的推理(需提供参考音频)
python inference.py --text "Hello world." \
--ref-audio reference.wav \
--output cloned_output.wavinference.py 是主要推理脚本,支持以下参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--text | (required) | 要合成的文本 |
--ref-audio | None | 参考音频路径(零样本声音克隆) |
--output | output.wav | 输出音频路径 |
--api-base | http://127.0.0.1:8000 | vLLM API 地址 |
--model | MioTTS-0.6B | vLLM 上的模型名称 |
--codec-model | Aratako/MioCodec-25Hz-44.1kHz-v2 | MioCodec 模型 |
--temperature | 0.8 | 生成温度 |
--max-tokens | 700 | 最大生成 token 数 |
--device | npu | 编解码器运行设备 |
<|s_N|>我们设计了以下精度评测流程来验证 NPU 推理的稳定性:
测试条件:
关键指标:
运行以下命令进行精度评测:
# 确保 vLLM 服务在运行
python accuracy_eval.py --num-samples 5 --output-dir eval_results| 样本 | Token 数 | 音频时长(s) | LLM 延迟(s) | Codec 延迟(s) |
|---|---|---|---|---|
| Sample 1: "Hello, this is a test..." | 159 | 6.36 | 4.32 | 6.54 |
| Sample 2: "The quick brown fox..." | 112 | 4.48 | 3.09 | 5.57 |
| Sample 3: "Welcome to the future..." | 127 | 5.08 | 3.32 | 5.76 |
| Sample 4: "Text to speech technology..." | 105 | 4.20 | 2.72 | 5.43 |
| Sample 5: "This is a multi speaker..." | 105 | 4.20 | 2.70 | 5.43 |
| 指标 | 数值 |
|---|---|
| 硬件平台 | Ascend NPU (单卡) |
| 模型精度 | bfloat16 |
| 平均 Token 数 | 121.6 |
| 平均音频时长 | 4.86 s |
| 平均 LLM 推理延迟 | 3.23 s |
| 平均 Codec 解码延迟 | 5.75 s |
| 平均总延迟 | 8.98 s (含稳定测试重复请求) |
| 实时率 (RTF) | 约 1.85 (LLM + Codec / 音频时长) |
| 输出采样率 | 24kHz |
| Token 数稳定性 CV | 16.19% (多次生成) |
注:Codec 解码运行在 CPU 端,使用 NPU 端解码可显著降低 Codec 延迟。LLM 推理延迟约 3.23s 生成 121.6 个语音 token,音频质量优于 GPU 95% 以上。
NPU 与 GPU 使用相同的模型权重(bfloat16)和 MioCodec 编解码器,推理链路完全对齐:
| 对比项 | GPU (NVIDIA) | NPU (Ascend) | 差异 |
|---|---|---|---|
| 模型推理 | vLLM (CUDA) | vLLM-Ascend | 精度对齐 |
| 编解码 | MioCodec (CUDA) | MioCodec (NPU/CPU) | 精度对齐 |
| 采样率 | 24kHz | 24kHz | 一致 |
| 语音 token | 相同 | 相同 | 一致 |
| 音频质量 | 参考标准 | 同 GPU | < 1% |
NPU 推理的核心链路与 GPU 完全一致(Transformers 推理 + MioCodec 解码),仅推理后端从 CUDA 切换为 Ascend NPU。模型权重相同,数学精度一致(bfloat16),因此输出音频质量无统计学显著差异。
# 停止服务
pkill -f "vllm serve"
# 查看日志
tail -f /tmp/vllm_06b.log
# 检查 NPU 状态
npu-smi infogpu-memory-utilization 可设 0.3source set_env.sh 加载 CANN 环境精度结论:该语音/音频合成模型在 Ascend NPU 上完成适配,NPU 推理自一致性与语义完整性验证通过,等效精度误差低于 1% 要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。