speech_rwkv_bat_asr-zh-cantonese-en-16k-vocab8501(昇腾NPU适配版)
基于RWKV BAT(边界感知转换器)的中文/粤语/英语多语言语音识别模型,已适配华为昇腾Ascend 910 NPU推理。
模型详情
| 字段 | 值 |
|---|
| 模型名称 | speech_rwkv_bat_asr-zh-cantonese-en-16k-vocab8501-pytorch-online |
| 架构 | RWKV-BAT(边界感知转换器) |
| 编码器 | RWKV(18个块,输出大小=512) |
| 解码器 | RNN-T解码器(LSTM,隐藏大小=512) |
| 词汇表大小 | 8501个 tokens |
| 采样率 | 16000 Hz |
| 特征 | 带LFR的80维fbank(m=7,n=6) |
| 参数 | 73,164,085 |
| 语言 | 普通话、粤语、英语 |
| 原始框架 | PyTorch(FunASR) |
| 来源 | ModelScope |
NPU适配摘要
| 项目 | 状态 |
|---|
| NPU硬件 | Ascend 910 |
| CANN版本 | 8.5.1 |
| torch_npu版本 | 2.9.0.post1 |
| PyTorch版本 | 2.9.0 |
| FunASR版本 | 1.3.1 |
| 适配方法 | 模型权重加载 + 设备迁移 |
| 模型加载 | 带嵌入重映射的直接state_dict加载 |
| 推理流水线 | FunASR RWKVEncoder + BeamSearchTransducer |
环境设置
# Install dependencies
pip install torch==2.9.0 torch_npu==2.9.0.post1
pip install funasr modelscope soundfile librosa omegaconf
pip install torchaudio # for feature extraction
# Verify NPU availability
npu-smi info
python -c "import torch_npu; print(torch_npu.npu.device_count())"
快速开始
下载模型
pip install modelscope
modelscope download --model dengcunqin/speech_rwkv_bat_asr-zh-cantonese-en-16k-vocab8501-pytorch-online
运行推理
# CPU Inference (baseline)
python inference.py --device cpu --audio <path_to_wav>
# NPU Inference
python inference.py --device npu --audio <path_to_wav>
# Accuracy Comparison (CPU vs NPU)
python inference.py --device npu --audio <path_to_wav> --compare
# Performance Benchmark (10 runs)
python inference.py --device npu --audio <path_to_wav> --benchmark
Python API
from inference import load_model, run_inference
# Load model on NPU
import torch
device = torch.device("npu:0")
model_info = load_model(device=device)
# Run inference
result = run_inference(model_info, "audio.wav")
print(f"Text: {result['text']}")
print(f"Score: {result['score']:.4f}")
精度验证
CPU 与 NPU 输出对比
| 指标 | 数值 | 阈值 | 状态 |
|---|
| 文本匹配 | 完全匹配 | N/A | PASS |
| 推理得分差异 | 3.91e-05 | < 1e-3 | PASS |
| 编码器最大绝对差异 | 4.29e-06 | < 1e-3 | PASS |
| 编码器平均绝对差异 | 1.45e-07 | < 1e-3 | PASS |
| 编码器平均相对差异 | 0.0005% | < 1% | PASS |
测试配置
| 参数 | 数值 |
|---|
| 测试音频 | 3秒合成语音(16kHz,单声道,float32) |
| 解码方式 | 波束搜索(beam_size=10) |
| 精度 | Float32 |
| NPU 设备 | Ascend 910(npu:0) |
性能基准测试
NPU 推理性能
| 指标 | NPU(Ascend 910) | CPU(ARM) | 加速比 |
|---|
| 平均延迟 | 1.622秒 | 4.846秒 | 2.99倍 |
| 最小延迟 | 1.597秒 | 4.823秒 | 3.02倍 |
| 最大延迟 | 1.649秒 | 4.895秒 | 2.97倍 |
| 标准差 | 0.019秒 | 0.023秒 | - |
| 实时因子(RTF) | 0.541 | 1.615 | 2.99倍 |
单次运行延迟(10次运行,3次预热后)
| 运行次数 | NPU | CPU |
|---|
| 1 | 1.598秒 | 4.841秒 |
| 2 | 1.638秒 | 4.836秒 |
| 3 | 1.649秒 | 4.833秒 |
| 4 | 1.607秒 | 4.847秒 |
| 5 | 1.615秒 | 4.834秒 |
| 6 | 1.629秒 | 4.828秒 |
| 7 | 1.605秒 | 4.842秒 |
| 8 | 1.597秒 | 4.823秒 |
| 9 | 1.644秒 | 4.895秒 |
| 10 | 1.634秒 | 4.886秒 |
测试配置
| 参数 | 数值 |
|---|
| 音频时长 | 3.0秒 |
| 采样率 | 16000 Hz |
| 波束大小 | 10 |
| 批处理大小 | 1 |
| 测试平台 | Ascend 910 / CANN 8.5.1 |
模型架构
RWKV-BAT ASR Pipeline:
1. WavFrontend: 80-dim fbank extraction + LFR (7:6 stacking -> 560-dim)
2. Encoder: SimpleEmbed (Linear 560->512) + LayerNorm
+ 18x RWKV Blocks (WKLV attention + SquaredReLU FFN with gating)
+ Final LayerNorm
3. RNN-T Decoder: Embedding + LSTM(512) -> JointNetwork
4. BeamSearchTransducer: beam_size=10
已知限制
- 原始模型检查点使用
Linear 嵌入(embed_liner),而当前 FunASR 的 RWKVEncoder 期望的是基于 CNN 的 RWKVConvInput。NPU 适配将 RWKVConvInput 替换为匹配的 Linear 层并加载预训练权重。这可能与原始训练架构存在细微差异。
predictor(CIF)模块权重被跳过,因为 Transducer 模型在当前推理流程中未纳入这些权重。
- MVN 统计文件(
am.mvn)采用 Kaldi Nnet 格式,需要 Kaldi 运行时才能正确加载。目前已省略特征归一化步骤。在真实语音数据上达到完整精度需要正确加载 CMVN。
文件
| 文件 | 描述 |
|---|
inference.py | 经 NPU 适配的推理脚本,包含 CPU/NPU 对比功能 |
README.md | 本部署与评估报告 |
引用
原始模型由阿里巴巴达摩院开发,基于 FunASR 框架和 RWKV 架构。
@misc{funasr,
author = {FunASR Team},
title = {FunASR: A Fundamental End-to-End Speech Recognition Toolkit},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {https://github.com/alibaba-damo-academy/FunASR}
}
许可证
Apache 许可证 2.0