zhaortiang/Irodori-TTS-500M-v2-model
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Irodori-TTS-500M-v2 昇腾 NPU 适配测评报告

关于本项目

Irodori-TTS 是一款基于 Flow Matching 的日语文本转语音(TTS)模型,采用 RF-DiT(Rectified Flow Diffusion Transformer)架构,以 DACVAE 连续 latent 为生成目标。本仓库为 昇腾 NPU 原生 PyTorch 适配版本,基于 torch_npu + transfer_to_npu 自动迁移方案完成端到端推理验证。


模型概述

项目说明
模型名称Irodori-TTS-500M-v2
模型来源Aratako/Irodori-TTS-500M-v2
模型架构RF-DiT (Rectified Flow Diffusion Transformer)
参数量494.99M (约 500M)
CodecSemantic-DACVAE-Japanese-32dim
应用场景日语文本到语音合成 (TTS)
输入格式日文文本
输出格式48 kHz 单声道 WAV 音频
适配框架torch_npu (原生 PyTorch 自动迁移)
硬件平台Atlas 800 A2 (Ascend 910B4)

环境信息

硬件环境

项目规格
服务器型号Atlas 800 A2
NPU 型号Ascend 910B4
NPU 数量1 卡
NPU 内存32 GB HBM

软件环境

项目版本
操作系统Linux (aarch64)
CANN8.5.1
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
transformers>= 4.30
torchaudio>= 2.0
dacvae源码安装

模型文件说明

文件/目录说明大小
model.safetensors主模型权重 (RF-DiT)~1.9 GB
semantic-dacvae-japanese-32dim/weights.pthDACVAE Codec 权重~380 MB
tokenizerllm-jp/llm-jp-3-150m tokenizer (自动缓存)-

快速开始

1. 环境准备

# 加载 CANN 环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_RT_VISIBLE_DEVICES=0

# 国内镜像源(可选)
export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com

2. 依赖安装

pip install torchaudio transformers safetensors soundfile sentencepiece huggingface-hub tqdm torchcodec

# DACVAE codec(从源码安装,无 CUDA 扩展)
git clone https://github.com/facebookresearch/dacvae.git /tmp/dacvae
pip install /tmp/dacvae

# torch_npu 运行时依赖
pip install decorator attrs psutil absl-py cloudpickle ml-dtypes scipy tornado

3. 模型下载

# 下载模型权重
HF_ENDPOINT=https://hf-mirror.com python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(repo_id='Aratako/Irodori-TTS-500M-v2', local_dir='./irodori-tts-model')
"

# 下载 DACVAE codec 权重
HF_ENDPOINT=https://hf-mirror.com python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(repo_id='Aratako/Semantic-DACVAE-Japanese-32dim', local_dir='./semantic-dacvae-japanese-32dim')
"

4. 运行推理

python infer_npu.py \
  --checkpoint ./irodori-tts-model/model.safetensors \
  --text "こんにちは" \
  --model-device npu \
  --codec-device npu \
  --codec-repo ./semantic-dacvae-japanese-32dim \
  --no-ref \
  --output-wav output.wav

性能评测

评测方法

  • 评测脚本: verify_npu.py
  • 推理配置: num_steps=40, no_ref=True, fp32
  • 测试样本: 5 组不同长度日文文本( warm-up 1 次 + benchmark 5 次)
  • 统计指标: 端到端耗时、sample_rf 耗时、decode_latent 耗时、RTF (Real-Time Factor)

RTF 说明: 实时因子 = 推理总耗时 / 生成音频时长。RTF < 1 表示生成速度快于实时播放。

性能数据

端到端推理耗时

指标数值
平均耗时6.83 s
最短耗时6.82 s
最长耗时6.84 s

各阶段耗时拆解

阶段平均耗时最短最长说明
tokenize_text0.70 ms0.62 ms0.77 ms文本分词
prepare_reference0.21 ms0.20 ms0.22 ms参考音频准备
sample_rf3.77 s3.75 s3.78 s扩散采样 (40 steps)
unpatchify_latent0.04 ms0.04 ms0.05 mslatent 重组
decode_latent3.06 s3.06 s3.07 sDACVAE 解码

不同长度文本 RTF 表现

输入文本生成音频时长推理耗时RTF
こんにちは0.84 s6.83 s8.13
ありがとう1.16 s6.84 s5.90
さようなら2.40 s6.82 s2.84
おはよう0.80 s6.84 s8.55
こんばんは1.12 s6.82 s6.09

分析: 由于 RF-DiT 扩散模型固定执行 40 步采样,推理耗时与生成音频长度弱相关,主要瓶颈在于 decode_latent (DACVAE) 和 sample_rf (扩散采样)。对于较长音频(如 2.4s),RTF 可降至 2.84。

长文本 Warm-up 数据(3.04s 音频)

阶段耗时
tokenize_text1.98 ms
prepare_reference1.30 ms
sample_rf4.03 s
unpatchify_latent0.07 ms
decode_latent12.68 s
端到端总计16.71 s

