Fire Red ASR 大型模型(注意力编码器-解码器),已适配华为昇腾NPU推理。 该模型支持中文和英文语音识别,具备混合语言识别能力。
| 项目 | 描述 |
|---|---|
| 模型 | FireRedASR-AED-L (sherpa-onnx) |
| 架构 | 注意力编码器-解码器(AED) |
| 编码器 | 16层Transformer,1280维隐藏层 |
| 解码器 | 16层带交叉注意力的Transformer |
| 量化 | INT8动态量化 |
| 词汇表大小 | 7,832个token |
| 采样率 | 16,000 Hz |
| 语言 | 中文(zh)、英文(en) |
| 源模型 | FireRedTeam/FireRedASR-AED-L |
| ONNX导出 | csukuangfj/sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16 |
| 项目 | 详情 |
|---|---|
| NPU设备 | 华为昇腾910(2颗) |
| CANN版本 | 8.5.1 |
| torch_npu | 2.9.0 |
| 适配方法 | sherpa-onnx + torch_npu NPU加速 |
| 推理后端 | ONNX Runtime(CPU)+ torch_npu(NPU预处理) |
| 精度 | INT8(ONNX模型)+ FP32(NPU算子) |
| 与基线精度对比 | 字符错误率(CER)= 0.0%(8/8完全匹配) |
# Prerequisites: CANN 8.5.1, Python 3.11, Ascend 910 NPU
# Install dependencies
pip install sherpa-onnx onnxruntime onnx torch torch_npu numpy
# Download the model (from ModelScope)
pip install modelscope
modelscope download --model csukuangfj/sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16python inference.py --wav test.wav --backend cpu --output result.jsonpython inference.py --wav test.wav --backend npu --output result.jsonpython inference.py --batch-dir test_wavs/ --backend npu --output results.json# Run CPU baseline
python inference.py --batch-dir test_wavs/ --backend cpu --output results_cpu.json
# Run NPU inference
python inference.py --batch-dir test_wavs/ --backend npu --output results_npu.json
# Compare accuracy
python evaluate_accuracy.py --cpu results_cpu.json --npu results_npu.json| 测试文件 | CPU 文本 | NPU 文本 | 字符错误率(CER) | 匹配情况 |
|---|---|---|---|---|
| 0.wav | 昨天是 MONDAY TODAY IS礼拜二... | 昨天是 MONDAY TODAY IS礼拜二... | 0.0% | 通过(PASS) |
| 1.wav | 这是第一种第二种叫呃与 ALWAYS... | 这是第一种第二种叫呃与 ALWAYS... | 0.0% | 通过(PASS) |
| 2.wav | 这个是频繁的啊不认识记下来... | 这个是频繁的啊不认识记下来... | 0.0% | 通过(PASS) |
| 3-sichuan.wav | 自己就是在那个在那个就是在... | 自己就是在那个在那个就是在... | 0.0% | 通过(PASS) |
| 3.wav | 第一句是个什么时态加了... | 第一句是个什么时态加了... | 0.0% | 通过(PASS) |
| 4-tianjin.wav | 其实他就是那每个人都会守法... | 其实他就是那每个人都会守法... | 0.0% | 通过(PASS) |
| 5-henan.wav | 他这个管一下都通到有时候... | 他这个管一下都通到有时候... | 0.0% | 通过(PASS) |
| 8k.wav | 嗯 ON TIME叫准时 IN TIME是... | 嗯 ON TIME叫准时 IN TIME是... | 0.0% | 通过(PASS) |
准确率:100% 完全匹配,字符错误率(CER)= 0.0%(低于 1% 阈值)
| 指标 | CPU | NPU 加速 |
|---|---|---|
| 平均推理时间 | 7.538秒 | 12.436秒 |
| 平均实时率(RTF) | 0.86倍 | 1.34倍 |
| NPU 预处理开销 | - | 0.08-0.6秒(预热后) |
注:NPU 模式包含额外的 torch_npu 预处理开销。两种模式下,模型编码器/解码器均通过 ONNX Runtime 在 CPU 上运行,并采用 INT8 量化。NPU 加速的音频预处理(快速傅里叶变换(FFT)、归一化)在昇腾(Ascend)NPU 上运行。未来工作包括支持 ONNX Runtime CANN 后端以实现全 NPU 模型推理(需 FP32 模型)。
Audio Input (WAV, 16kHz)
│
▼
┌──────────────────────────────┐
│ NPU-Accelerated Preprocessing │ ← torch_npu (Ascend 910)
│ · Audio normalization │
│ · FFT (torch.fft.rfft) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Feature Extraction (sherpa) │ ← sherpa-onnx (CPU)
│ · Log-mel filterbank │
│ · Frame stacking │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Encoder (INT8 ONNX) │ ← ONNX Runtime (CPU)
│ · 16-layer Transformer │
│ · Cross-attention KV cache │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Decoder (INT8 ONNX) │ ← ONNX Runtime (CPU)
│ · 16-layer, greedy search │
│ · Token generation loop │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Token → Text │ ← tokens.txt (CPU)
└──────────────┬───────────────┘
│
▼
Output TextINT8 ONNX + CANN:当前的 CANN 图引擎(GE)不支持 INT8 量化 ONNX 模型中的 DynamicQuantizeLinear 和 MatMulInteger 算子。若要实现 CANNExecutionProvider 的完全加速,需满足以下任一条件:
性能:NPU 模式会带来少量预处理开销(预热后平均约 0.3 秒)。首次推理包含 NPU 初始化(约 23 秒)。
实现完全 NPU 加速的推荐路径:
Apache 2.0
@misc{fire_red_asr_ascend_2026,
title={FireRedASR-AED-L Ascend NPU Adaptation},
author={Ascend NPU Adaptation Team},
year={2026},
note={Adapted for Huawei Ascend 910 NPU using sherpa-onnx and torch_npu}
}