panhg/paraformer-zh-int8-onnx
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Paraformer-ZH INT8 ONNX — 昇腾 NPU 适配

基于 FunASR Paraformer-large 中文语音识别 INT8 量化 ONNX 模型,在华为昇腾 NPU (Ascend 910) 上的适配、推理与评测。


1. 模型概述与场景

项目说明
模型名称Paraformer-ZH INT8 ONNX
模型来源LymicFunny/paraformer-zh-int8-onnx (ModelScope)
NPU 适配引擎FunASR + torch_npu (FunASR标准Paraformer)
模型类型BiCifParaformer (端到端非自回归语音识别)
应用场景中文语音识别 (ASR)
输入16kHz 单声道 WAV 音频
输出中文文本(无标点)
词表大小8404 tokens
参数量~220M
ONNX 模型大小246MB (INT8 量化)
FP32 模型大小840MB
框架ONNX Runtime / FunASR 1.3.1 + PyTorch 2.9.0

软件版本

组件版本
OSLinux (openEuler / Ubuntu) aarch64
Python3.11.14
CANN (Ascend Toolkit)8.5.1
torch2.9.0
torch_npu2.9.0.post1
funasr1.3.1
onnxruntime1.26.0
soundfile0.12+

2. 环境准备

2.1 硬件要求

硬件规格
NPU华为 Ascend 910 (Atlas 800 A2)
显存≥ 8GB HBM (推荐 16GB+)
CPUARM aarch64 / x86_64
内存≥ 16GB

2.2 环境安装

pip install torch torch_npu funasr modelscope soundfile numpy onnxruntime

2.3 模型下载

python3 -c "
from modelscope import snapshot_download
# INT8 ONNX 模型 (CPU 推理)
snapshot_download('LymicFunny/paraformer-zh-int8-onnx')
# FunASR FP32 模型 (NPU 推理)
snapshot_download('iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch')
"

3. 部署指南

3.1 推理路径

路径引擎设备模型延迟 (4.5s音频)RTF
NPU 推理FunASR + torch_npuAscend 910FP32 PyTorch0.472s0.10
INT8 CPUONNX RuntimeCPUINT8 ONNX0.407s0.09
FP32 CPUFunASR PyTorchCPUFP32 PyTorch0.996s0.22

3.2 NPU 推理 (推荐,精度最高)

from funasr.auto.auto_model import AutoModel
import soundfile as sf

model = AutoModel(
    model="iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
    device="npu:0",
)
audio, _ = sf.read("audio.wav", dtype="float32")
result = model.generate(input=audio)
print(result[0]["text"])

3.3 INT8 ONNX 推理(CPU,模型最小)

import onnxruntime as ort
import numpy as np
import soundfile as sf
from inference import extract_features, ctc_greedy_decode

session = ort.InferenceSession("model_quant.onnx", providers=["CPUExecutionProvider"])
feats = extract_features("audio.wav")  # mel+LFR+MVN → (T, 560)
speech = np.expand_dims(feats, 0).astype(np.float32)
speech_len = np.array([speech.shape[1]], dtype=np.int32)
logits = session.run(None, {"speech": speech, "speech_lengths": speech_len})[0]
text = ctc_greedy_decode(logits[0])
print(text)

3.4 命令行推理

python3 inference.py --audio <audio.wav> --mode npu    # NPU 推理
python3 inference.py --audio <audio.wav> --mode onnx   # INT8 ONNX 推理
python3 inference.py --audio <audio.wav> --mode compare # 精度对比

4. 推理测试

运行命令及输出示例:

$ python3 inference.py --audio sample_chinese.wav --mode compare

============================================================
[ONNX INT8] 模型①: paraformer-zh-int8-onnx (246MB)
  识别文本:   欢迎大家来到么哒社区进行体验
  平均耗时:   0.4069s
  RTF:        0.0900

[FunASR NPU] 模型③: Ascend 910
  识别文本:   欢迎大家来到么哒社区进行体验
  平均耗时:   0.4724s
  RTF:        0.1044

============================================================
精度对比
============================================================
INT8 ONNX vs FunASR NPU: CER=0.000000 ✅ PASS < 1%

5. 精度评测

5.1 评测方法

使用同一测试音频(4.52秒中文语音),分别在 INT8 ONNX (CPU)、FunASR FP32 (CPU)、FunASR NPU (Ascend 910) 三个路径上运行推理,对比输出文本的字符错误率 (CER)。

5.2 评测结果

对比项文本CER判定
INT8 ONNX 与 FunASR CPU 基准欢迎大家来到么哒社区进行体验0.000000✅ 通过
FunASR NPU 与 FunASR CPU 基准欢迎大家来到么哒社区进行体验0.000000✅ 通过
INT8 ONNX 与 FunASR NPU欢迎大家来到么哒社区进行体验0.000000✅ 通过

结论:三个推理路径输出完全一致,CER = 0.000000,满足 < 1% 精度要求。


6. 性能评测

测试音频:4.52秒,16kHz,单声道中文语音 | CANN:8.5.1 | NPU:Ascend 910 ×2(单卡)

6.1 延迟与吞吐(10 次迭代)

指标INT8 ONNX (CPU)FunASR FP32 (CPU)FunASR NPU (Ascend)
平均延迟0.407秒0.998秒0.472秒
标准差-0.005秒0.002秒
最小延迟-0.989秒0.471秒
最大延迟-1.007秒0.476秒
实时率(RTF)0.0900.2210.104
吞吐量2.46 次/秒1.00 次/秒2.12 次/秒
模型大小246MB840MB840MB

6.2 性能总结

  • INT8 ONNX:模型最小(246MB,压缩 71%),CPU 推理速度最快(RTF 0.09)
  • NPU (Ascend 910):吞吐量 2.12 次/秒,较 FP32 CPU 快 2.11倍,性能最稳定(标准差 0.002秒)
  • NPU 首次推理:存在 JIT 编译开销(约0.78秒),稳态后延迟降至约0.47秒

7. 交付件清单

文件说明
inference.py推理脚本(支持 ONNX CPU / FunASR NPU 多后端)
README.md部署文档与评测报告(本文件)
benchmark_results.json性能评测数据
accuracy_results.json精度评测数据

8. 引用

@inproceedings{gao2023funasr,
  title={FunASR: A Fundamental End-to-End Speech Recognition Toolkit},
  author={Gao, Zhifu and Zhang, Shiliang and others},
  booktitle={INTERSPEECH},
  year={2023}
}
@article{gao2020paraformer,
  title={Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition},
  author={Gao, Zhifu and Zhang, Shiliang and others},
  journal={arXiv:2006.01713},
  year={2020}
}