weixin_62994174/OpenAudio-S1-mini
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

OpenAudio S1-mini Ascend NPU 适配部署指南

1. 简介

本文档记录 fishaudio/openaudio-s1-mini 在华为昇腾 NPU(Ascend910)上的完整适配与验证结果。OpenAudio S1-mini 是 FishAudio 发布的开源文本转语音(TTS)模型,基于 DualAR Transformer 架构,支持 13 种语言,具备情感和语调控制能力。

属性值
模型名称OpenAudio S1-mini
参数量1.17B (DualAR 860M + DAC 315M)
架构DualAR Transformer (28L Slow + 4L Fast) + DAC RVQ Codec
隐藏维度1024 (Slow/Fast)
注意力头16Q / 8KV (GQA, Slow) ; 16Q / 8KV (GQA, Fast)
VQ 码本10 codebooks (1语义 + 9声学), 每个 1024-dim
采样率44100 Hz
最大序列长度8192 tokens
支持语言中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语、俄语、荷兰语、意大利语、波兰语、葡萄牙语
精度BF16 (推理) / FP32 (精度验证)
框架PyTorch 2.9 + torch_npu + fish_speech
硬件要求Ascend910 NPU (≥16GB HBM)
原始模型fishaudio/openaudio-s1-mini

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/fishaudio/openaudio-s1-mini
  • 权重下载地址(HuggingFace):https://huggingface.co/fishaudio/openaudio-s1-mini
  • Fish Speech 项目:https://github.com/fishaudio/fish-speech
  • 昇腾开发者文档:https://www.hiascend.com/document

2. 验证环境

组件版本
torch2.9.0
torch_npu2.9.0.post1
fish_speech≥ 1.10.0
safetensors≥ 0.4
soundfile≥ 0.12
numpy≥ 1.24
loguru≥ 0.7
Python3.11
  • NPU:1 卡 Ascend910 (64GB HBM)
  • 模型路径:/opt/atomgit/.cache/modelscope/hub/models/fishaudio/openaudio-s1-mini
  • 推理精度:BF16
  • 权重文件:model.pth (1.7GB) + codec.pth (1.9GB)

3. 快速开始

3.1 环境准备

# 安装依赖
pip install torch_npu fish_speech soundfile numpy loguru

# 设置环境变量(可选)
export FISH_SPEECH_MODEL_PATH=/path/to/openaudio-s1-mini

3.2 下载模型

pip install modelscope
modelscope download --model fishaudio/openaudio-s1-mini

3.3 运行推理

# 中文 TTS
python inference.py --text "你好,欢迎使用华为昇腾NPU进行语音合成测试。" --output output.wav

# 英文 TTS
python inference.py --text "Hello, this is a test of the NPU text-to-speech system." --output output_en.wav

# 带情感标记的 TTS
python inference.py --text "(excited)今天天气真好啊!" --output output_emo.wav

# 仅 NPU 推理(跳过 CPU 对比验证,速度更快)
python inference.py --text "你好,世界。" --output output.wav --no-verify

# 带随机种子控制
python inference.py --text "Hello world." --seed 42 --temperature 0.8 --top-p 0.8

3.4 情感与语调支持

OpenAudio S1-mini 支持丰富的情感、语调和特殊标记:

情感标记(部分):(angry) (sad) (excited) (surprised) (satisfied) (anxious) (delighted) (scared) (worried) (joyful) (confident) (curious) (confused) (grateful) (relaxed) 等 50+ 种

语调标记:(in a hurry tone) (shouting) (screaming) (whispering) (soft tone)

特殊标记:(laughing) (chuckling) (sobbing) (crying loudly) (sighing) (panting) (groaning)

4. Smoke 验证

基础功能检查:

# 检查 NPU 可用性
python3 -c "import torch_npu; print(torch_npu.npu.device_count(), torch_npu.npu.get_device_name(0))"

# 中文短文本 TTS
python inference.py --text "你好。" --output /tmp/test_short.wav --no-verify

# 中文中长文本 TTS
python inference.py --text "你好,欢迎使用华为昇腾NPU进行语音合成测试。" --output /tmp/test_medium.wav --no-verify

# 长文本 TTS
python inference.py --text "人工智能技术正在深刻改变着我们的生活方式,从语音识别到自然语言处理,从计算机视觉到自动驾驶,AI的应用无处不在。" --output /tmp/test_long.wav --no-verify

验证结果:

  • 模型加载成功,DualAR (860.2M) + DAC (314.6M) 所有权重完全匹配(0 missing, 0 unexpected)
  • NPU 推理正常完成,生成音频可正常播放
  • 中文、英文等多语言 TTS 均正常
  • 情感标记和语调标记可正常解析和控制

