g
gcw_AVRCax4T/paraformer-large-zh-yue-en-onnx-offline-dengcunqin-20240805
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Paraformer-large ASR (Ascend NPU Adaptation)

Paraformer-large 语音识别模型在华为昇腾 Ascend NPU 上的适配部署。

原始模型: manyeyes/paraformer-large-zh-yue-en-onnx-offline-dengcunqin-20240805

模型简介

Paraformer-large 是达摩院推出的非自回归端到端语音识别模型,支持中文、粤语和英语多语种识别。本仓库提供在华为昇腾 Ascend 910 NPU 上的适配推理方案。

  • 模型架构: Paraformer (SANM Encoder + CIF Predictor + SANM Decoder)
  • 参数量: ~840M
  • 采样率: 16000 Hz
  • 特征: 80维 FBank
  • 输入: 16kHz 单声道 WAV 音频
  • 输出: 中文/粤语/英语文本

硬件要求

项目规格
NPUAscend 910 / 910B
CANN8.5.1+
torch_npu2.9.0+
Python3.11+
显存~4 GB HBM

环境配置

# 安装依赖
pip install torch torch_npu funasr modelscope scipy onnx onnxruntime

# 下载模型(ONNX格式)
modelscope download --model manyeyes/paraformer-large-zh-yue-en-onnx-offline-dengcunqin-20240805 --local_dir ./model

# 或使用 FunASR PyTorch 格式(自动下载)
python -c "from funasr import AutoModel; AutoModel(model='iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch')"

快速开始

NPU 推理

# 单文件推理
python inference.py --device npu --input audio.wav

# 批量推理
python inference.py --device npu --input_dir ./test_wavs/

# CPU 推理(基线)
python inference.py --device cpu --input audio.wav

Python API

from inference import load_model, infer

# 加载 NPU 模型
model = load_model("npu")

# 推理
text, elapsed = infer(model, "audio.wav", device="npu")
print(f"识别结果: {text}")
print(f"耗时: {elapsed:.3f}s")

精度与性能评测

# 运行完整评测
python evaluate.py --test_dir ./model/test_wavs --output report.json

评测结果

测试环境

  • NPU: Ascend 910 9362 × 2
  • CANN: 8.5.1
  • torch: 2.9.0
  • torch_npu: 2.9.0.post1+gitee7ba04
  • FunASR: 1.3.1

精度对比 (CPU vs NPU)

测试文件CPU 结果NPU 结果匹配
0.wav欢迎大家来体验达摩院推出的语音识别模型欢迎大家来体验达摩院推出的语音识别模型✓
1.wav欢迎大家来体验达摩院推出的语音识别模型欢迎大家来体验达摩院推出的语音识别模型✓
2.wav有某人知道跟钟天马街起点去家有某人知道跟钟天马街起点去家✓
3.wav绿是阳春烟景大块文章的底色四月的林峦更是绿的鲜活秀媚诗意盎然绿是阳春烟景大块文章的底色四月的林峦更是绿的鲜活秀媚诗意盎然✓

精度结论: NPU 与 CPU 输出完全一致,字符级误差 < 1%。

性能对比

测试文件CPU 延迟NPU 延迟加速比
0.wav (5.5s)1.130s0.484s2.3x
1.wav (5.5s)1.120s0.485s2.3x
2.wav (6.0s)1.211s0.481s2.5x
3.wav (8.5s)1.568s0.480s3.3x
平均1.257s0.483s2.6x

性能结论: NPU 推理平均加速 2.6 倍,推理延迟稳定在 0.48s 左右。

文件结构

paraformer-npu/
├── inference.py          # NPU/CPU 推理脚本
├── evaluate.py           # 精度与性能评测脚本
├── README.md             # 本文件(部署文档)
├── eval_results.json     # 评测结果(JSON)
├── evaluation_report.json # 评测报告(JSON)
├── cpu_baseline.json     # CPU 基线数据
└── model/                # ONNX 模型文件
    ├── model.onnx        # FP32 ONNX 模型 (870MB)
    ├── model.int8.onnx   # INT8 量化模型 (225MB)
    ├── config.yaml       # 模型配置
    ├── tokens.json       # Token 词表
    ├── vocab.json        # 词汇表
    └── test_wavs/        # 测试音频
        ├── 0.wav
        ├── 1.wav
        ├── 2.wav
        └── 3.wav

技术实现

NPU 适配方案

  1. 模型加载: 通过 FunASR AutoModel 加载 Paraformer PyTorch 模型
  2. 设备迁移: 使用 .npu() 将模型参数迁移至 Ascend NPU
  3. 输入适配: 将 FBank 特征和序列长度张量迁移至 NPU
  4. 音频预处理: 使用 scipy 替代 ffmpeg/torchcodec 加载 WAV 音频
  5. 推理执行: 前处理(CPU) → Encoder(NPU) → Predictor(NPU) → Decoder(NPU) → 后处理(CPU)

关键优化点

  • 设备亲和: 模型权重和输入特征统一放置在 NPU 设备
  • LayerNorm NPU: 利用 torch_npu 原生 LayerNorm 实现
  • 同步策略: 仅在性能计时时进行 NPU-CPU 同步

模型卡片信息

Model: Paraformer-large
Task: Automatic Speech Recognition (ASR)
Languages: zh-CN, zh-YUE, en
Framework: FunASR + PyTorch + torch_npu
Precision: FP32
Input: 16kHz Mono WAV
Output: Chinese/English Text
Hardware: Ascend 910 NPU

许可证

Apache License 2.0

引用

  • FunASR
  • Paraformer Paper
  • ModelScope
  • CANN Documentation