weixin_62994174/F5-TTS_Emilia-ZH-EN
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

F5-TTS Emilia-ZH-EN Ascend NPU 适配

F5-TTS 是基于 Flow Matching (CFM) 的文本转语音(TTS)模型,支持中英文语音合成与零样本声音克隆。模型架构采用 DiT (Diffusion Transformer) 骨干网络 + Vocos 声码器。

本仓库提供 F5-TTS Emilia-ZH-EN 在**华为昇腾 NPU(Ascend910)**上的适配推理方案及评测报告。

1. 模型简介

属性说明
模型名称SWivid/F5-TTS_Emilia-ZH-EN (F5TTS_v1_Base)
任务类型文本到语音(Text-to-Speech, TTS)
架构DiT Backbone + Flow Matching (CFM) + Vocos Vocoder
参数量~330M
支持语言中文 (zh) + 英文 (en)
采样率24000 Hz
特色能力Zero-shot 语音克隆, 中英混合合成
适配硬件Ascend910_9362
精度模式float16 (推理)
适配状态✅ 已验证
上游仓库SWivid/F5-TTS
模型下载ModelScope

2. 验证环境

组件版本 / 型号
NPUAscend910_9362 × 2 (64GB HBM)
CANN25.5.2
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
f5-tts1.1.20
Python3.11.14
OSLinux (ARM64)

3. 快速开始

3.1 环境准备

# 验证 NPU 可用性
python -c "import torch; import torch_npu; print(torch.npu.device_count())"
# 输出: 2

# 验证 NPU 型号
python -c "import torch; print(torch.npu.get_device_name(0))"
# 输出: Ascend910_9362

3.2 安装依赖

pip install f5-tts safetensors omegaconf soundfile torch_npu

3.3 下载模型权重

# 从 ModelScope 下载
pip install modelscope
modelscope download --model SWivid/F5-TTS_Emilia-ZH-EN --local_dir ./ckpts/F5TTS_v1_Base

模型文件清单:

文件大小用途
model_1250000.safetensors~630MBDiT 模型权重
vocab.txt~4KB词表文件
configuration.json~1KB模型配置

3.4 NPU 推理

# 基本推理命令
python inference.py \
  --ref_audio /path/to/reference.wav \
  --ref_text "参考音频对应的文本内容。" \
  --gen_text "这是要在昇腾NPU上生成的语音合成文本。" \
  --output output.wav

# 完整参数示例
python inference.py \
  --ref_audio /opt/atomgit/pretrained_models/CosyVoice-300M/asset/zero_shot_prompt.wav \
  --ref_text "希望你以后能够做的比我还好呦。" \
  --gen_text "在当今快速发展的科技时代,人工智能正在深刻改变着我们的生活方式。" \
  --output output.wav \
  --nfe_step 32 \
  --cfg_strength 2.0 \
  --speed 1.0

3.5 Python API

from inference import patch_mel_spec_for_npu, patch_vocoder_for_npu, load_model_npu
from f5_tts.infer.utils_infer import load_vocoder
import soundfile as sf

# 加载模型
model = load_model_npu(
    ckpt_path="ckpts/F5TTS_v1_Base/model_1250000.safetensors",
    vocab_file="ckpts/F5TTS_v1_Base/vocab.txt",
    device="npu:0",
)
vocoder = load_vocoder(vocoder_name="vocos", is_local=False, local_path="", device="npu:0")
patch_vocoder_for_npu(vocoder)

# 推理... (参考 inference.py 中的 infer_on_npu 函数)

4. 推理性能

测试条件:Ascend910_9362 × 1 卡,float16 精度,nfe_step=32,cfg_strength=2.0。

性能基准

文本类型文本长度推理延迟 (s)生成音频时长 (s)RTF ↓实时率 (x) ↑
短文本7 字符1.212 ± 0.0181.860.6531.53x
中文本33 字符1.393 ± 0.0178.810.1586.33x
长文本81 字符1.994 ± 0.04821.290.09410.67x

关键结论

  • 短文本 (RTF=0.65):推理速度超越实时 1.5 倍,满足实时语音合成需求
  • 中文本 (RTF=0.16):推理速度达到实时 6 倍以上
  • 长文本 (RTF=0.09):推理速度达到实时 10 倍以上
  • DiT 扩散模型在 NPU 上的推理效率优异,32 步采样在 2 秒内完成

资源占用

指标数值
模型加载时间~10-15s (含 Vocos 下载缓存)
HBM 占用 (推理)~5.2 GB
HBM 占用 (峰值)~8.2 GB
模型参数量~330M

5. 精度评测

评测方法

采用 NPU float16 vs float32 对比评测方法:

  1. Mel 频谱余弦相似度:比较 f16 与 f32 推理输出的 mel 频谱
  2. 波形输出有效性:验证输出无 NaN、无 Inf、非静音
  3. 信号质量:检查输出 RMS 和峰值在合理范围内

由于 F5-TTS 基于 Flow Matching (CFM) 确定性采样,在相同随机种子和输入下,不同精度的输出应当高度一致。

评测结果

测试用例Mel 余弦相似度F16 音频有效性
中文短文本0.9649✅ 通过
英文短文本0.9814✅ 通过
指标中文短文本英文短文本
Mel 余弦相似度0.96490.9814
F16 推理时间1.539s1.367s
F32 推理时间2.160s1.875s
f16/f32 加速比1.40x1.37x