5. 性能评测

测试条件:单卡 Ascend910 (64GB HBM)、BF16 精度、2 次预热后计时。

运行命令:

python evaluate.py --mode perf

完整性能数据:

文本类型文本Token生成VQToken音频时长推理耗时DAC耗时总耗时RTF
"你好。"Short10160.70s2.41s0.130s2.54s3.65
"你好,欢迎使用华为昇腾NPU进行语音合成测试。"Medium22833.81s12.49s0.047s12.54s3.29
"人工智能技术正在深刻改变..."Long372099.66s31.34s0.098s31.44s3.25

性能汇总:

指标数值
平均 RTF3.40(AR 生成模型典型值)
平均 Token 生成速率6.6 tok/s (DualAR)
DAC 解码速度< 0.13s(接近实时解码)
DAC NPU vs CPU 加速比15.6x
模型加载时间~22s (DualAR 18s + DAC 4s)
硬件Ascend910 (64GB HBM)
推理精度BF16

RTF 说明:OpenAudio S1-mini 采用逐 token 自回归生成方式(DualAR),每生成一个 VQ token 需经过 28 层 Slow AR + 4 层 Fast AR 前向传播。RTF ≈ 3.4 意味着生成 1 秒音频需约 3.4 秒推理时间。DAC 解码器部分接近实时(RTF ≈ 0.005)。整体性能受限于自回归生成模式,这在 AR-based TTS 模型中属于正常范围。CPU 上相同推理需数分钟(估计 30-50x 以上加速比)。

6. 精度评测

使用 evaluate.py --mode accuracy 对 DualAR Transformer 和 DAC Codec 分别进行 CPU (FP32) 与 NPU (FP32) 的逐层精度对比。

运行命令:

python evaluate.py --mode accuracy

6.1 DualAR Transformer 精度

组件MAE相对误差相关系数判定
Slow AR - Logits0.00001600.0004%1.000000PASS
Slow AR - Hidden States0.00009440.0004%1.000000PASS
Fast AR - Codebook 10.00000600.0001%1.000000PASS
Fast AR - Codebook 20.00000740.0002%1.000000PASS
Fast AR - Codebook 30.00000730.0002%1.000000PASS
Fast AR - Codebook 40.00000800.0002%1.000000PASS
Fast AR - Codebook 50.00001820.0005%1.000000PASS
Fast AR - Codebook 60.00003080.0009%1.000000PASS
Fast AR - Codebook 70.00004170.0021%1.000000PASS
Fast AR - Codebook 80.00004220.0026%1.000000PASS
Fast AR - Codebook 90.00002240.0005%1.000000PASS
DualAR 平均—0.0005%1.000000PASS

6.2 DAC Codec 精度

组件MAE相对误差相关系数判定
Quantizer (潜变量 z)0.0017830.0419%1.000000PASS
Decoder (音频输出)0.0000400.0778%1.000000PASS
DAC 平均—0.0778%1.000000PASS

6.3 精度总评

指标数值
DualAR Transformer 误差0.0005%
DAC Codec 误差0.0778%
整体精度误差0.0392%
阈值< 1.00%
判定PASS

精度说明:CPU (FP32) 与 NPU (FP32) 在相同随机种子下的前向传播结果几乎 bit-exact 一致。所有组件的相关系数均为 1.000000,相对误差远低于 1% 阈值。DualAR 部分误差仅 0.0005%(约 5ppm),DAC Codec 部分误差 0.0778%(主要来自 RVQ 量化器的查表操作在 NPU 上的微小浮点累积差异)。整体精度 0.0392% 远优于 1% 要求。

7. 模型架构

输入文本 → Tokenizer(tiktoken) → Token IDs
                                         ↓
                      DualAR Transformer ─────────────┐
                      ├─ 28L Slow AR (GQA + RoPE)      │
                      │   └─ 逐 Token 自回归生成语义 Token │
                      └─ 4L Fast AR (GQA + RoPE)       │
                          └─ 并行生成 9 层声学 Token      │
                                         ↓              │
                          RVQ Codec (DAC)               │
                      ├─ DownsampleRVQ (9 codebooks)    │
                      │   └─ WindowLimitedTransformer   │
                      └─ Decoder (4× upsampling)        │
                          └─ 因果卷积上采样              │
                                         ↓
                              44100Hz Waveform Audio

7.1 核心组件

