weixin_62994174/FireRedASR2-AED
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

FireRedASR2-AED Ascend NPU 适配部署指南

Model Hardware NPU Accuracy License

模型简介

FireRedASR2-AED 是小红书 FireRedTeam 开源的工业级自动语音识别(ASR)模型,采用 Conformer Encoder + Transformer Decoder 的 Attention-based Encoder-Decoder (AED) 架构,参数量约 1.15B。

该模型支持:

  • 中文普通话识别
  • 20+ 中国方言/口音识别
  • 英文识别
  • 中英混合识别
  • 歌词识别
  • 词级别时间戳和置信度输出

本仓库提供 FireRedASR2-AED 在华为昇腾 Ascend NPU 上的完整适配方案,包括推理脚本、精度验证和性能基准测试。

昇腾 NPU 适配说明

适配方案

基于 torch_npu 将原生 PyTorch CUDA 推理流程迁移至 Ascend NPU,关键适配点:

适配项原始实现NPU 适配
设备后端model.cuda() / tensor.cuda()model.to(npu) / tensor.to(npu)
推理精度FP32 / FP16FP32 / FP16(NPU 原生支持)
特征提取CPU(kaldi-native-fbank)CPU(保持不变,仅 80 维 fbank)
Beam SearchGPU 上执行NPU 上执行
模型参数1.15B (4.4GB FP32)1.15B (4.4GB FP32),NPU HBM 占用 ~4.6GB

环境要求

组件版本要求
操作系统Linux (Ubuntu 22.04 / openEuler 22.03)
Python3.10+
CANN8.5.1+
PyTorch2.9.0+
torch_npu与 CANN 版本匹配
NPU 硬件Ascend 910 (Atlas 800 A2/A3 训练卡或推理卡)

依赖安装

# 安装基础依赖
pip install torch torch_npu
pip install kaldiio kaldi_native_fbank sentencepiece

# 安装 ModelScope(用于下载模型)
pip install modelscope

# 下载模型
modelscope download --model xukaituo/FireRedASR2-AED --local_dir ./pretrained_models/FireRedASR2-AED

# 克隆官方代码(模型定义依赖)
git clone https://github.com/FireRedTeam/FireRedASR2S.git

快速开始

1. 克隆本仓库

git clone https://atomgit.com/weixin_62994174/FireRedASR2-AED.git
cd FireRedASR2-AED

2. 准备音频文件

音频要求:16kHz, 16-bit, 单声道 PCM WAV

# 使用 ffmpeg 转换音频格式
ffmpeg -i input.mp3 -ar 16000 -ac 1 -acodec pcm_s16le -f wav output.wav

3. 运行 NPU 推理

import sys
sys.path.insert(0, "path/to/FireRedASR2S")
from inference import InferenceConfig, NPUASRInference

config = InferenceConfig(
    model_dir="./pretrained_models/FireRedASR2-AED",
    device="npu",        # 使用昇腾 NPU
    use_half=False,      # FP32 精度(可设为 True 使用 FP16)
    beam_size=3,
)

asr = NPUASRInference(config)
asr.load_model()

results = asr.transcribe(["sample.wav"])
for r in results:
    print(f"识别结果: {r['text']}")
    print(f"置信度: {r['confidence']}")
    print(f"RTF: {r['rtf']}")

4. 命令行推理

python3 inference.py \
  --model_dir ./pretrained_models/FireRedASR2-AED \
  --device npu \
  --wav_path sample1.wav sample2.wav \
  --beam_size 3 \
  --output result.json

精度评估

评估方法

在 Ascend NPU 上运行推理,与 CPU 基线结果对比,计算字符错误率(CER)。

评估结果

指标数值
测试样本数1 (合成测试音频)
NPU vs CPU 输出匹配率100%
CER (NPU vs CPU) 平均值0.00%
CER (NPU vs CPU) 最大值0.00%
精度门禁结果✅ PASS (< 1.0%)

运行精度评估

# NPU vs CPU 一致性验证
python3 evaluate_accuracy.py \
  --model_dir ./pretrained_models/FireRedASR2-AED \
  --output accuracy_results.json

# 带标注数据的完整评估
python3 evaluate_accuracy.py \
  --model_dir ./pretrained_models/FireRedASR2-AED \
  --manifest test_manifest.txt \
  --output accuracy_results.json

测试清单文件格式:每行 <wav_path> <reference_text>

性能基准

测试环境

项目配置
NPU 型号Ascend 910 (Ascend910_9362)
NPU 数量2 卡(单卡推理)
CANN 版本8.5.1
PyTorch 版本2.9.0
推理精度FP32
Beam Size3

性能指标

指标NPU (Ascend 910)CPU (AArch64)加速比
吞吐量 (x realtime)32.29x0.66x48.83x
平均延迟 (3s 音频)0.093s4.536s48.83x
平均 RTF0.0291.50451.86x
P50 延迟0.093s--
P90 延迟0.094s--
P99 延迟0.094s--
NPU 显存占用4,582 MB--

RTF (Real-Time Factor) = 推理耗时 / 音频时长,越低越好。RTF < 0.3 即可满足实时推理需求。

运行性能测试

# NPU 性能基准 + CPU 对比
python3 evaluate_performance.py \
  --model_dir ./pretrained_models/FireRedASR2-AED \
  --num_test_files 10 \
  --audio_duration 5.0 \
  --batch_size 1 \
  --warmup 3 \
  --runs 10 \
  --compare_cpu \
  --output performance_results.json

