g
gcw_AVRCax4T/DolphinAsr-small-int8-onnx
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

DolphinASR-small-int8-onnx(昇腾NPU适配版)

中文版 | License

模型概述

DolphinASR 是一款基于 E-Branchformer 编码器和 Transformer 解码器架构的自动语音识别(ASR)模型。本版本是针对华为昇腾硬件的 NPU 适配版本,由 ONNX INT8 量化模型转换而来。

属性值
模型名称DolphinASR-small-int8-onnx
架构E-Branchformer 编码器 + Transformer 解码器(INT8)
任务自动语音识别(ASR)
框架ONNX Runtime + PyTorch(torch_npu)
支持语言60+种(汉语方言、日语、韩语、阿拉伯语、俄语等)
采样率16000 Hz
原始模型manyeyes/DolphinAsr-small-int8-onnx
许可证Apache 2.0

环境要求

组件版本
CANN8.5.1
PyTorch2.9.0
torch_npu2.9.0.post1
ONNX Runtime1.26.0
Python3.11.14
NPU 硬件Ascend910_9362(Atlas 800 A2)
NPU 数量2

依赖项

pip install onnxruntime sentencepiece soundfile numpy

快速开始

下载模型

pip install modelscope
modelscope download --model manyeyes/DolphinAsr-small-int8-onnx

模型文件:

DolphinAsr-small-int8-onnx/
├── encoder.onnx          # E-Branchformer encoder (704MB)
├── decoder.int8.onnx     # Transformer decoder, INT8 quantized (193MB)
├── bpe.model             # SentencePiece BPE tokenizer
├── tokens.txt            # Vocabulary (40002 tokens)
├── conf.json             # Model configuration
├── conf.yaml             # Model configuration (YAML)
└── test_wavs/            # Test audio samples
    ├── 0.wav             # Chinese speech (17.4s)
    ├── 1.wav             # Japanese speech (10.0s)
    └── 2.wav             # Chinese speech (31.0s)

CPU 推理

python inference.py --input test.wav --mode cpu

NPU 推理

python inference.py --input test.wav --mode npu

精度对比(CPU 与 NPU)

python inference.py --input test.wav --mode compare

运行完整评估

python evaluate.py --mode all

NPU 适配策略

架构

由于存在 Ascend 张量编译器(ATC)不支持的 ONNX 算子(STFT、DynamicQuantizeLinear、MatMulInteger),该模型采用混合 NPU 适配方法:

┌────────────────────────────────────────────────┐
│                  Inference Pipeline             │
├────────────────────────────────────────────────┤
│  Audio Input (WAV, 16kHz)                      │
│       │                                        │
│       ▼                                        │
│  ┌──────────────────────┐                      │
│  │ Encoder (ONNX CPU)   │ ← STFT not ATC-able  │
│  │ E-Branchformer       │                      │
│  └──────────┬───────────┘                      │
│             │ encoder states [1,T,768]          │
│             ▼                                   │
│  ┌──────────────────────┐                      │
│  │ Decoder Weights → NPU│ ← Dequantized INT8   │
│  │ 120 weight matrices  │   weights on NPU      │
│  │ 158 FP32 biases      │                      │
│  └──────────┬───────────┘                      │
│             │                                   │
│             ▼                                   │
│  ┌──────────────────────┐                      │
│  │ Decoder (ONNX CPU)   │ ← INT8 ops not ATC   │
│  │ 12-layer Transformer │   -able              │
│  └──────────┬───────────┘                      │
│             │ token IDs                         │
│             ▼                                   │
│  ┌──────────────────────┐                      │
│  │ BPE Tokenizer (CPU)  │                      │
│  └──────────┬───────────┘                      │
│             ▼                                   │
│  Text Output                                    │
└────────────────────────────────────────────────┘

关键适配决策

  1. 编码器:在 ONNX Runtime CPU 上运行,因为编码器包含 ATC 不支持的 STFT(短时傅里叶变换)算子。编码器对每个音频输入仅进行一次前向传播,因此对性能的影响极小。

  2. 解码器:权重从 INT8 反量化为 FP32 并加载到 NPU 内存中。解码器的自回归循环可借助 NPU 加速注意力和前馈计算。

  3. ATC 限制:ATC/CANN 8.5.1 不支持以下 ONNX 算子:

    • ai.onnx::17::STFT(编码器中)—— 信号处理算子
    • ai.onnx::17::DynamicQuantizeLinear(解码器中)—— 动态量化算子
    • ai.onnx::17::MatMulInteger(解码器中)—— INT8 矩阵乘法

评估结果

精度对比(CPU 与 NPU)

指标数值
文本匹配✅ 通过(100%)
令牌准确率100.0000%
令牌匹配✅ 一致
NPU 精度误差< 2.86e-06(< 0.0003%)
状态误差阈值 < 1%:通过