组件层数隐藏维度注意力头说明
Slow AR (DualAR)28102416Q/8KVGQA + RoPE (theta=1M),QK Norm,自回归生成
Fast AR (DualAR)4102416Q/8KVGQA + RoPE,并行解码 9 层声学码本
DAC RVQ Quantizer9 codebooks1024—残差矢量量化,窗限制 Transformer 前后模块
DAC Decoder4 stages1536—因果卷积上采样(8×,8×,4×,2×),总 512×

7.2 权重加载说明

权重文件大小内容
model.pth1.7GBDualAR Transformer 完整权重 (860.2M 参数)
codec.pth1.9GBDAC Quantizer + Decoder 完整权重 (314.6M 参数)
tokenizer.tiktoken1.2MBTiktoken 分词器词表
config.json844BDualAR 模型配置
special_tokens.json123KB特殊 Token 映射

权重加载状态:所有 key 完全匹配(All keys matched successfully),0 missing, 0 unexpected。

8. 适配说明

本方案是 OpenAudio S1-mini 的昇腾 NPU 独立推理部署方案,基于 fish_speech 开源框架:

  1. 模型加载:使用 DualARTransformer.from_pretrained() 加载 860M 参数,通过 torch.load 加载 DAC 权重,完整映射无缺失
  2. 算子适配:使用 torch_npu 替代 CUDA,利用 sdpa_kernel(SDPBackend.MATH) 进行注意力计算加速
  3. 分词器:使用 fish_speech 原生 Tiktoken 分词器(tokenizer.tiktoken)
  4. DualAR 生成:28 层 Slow AR 逐 token 生成语义码本 + 4 层 Fast AR 并行生成 9 层声学码本
  5. DAC 解码:RVQ 解码 → Decoder 上采样,输出 44100Hz 单声道波形
  6. 情感控制:支持 50+ 种情感标记和 5 种语调标记的内联控制

8.1 与 Voxtral TTS 的架构差异

特性OpenAudio S1-miniVoxtral-4B-TTS-2603
参数规模1.17B4.00B
生成方式自回归 (AR)并行 (非AR)
采样率44100 Hz24000 Hz
推理 RTF3.40 (AR)0.005 (并行)
情感控制50+ 内联标记无
音色控制无预设音色(prompt-based)20 种预设音色

9. 注意事项

9.1 自回归生成性能

OpenAudio S1-mini 采用 DualAR 自回归架构,每次推理需逐 token 生成 VQ 序列。RTF ≈ 3.4 意味着生成速度约为实时的 1/3。这是 AR-based TTS 模型的固有特性,非 NPU 适配问题。相比 CPU(估计 100-200s 以上),NPU 已有数十倍加速。

9.2 精度验证方法

精度验证在 FP32 下进行 CPU vs NPU 逐层对比,使用固定的随机输入(torch.manual_seed(42)),确保对比的公平性。FP32 精度验证通过后,推理使用 BF16 以节省显存和加速计算。

9.3 显存占用

1.17B 参数在 BF16 精度下约占用 2.3GB HBM(权重)+ 运行时激活内存。Ascend910 (64GB HBM) 有充足余量。若使用 FP32 精度(仅精度验证场景),权重约占用 4.7GB。

9.4 权重文件格式

模型权重以 .pth 格式(PyTorch 标准 checkpoint)存储,而非 safetensors。加载时需确保 weights_only=True 以保证安全性。DAC 权重(codec.pth)采用键名前缀映射方式分别加载到 quantizer 和 decoder 模块。

9.5 长文本处理

模型最大序列长度为 8192 tokens。对于超长文本,建议分段合成。当前测试中 37 个文本 token 生成 209 个 VQ token,总计约 246 token,远低于限制。

10. 文件结构

openaudio-s1-mini-npu/
├── inference.py          # NPU 推理主脚本(含 CPU 对比验证,约 415 行)
├── evaluate.py           # 评测脚本(精度 + 性能,约 397 行)
├── logs/
│   ├── inference_smoke.log   # 推理烟雾测试运行日志
│   ├── accuracy_test.log     # 精度验证运行日志
│   └── performance_test.log  # 性能基准运行日志
└── README.md             # 本文件(部署指南 + 评测报告)

11. 许可

本模型基于 FishAudio OpenAudio S1-mini,遵循 CC BY-NC-SA 4.0 许可。适配代码基于 Apache 2.0 许可。

12. 引用

@misc{fishaudio2025openaudio,
  title={OpenAudio S1: Frontier Open-Source Text-to-Speech},
  author={FishAudio Team},
  year={2025},
  url={https://fish.audio}
}

@misc{ascend2025npu,
  title={Ascend NPU Adaptation for OpenAudio S1-mini},
  author={Ascend NPU Adaptation Team},
  year={2025},
  url={https://gitcode.com/weixin_62994174/OpenAudio-S1-mini}
}