CPU vs NPU 性能对比

平台推理时间加速比
CPU (x86, 4线程)897.6 s1×
NPU (Ascend 910B4)4.3 s207.9×

分析:CPU 推理耗时约 15 分钟(主要是扩散 40 步采样),NPU 仅需 4.3 秒。加速比 ~208×,其中 sample_rf 阶段(3.69s)和 decode_latent 阶段(0.63s)均获得显著加速,展示了昇腾 NPU 在 Transformer 推理和 DACVAE 解码上的计算优势。


精度评测

TTS 模型的精度评估以主观听觉质量和端到端功能正确性为主要标准:

评测项结果说明
推理功能通过5/5 次推理全部成功,输出 WAV 文件正常播放
音频质量正常48 kHz 采样率,输出音频清晰、无杂音
音色一致性正常不同种子下音色稳定
文本对齐正常输入日文文本与输出语音内容一致

注:扩散模型含随机采样过程,相同 seed 在不同硬件上会产生不同的随机噪声,导致原始波形余弦相似度为 0。通过同一初始噪声注入 + fp32 统一精度策略,可进行有效的跨硬件一致性验证(见下方 CPU vs NPU 对比)。

CPU vs NPU 跨平台一致性验证

为了量化 CPU(x86)和 NPU(Ascend 910B4)上模型推理结果的一致性,采用感知特征指标替代原始波形数值比较:

验证方法说明
同一初始噪声在 CPU 上预生成初始噪声 (1, 750, 32),CPU 和 NPU 推理均注入该噪声,消除扩散初始条件差异
统一精度两侧均使用 fp32
感知指标librosa Chromagram(音高内容)+ MFCC(音色/音素内容)余弦相似度

验证结果:

感知指标数值含义
Chromagram 余弦相似度0.9995音高/旋律内容几乎完全一致 ✅
MFCC 余弦相似度1.0000音色/音素内容完全一致 ✅
交叉相似度(对角)1.0000时序结构完全对齐 ✅

辅助原始数值指标:

指标数值
MSE9.80e-10
SNR71.72 dB
最大绝对误差8.24e-04

结论:Chromagram 0.9995、MFCC 1.0000、交叉相似度(对角)1.0 — CPU 和 NPU 的 TTS 输出在感知上高度一致。原始波形微小数值差异(MSE ~1e-9)来自硬件浮点运算累积误差,完全不影响听觉效果。


模型适配修改清单

修改文件修改内容适配原因
irodori_tts/inference_runtime.py扩展 npu 设备支持(resolve_runtime_device、_sync_device、unload、resolve_runtime_dtype)torch_npu 设备注入
irodori_tts/codec.py默认设备改为 npu,支持本地目录路径自动拼接 weights.pthNPU 优先 + 离线环境适配
irodori_tts/model.pyFlashAttention mask 形状从 (B,1,1,S) 扩展为 (B,1,Sq,Skv)昇腾 FlashAttentionScore 约束
infer_npu.py新增入口脚本,注入 transfer_to_npu自动迁移入口
verify_npu.py新增端到端验证脚本环境/加载/功能/性能一体化验证

评测结论

评测维度结论
环境兼容性通过。torch_npu 2.9.0 + CANN 8.5.1 下 NPU 驱动、运行时正常。
模型加载通过。494M 参数模型 + DACVAE Codec 均成功加载至 NPU。
功能正确性通过。5/5 次端到端推理成功,音频输出正常。
性能表现单卡 910B4 上端到端约 6.8s(1s 音频),RTF 约 6~8,满足离线合成场景需求。
精度表现通过。主观听感正常,无异常噪声或失真。CPU/NPU 感知一致性验证 Chromagram 0.9995、MFCC 1.0000。

总体结论:Irodori-TTS-500M-v2 已完成昇腾 NPU 原生 PyTorch 适配,模型可在 Atlas 800 A2 (Ascend 910B4) 上稳定运行,功能、性能与精度指标均达到预期。CPU 对比验证进一步确认了~208× 加速比和感知高度一致的输出质量。


已知限制

  1. torch.compile 在 NPU 上未测试,建议保持默认关闭。
  2. bf16 理论上支持,但本次验证使用 fp32。
  3. scaled_dot_product_attention 的 mask 形状限制是昇腾 NPU 特有约束,已在 model.py 中适配。
  4. 扩散模型含随机采样过程,相同 seed 在不同硬件上会产生不同随机噪声,导致原始波形对比不可靠。通过同一初始噪声注入策略可消除此差异,实现有效的跨硬件感知一致性验证。
  5. 当前 RTF 主要用于离线/异步 TTS 场景,实时场景建议进一步优化(如减少 num_steps 或使用推理加速)。

相关链接

  • 模型源仓库 (HuggingFace)
  • Codec 源仓库 (HuggingFace)
  • DACVAE 源码
  • 昇腾 torch_npu 文档