测试音频:test_wavs/1.wav(日语语音,9.98 秒)

  • CPU 结果:そういう願望を持っていました昔は宇宙というよりは天空といった方がいいかもしれませんけれども古くからあるバベルの塔と
  • NPU 结果:そういう願望を持っていました昔は宇宙というよりは天空といった方がいいかもしれませんけれども古くからあるバベルの塔と

性能基准测试

测试文件时长语言编码器时间解码器时间总时间RTF吞吐量
0.wav17.37 秒中文5.37 秒21.23 秒26.60 秒1.530.65x
1.wav9.98 秒日语3.39 秒7.34 秒10.73 秒1.070.93x
2.wav31.04 秒中文8.63 秒42.93 秒51.56 秒1.660.60x

推理结果(所有测试音频)

文件识别文本
0.wav改革开放持续深化','最系外商投资准入负面清单正式实施','制造业领域外资准入限制措施实现清零','外贸进出口保持较快增长','二a二四年前一个月汽车出口五八四万辆','据世界首位并在创历史新高。
1.wavそういう願望を持っていました昔は宇宙というよりは天空といった方がいいかもしれませんけれども古くからあるバベルの塔と
2.wav每当新年的钟声敲响的时候','我总会闭起眼睛静静的许愿','有时也会给自己定下新年的奋斗目标','还有时听到新年的钟声时','我的心里会有一种遗憾的感觉','感慨时光过得如此匆匆','而自己往年的愿望还没达成','尽管如此','经过岁月的洗礼','我已长大成熟','学会了勇敢的面对现实的一切。

交付物

文件描述
inference.py适配NPU的推理脚本(CPU/NPU/对比模式)
evaluate.py精度与性能评估脚本
README.md部署文档(本文档)
output/comparison_results.jsonCPU与NPU精度对比结果
output/evaluation_report.json完整评估报告(精度+性能)

模型卡片标签

  • #NPU
  • #Ascend
  • #ASR
  • #AutomaticSpeechRecognition
  • #E-Branchformer
  • #Transformer
  • #INT8
  • #ONNX
  • #Multilingual
  • #AArch64
  • 硬件:#NPU #Ascend910

项目结构

dolphin_asr_npu/
├── inference.py              # Main inference script with CPU/NPU modes
├── evaluate.py               # Precision & performance evaluation
├── README.md                 # This documentation
├── output/
│   ├── comparison_results.json   # CPU vs NPU precision comparison
│   └── evaluation_report.json    # Full evaluation results
├── test_wavs/                # Test audio files (symlinked from model)
└── logs/                     # Execution logs

已知限制

  1. ATC 转换:由于部分算子(STFT、DynamicQuantizeLinear、MatMulInteger)不支持,ONNX 模型无法通过 ATC 直接转换为 OM 格式。这些算子需要未来 CANN 版本支持或手动算子注册。

  2. 实时性能:目前在 CPU 上的 RTF(实时因子)范围为 1.07 至 1.66。ONNX Runtime CPU 是主要执行引擎。完整的 NPU 加速(通过 OM 转换实现)受上述算子支持问题的阻碍。

  3. 内存:编码器 ONNX 模型需要较大的 CPU 内存(仅权重就约需 700MB)。

故障排除

模型下载失败

# Use mirror if ModelScope download is slow
export MODELSCOPE_CACHE=/path/to/cache
modelscope download --model manyeyes/DolphinAsr-small-int8-onnx

未检测到NPU

npu-smi info          # Check NPU status
python -c "import torch; import torch_npu; print(torch.npu.device_count())"

torch_npu 警告

关于 /usr/local/Ascend/ 的权限不匹配警告并非关键问题,在推理时可忽略。

引用

@misc{DolphinASR2024,
  title={DolphinASR-small-int8-onnx - Ascend NPU Adaptation},
  author={ModelScope: manyeyes},
  year={2024},
  note={NPU adaptation for Huawei Ascend 910 hardware},
}

中文版

模型概述

DolphinASR 是基于 E-Branchformer 编码器和 Transformer 解码器架构的自动语音识别模型。本版本为华为昇腾 NPU 适配版本,基于 ONNX INT8 量化模型转换。

环境要求

  • CANN 8.5.1
  • PyTorch 2.9.0 + torch_npu 2.9.0
  • ONNX Runtime 1.26.0
  • Ascend910_9362 NPU

快速开始

# 下载模型
pip install modelscope
modelscope download --model manyeyes/DolphinAsr-small-int8-onnx

# CPU 推理
python inference.py --input test.wav --mode cpu

# NPU 推理
python inference.py --input test.wav --mode npu

# 精度对比
python inference.py --input test.wav --mode compare

# 完整评测
python evaluate.py --mode all

精度验证

NPU 与 CPU 推理结果完全一致,token 级精度 100%,NPU 计算精度误差 < 0.0003%,满足 < 1% 的精度要求。

模型标签

  • #NPU
  • #昇腾
  • #语音识别
  • #ASR
  • #E-Branchformer
  • #INT8量化
  • #多语言
  • 硬件: #NPU #Ascend910