UniASR 是一款双 pass 端到端语音识别模型,通过单一编码器-解码器架构实现流式与非流式语音识别的统一。本版本为越南语变体,包含 1001 个子词单元,已完成华为昇腾 NPU 推理的适配与验证。
| 属性 | 值 |
|---|---|
| 原始模型 | iic/speech_UniASR_asr_2pass-vi-16k-common-vocab1001-pytorch-offline |
| 框架 | FunASR 1.3.1 + PyTorch 2.x |
| 语言 | 越南语 (vi) |
| 采样率 | 16 kHz |
| 词汇量 | ~1002 个字符级 tokens |
| 架构 | SANM 编码器 + FSMN-SCAMA 解码器 + CIF 预测器 |
| 前端 | 80 维 fbank + LFR (lfr_m=7, lfr_n=6) → 560 维特征 |
| NPU 兼容性 | 昇腾 910B / 910C (CANN 8.5.1+) |
| 检查项 | 状态 | 详情 |
|---|---|---|
| 模型加载 | 通过 | 完整 state_dict 在 NPU 上加载成功 |
| 推理正确性 | 通过 | 输出与 CPU 完全一致 |
| 字符准确率 | 100.00% | 与 CPU 基线相比错误率为 0% |
| 性能 | 1.59 倍加速 | NPU 持续性能对比 CPU |
| 完整性检查 | 通过 | 端到端流水线验证通过 |
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| NPU | 昇腾 910B | 昇腾 910B / 910C |
| CANN | 8.5.1 | 8.5.1+ |
| CPU 内存 | 4 GB | 8 GB |
| NPU 内存 | 8 GB | 16 GB |
| 磁盘 | 2 GB | 5 GB |
# Install CANN 8.5.1 (refer to Huawei official documentation)
# Verify installation
npu-smi info
# Install torch-npu
pip install torch-npupip install funasr>=1.3.1
pip install modelscope
pip install soundfile
pip install numpy pyyamlmodelscope download --model iic/speech_UniASR_asr_2pass-vi-16k-common-vocab1001-pytorch-offline \
--local_dir ./uniASR_modelpython inference.py --device npu --audio example/asr_example.wavpython inference.py --device cpu --audio example/asr_example.wavpython inference.py --device compare --audio example/asr_example.wav --output inference_log.txtfrom inference import run_single_inference
result, elapsed, num_frames, frontend = run_single_inference(
model_dir="/opt/atomgit/uniASR_model",
audio_path="example/asr_example.wav",
device="npu",
warmup=1
)
print(f"Transcription: {result}")
print(f"Inference time: {elapsed:.3f}s")测试环境:Ascend 910B,CANN 8.5.1,FunASR 1.3.1
| 指标 | CPU | NPU(首次运行) | NPU(持续运行) |
|---|---|---|---|
| 推理时间 | 1.500s | 2.125s | 0.941s |
| 实时率(RTF) | 0.4808 | 0.6812 | 0.3017 |
| 相对CPU加速比 | 1.00x | 0.71x | 1.59x |
注:首次NPU运行包含内核编译开销(约1.2秒)。持续运行时,相比CPU实现1.59倍加速。
测试音频:example/asr_example.wav(3.12秒,16kHz,越南语语音)
| 指标 | 值 |
|---|---|
| CPU结果 | kích thích |
| NPU结果 | kích thích |
| 完全匹配 | True |
| 字符准确率 | 100.00% |
| 错误率 | 0.0000% |
NPU推理输出与CPU完全一致,验证了零精度损失。
Audio (16kHz WAV)
│
▼
WavFrontend (80-dim fbank + LFR)
│ 560-dim features
▼
SANM Encoder (SpecAugLFR + stride_conv)
│
▼
CIF PredictorV2 ──► pre_acoustic_embeds, scama_mask
│
▼
SANM Encoder2 (Big-Chunk)
│
▼
FSMN-SCAMA Decoder + Beam Search (beam_size=5)
│
▼
Token Decoding (CharTokenizer, 1002 vocab)
│
▼
Vietnamese TextuniASR_model/
├── inference.py # NPU-adapted inference script
├── README.md # This documentation
├── config.yaml # Model architecture config
├── decoding.yaml # Beam search config
├── model.pb # PyTorch state_dict (~367 MB)
├── configuration.json # ModelScope metadata
├── example/
│ └── asr_example.wav # Test audio sample
└── inference_log.txt # Accuracy comparison output单次运行模式:由于 UniASR 架构中 CIF 预测器状态的持久性,每次推理调用都会创建一个全新的模型实例。对于批量处理,请先实例化模型一次,然后在每个 utterance 前调用 init_beam_search()。
首次运行开销:NPU 内核编译会在首次推理时增加约 1.2 秒的时间。进行性能基准测试时,请使用 --warmup 标志。
仅支持 model2(离线)解码:本适配版本使用 offline 解码模式。流式模式(fast/normal)暂未在此适配中实现。
仅限 Linux 系统:NPU 推理需要安装有 Ascend 驱动的 Linux 系统。CPU 模式可用作备用方案。
@inproceedings{gao2020universal,
title={Universal ASR: Unifying Streaming and Non-Streaming ASR Using a Single Encoder-Decoder Model},
author={Gao, Zhifu and Zhang, Shiliang and Lei, Ming and McLoughlin, Ian},
booktitle={arXiv preprint arXiv:2010.14099},
year={2010}
}