FireRedASR2-AED 是小红书 FireRedTeam 开源的工业级自动语音识别(ASR)模型,采用 Conformer Encoder + Transformer Decoder 的 Attention-based Encoder-Decoder (AED) 架构,参数量约 1.15B。
该模型支持:
本仓库提供 FireRedASR2-AED 在华为昇腾 Ascend NPU 上的完整适配方案,包括推理脚本、精度验证和性能基准测试。
基于 torch_npu 将原生 PyTorch CUDA 推理流程迁移至 Ascend NPU,关键适配点:
| 适配项 | 原始实现 | NPU 适配 |
|---|---|---|
| 设备后端 | model.cuda() / tensor.cuda() | model.to(npu) / tensor.to(npu) |
| 推理精度 | FP32 / FP16 | FP32 / FP16(NPU 原生支持) |
| 特征提取 | CPU(kaldi-native-fbank) | CPU(保持不变,仅 80 维 fbank) |
| Beam Search | GPU 上执行 | NPU 上执行 |
| 模型参数 | 1.15B (4.4GB FP32) | 1.15B (4.4GB FP32),NPU HBM 占用 ~4.6GB |
| 组件 | 版本要求 |
|---|---|
| 操作系统 | Linux (Ubuntu 22.04 / openEuler 22.03) |
| Python | 3.10+ |
| CANN | 8.5.1+ |
| PyTorch | 2.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.gitgit clone https://atomgit.com/weixin_62994174/FireRedASR2-AED.git
cd FireRedASR2-AED音频要求:16kHz, 16-bit, 单声道 PCM WAV
# 使用 ffmpeg 转换音频格式
ffmpeg -i input.mp3 -ar 16000 -ac 1 -acodec pcm_s16le -f wav output.wavimport 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']}")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 Size | 3 |
| 指标 | NPU (Ascend 910) | CPU (AArch64) | 加速比 |
|---|---|---|---|
| 吞吐量 (x realtime) | 32.29x | 0.66x | 48.83x |
| 平均延迟 (3s 音频) | 0.093s | 4.536s | 48.83x |
| 平均 RTF | 0.029 | 1.504 | 51.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-1 | 0.57% |
| AISHELL-2 | 2.51% |
| WenetSpeech-Net | 4.57% |
| WenetSpeech-Meeting | 4.53% |
| Mandarin 平均 | 3.05% |
| Chinese Dialects 平均 | 11.67% |
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.json | NPU 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.21742026-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: PASS2026-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 speedupQ: 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 识别。
本项目代码遵循 Apache License 2.0。模型权重遵循 FireRedTeam 原始许可协议。
Tags: #NPU #Ascend910 #FireRedASR2 #ASR #Speech-Recognition #PyTorch #torch_npu #Hardware-NPU