精度判定

测试项结果
Mel 余弦相似度 > 0.95 (中英均值 0.973)✅ PASS
F16 音频无 NaN/Inf✅ PASS
F16 音频非静音✅ PASS
总体通过✅ PASS

说明:F5-TTS 为 DiT 扩散生成模型,float16 vs float32 的 Mel 余弦相似度 0.96-0.98 属于优异的 TTS 生成精度。f16 推理速度较 f32 提升约 1.4x。

6. NPU 适配说明

6.1 适配要点

本适配针对 Ascend NPU 架构特点进行了以下关键修改:

问题原因解决方案
torchaudio 不可用torchaudio 2.9.0 依赖 torchcodec / libnvrtc.so (CUDA 库)全部音频 I/O 改用 soundfile;重采样改用 scipy.signal.resample
NPU STFT float16 不支持aclnnStft 不支持 DT_FLOAT16Mel 频谱计算移至 CPU 执行 (patch_mel_spec_for_npu)
NPU STFT abs 失败float32 STFT 返回 complex64,.abs() 触发 aclnnAbs dtype 不匹配 (expected DT_FLOAT, got DT_COMPLEX64)Mel 频谱整体在 CPU 执行
NPU ISTFT UnfoldGrad 错误aclnnUnfoldGrad 不支持非连续输入,Vocos vocoder 的 torch.istft 触发此 bugVocoder ISTFT 模块移至 CPU 执行 (patch_vocoder_for_npu)
wandb 未安装f5-tts 代码中无条件 import wandb在导入 f5_tts 前注入 mock wandb 模块

6.2 核心补丁函数

patch_mel_spec_for_npu

def patch_mel_spec_for_npu(model):
    """将 MelSpec 计算移至 CPU 执行,规避 NPU stft 系列算子问题。"""
    original_forward = model.mel_spec.forward
    dummy = torch.randn(1, 1200).float()
    try:
        original_forward(dummy)  # 预热 CPU 缓存
    except Exception:
        pass

    def patched_forward(wav):
        orig_device, orig_dtype = wav.device, wav.dtype
        wav_cpu = wav.detach().cpu().float()
        mel_cpu = original_forward(wav_cpu)
        return mel_cpu.to(device=orig_device, dtype=orig_dtype)
    model.mel_spec.forward = patched_forward

patch_vocoder_for_npu

def patch_vocoder_for_npu(vocoder):
    """将 Vocos ISTFT 移至 CPU 执行,规避 aclnnUnfoldGrad bug。"""
    try:
        istft_module = vocoder.head.istft
    except AttributeError:
        return
    istft_module.to("cpu")
    original_forward = istft_module.forward
    def patched_forward(spec):
        spec_cpu = spec.detach().cpu()  # 保持 complex dtype
        result = original_forward(spec_cpu)
        return result.to(device=spec.device)
    istft_module.forward = patched_forward

6.3 音频 I/O 适配

def load_audio(path, target_sr=None):
    """使用 soundfile 加载音频(替代 torchaudio.load)。"""
    data, sr = sf.read(path)
    if data.ndim == 1:
        data = data.reshape(1, -1)
    audio = torch.from_numpy(data.astype(np.float32))
    if target_sr is not None and sr != target_sr:
        from scipy import signal
        new_len = int(audio.shape[-1] * target_sr / sr)
        audio = torch.from_numpy(signal.resample(audio.numpy(), new_len, axis=-1).astype(np.float32))
    return audio, (target_sr or sr)

7. 运行评测

# 完整评测(精度 + 性能)
python evaluate_npu.py \
  --ckpt_path ckpts/F5TTS_v1_Base/model_1250000.safetensors \
  --ref_audio /path/to/real_reference_speech.wav \
  --output_dir ./eval_results \
  --warmup 2 \
  --benchmark 5

# 仅性能评测
python evaluate_npu.py --skip_accuracy --warmup 2 --benchmark 5

# 仅精度评测
python evaluate_npu.py --skip_performance

# 查看评测报告
cat eval_results/evaluation_report.json

8. 注意事项

  1. 参考音频要求:建议使用 3-12 秒的真实语音录音,采样率 24000 Hz 为佳
  2. 参考文本匹配:--ref_text 必须与参考音频的实际内容一致,这是 F5-TTS zero-shot 克隆的关键
  3. 首次推理慢:模型加载 + Vocos 首次下载约需 15-30s,后续推理更快
  4. HBM 使用:模型推理占用约 5-8 GB HBM,单卡 Ascend910 (32GB) 足够
  5. 精度建议:推荐使用 float16 推理,在精度和速度间取得最佳平衡

9. 交付件清单

交付件说明路径
inference.pyNPU 适配推理脚本inference.py
evaluate_npu.py精度/性能评测脚本evaluate_npu.py
eval_results/evaluation_report.json评测结果报告evaluation_report.json
eval_results/f16_sample_*.wavNPU 生成的音频样本eval_results/
README.md本文档 (部署指南)README.md

10. 参考资源

  • F5-TTS 官方仓库
  • 华为昇腾社区
  • ModelScope 模型页面

#+NPU #+Ascend910

本适配方案由 Claude Code (Model Agent) 自动生成并验证,2026-05-14

@misc{f5tts,
  title={F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching},
  author={Yushen Chen and Zhikang Niu and et al.},
  year={2024},
}