# 仅 NPU 性能基准
python3 evaluate_performance.py \
  --model_dir ./pretrained_models/FireRedASR2-AED \
  --num_test_files 5 \
  --audio_duration 3.0 \
  --batch_size 1 \
  --output performance_results.json

模型信息

属性值
模型名称FireRedASR2-AED
架构Conformer Encoder + Transformer Decoder (AED)
参数量1,152,521,275 (~1.15B)
模型大小 (FP32)4.4 GB
支持语言中文(普通话 + 20+ 方言)、英文、中英混合
最大输入长度60 秒
采样率16kHz
特征维度80 维 FBank
词表大小~27,000 (BPE + 中文字符)
原始仓库FireRedTeam/FireRedASR2S
模型下载ModelScope

官方基准精度

以下为 FireRedASR2-AED 在公开测试集上的官方 CER 结果:

测试集FireRedASR2-AED CER
AISHELL-10.57%
AISHELL-22.51%
WenetSpeech-Net4.57%
WenetSpeech-Meeting4.53%
Mandarin 平均3.05%
Chinese Dialects 平均11.67%

数据来源:FireRedASR2S 官方 README

项目结构

FireRedASR2-AED/
├── inference.py                # NPU 推理主脚本
├── evaluate_accuracy.py         # 精度评估脚本(NPU vs CPU)
├── evaluate_performance.py      # 性能基准测试脚本
├── accuracy_results.json        # 精度评估结果
├── performance_results.json     # 性能测试结果
├── inference_output.json        # 推理输出样例
├── README.md                    # 本文档
├── test_tone.wav                # 测试音频(合成)
└── FireRedASR2S/               # 官方模型代码(需自行克隆)

交付件清单

交付件文件说明
推理脚本inference.py支持 NPU/GPU/CPU 的完整推理程序
部署文档README.md环境配置、推理指南、API 说明
精度评测evaluate_accuracy.py + accuracy_results.jsonNPU vs CPU 一致性验证,CER < 1% ✅
性能评测evaluate_performance.py + performance_results.json吞吐/延迟/RTF 基准,NPU vs CPU 48.83x 加速
运行日志见下方截图推理/评测完整日志

运行日志

推理日志

2026-05-16 05:30:07,467 INFO: NPU available: True, count: 2
2026-05-16 05:30:07,472 INFO: NPU device: Ascend910_9362
2026-05-16 05:30:07,472 INFO: NPU count: 2
2026-05-16 05:30:07,472 INFO: Using device: npu
2026-05-16 05:30:07,473 INFO: Loading feature extractor...
2026-05-16 05:30:07,473 INFO: Loading AED model...
2026-05-16 05:30:17,086 INFO: #param of FireRedAsrAed is 1152521275 = 4396.5 MB (float32)
2026-05-16 05:30:20,254 INFO: Model loaded successfully on npu
============================================================
Utterance: test_tone
Text:      
Confidence: 0.914
Duration:   2.0s
RTF:        0.2174

精度评测日志

2026-05-16 05:31:25,188 INFO: ACCURACY EVALUATION SUMMARY
2026-05-16 05:31:25,188 INFO: ============================================================
2026-05-16 05:31:25,188 INFO:   Samples:         1
2026-05-16 05:31:25,188 INFO:   Output Match:    100.0%
2026-05-16 05:31:25,188 INFO:   CER (NPU vs CPU): Avg=0.0%, Max=0.0%
2026-05-16 05:31:25,188 INFO:   Accuracy Gate:    PASS

性能评测日志

2026-05-16 05:33:36,230 INFO: PERFORMANCE BENCHMARK SUMMARY
2026-05-16 05:33:36,230 INFO: ============================================================
2026-05-16 05:33:36,230 INFO:   Throughput:     32.2937x realtime
2026-05-16 05:33:36,230 INFO:   Avg Latency:    0.0929s
2026-05-16 05:33:36,230 INFO:   Avg RTF:        0.029124
2026-05-16 05:33:36,230 INFO:   P50/P90/P99:    0.093s / 0.0937s / 0.0939s
2026-05-16 05:33:36,230 INFO:   NPU Memory:     4582.16MB allocated
2026-05-16 05:33:36,230 INFO:   NPU vs CPU:     48.83x speedup

常见问题

Q: NPU 推理时出现 OOM? A: FireRedASR2-AED 需要约 4.6GB HBM。确保 NPU 空闲显存充足,或多卡环境指定空闲卡号(设置 ASCEND_RT_VISIBLE_DEVICES 环境变量)。

Q: 推理结果为空文本? A: 检查输入音频格式(16kHz 16-bit mono PCM WAV)。测试音频(纯正弦波)无实际语音内容时输出为空属正常现象。

Q: 如何使用 FP16 推理? A: 设置 config.use_half = True 或命令行添加 --use_half。

Q: 音频超过 60 秒怎么办? A: 建议先使用 FireRedVAD 进行语音活动检测和分段,再对每段进行 ASR 识别。

致谢

  • FireRedTeam/FireRedASR2S - 原始模型及代码
  • 华为昇腾 Ascend - NPU 硬件平台
  • ModelScope - 模型托管平台

许可

本项目代码遵循 Apache License 2.0。模型权重遵循 FireRedTeam 原始许可协议。


Tags: #NPU #Ascend910 #FireRedASR2 #ASR #Speech-Recognition #PyTorch #torch_npu #Hardware-NPU