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

Paraformer-ZH Ascend NPU 适配

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


1. 模型概述与场景

项目说明
模型名称Paraformer-large (Chinese ASR)
基础模型iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch
模型类型BiCifParaformer (端到端非自回归语音识别)
应用场景中文语音识别 (ASR)
输入16kHz 单声道 WAV 音频
输出中文文本(无标点)
词表大小8404 tokens
参数量~220M
模型大小840MB (FP32)
框架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+
numpy1.26+

2. 环境准备

2.1 硬件要求

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

2.2 环境安装

# 安装依赖
pip install torch torch_npu funasr modelscope soundfile numpy onnxruntime

# 下载模型
python3 -c "
from modelscope import snapshot_download
snapshot_download('iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch')
snapshot_download('manyeyes/paraformer-seaco-large-zh-timestamp-onnx-offline')
"

3. 部署指南

3.1 模型下载

标准 Paraformer (PyTorch + NPU 推理):

~/.cache/modelscope/hub/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch/

SeacoParaformer (ONNX + CPU 推理):

~/.cache/modelscope/hub/models/manyeyes/paraformer-seaco-large-zh-timestamp-onnx-offline/

3.2 推理方式

本项目支持两种推理路径:

路径引擎设备说明
NPU 推理FunASR + torch_npuAscend 910推荐,性能最优
CPU 推理ONNX Runtime / FunASR CPUCPU基准/对比

3.3 NPU 推理 (推荐)

python3 inference.py --audio <audio.wav> --model <model_dir> --device npu

3.4 CPU 推理 (基准)

python3 inference.py --audio <audio.wav> --model <model_dir> --device cpu

4. 推理测试

4.1 功能验证

python3 inference.py \
  --audio sample_chinese.wav \
  --model ~/.cache/modelscope/hub/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch \
  --device npu

输出示例:

Device:      npu
Audio:       4.523s
Text:        欢迎大家来到么哒社区进行体验
Token count: 15
Total:       0.471s
RTF:         0.104

4.2 Python API 调用

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, sr = sf.read("audio.wav", dtype="float32")

# 推理
result = model.generate(input=audio)
print(result[0]["text"])

5. 精度评测

5.1 评测方法

使用同一 FunASR Paraformer 模型,分别在 CPU 和 NPU 上运行推理,对比输出文本的字符错误率 (Character Error Rate, CER)。

5.2 评测结果

指标CPU (x86)NPU (Ascend 910)结果
识别文本欢迎大家来到么哒社区进行体验欢迎大家来到么哒社区进行体验一致
CER-0.000000✅ PASS < 1%
文本匹配-100%✅ 完全一致

结论: NPU 推理与 CPU 推理输出完全一致,精度误差为 0%,满足 < 1% 的精度要求。


6. 性能评测

6.1 评测环境

  • NPU: 2x Ascend 910 (使用单卡)
  • CPU: ARM aarch64
  • CANN: 8.5.1
  • 测试音频: 4.52s, 16kHz, 单声道中文语音

6.2 延迟与吞吐

指标CPUNPU (Ascend 910)提升
平均延迟 (s)0.99810.47242.11x
标准差 (s)0.00520.00182.89x 更稳定
最小延迟 (s)0.98910.47072.10x
最大延迟 (s)1.00740.47632.11x
RTF0.22070.10442.11x
吞吐量 (inf/s)1.002.122.12x

6.3 性能分析

  • 首次推理: NPU 首次推理存在 JIT 编译开销 (~0.785s vs ~0.471s 稳态)
  • 稳态推理: NPU 稳态延迟 ~0.47s,RTF ~0.10,满足实时语音识别需求 (RTF < 1)
  • 稳定性: NPU 推理标准差 0.0018s,远优于 CPU 的 0.0052s,性能波动更小

7. CANN Execution Provider 兼容性说明

onnxruntime 1.26.0 包含 CANNExecutionProvider (CANN EP),但在当前模型上存在兼容性问题:

模式状态错误
Graph 模式❌aclgrphParseONNXFromMem 解析失败
Single-op 模式❌aclopCompileAndExecute(BroadcastToD) GE 失败

解决方案: 使用 FunASR + torch_npu 作为 NPU 推理路径,经测试精度一致、性能更优。


8. 交付件清单

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

9. 引用

@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}
}