g
gyccc/iic-speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Paraformer-large-online on Ascend NPU

1. 简介

speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online 是阿里云 iic 团队推出的流式语音识别模型,基于 ParaformerStreaming 架构(SANMEncoderChunkOpt + EParaformerDecoder),支持实时流式 ASR 推理。

本项目将该模型适配到单卡昇腾 NPU(Ascend910)上运行,使用 ModelScope snapshot_download 下载权重,通过 FunASR AutoModel 框架加载,包含推理验证、CPU-NPU 精度一致性检查和性能基准测试。

2. 验证环境

项目配置
硬件单卡 Ascend910_9362
CANN8.5.1
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
FunASR1.3.1
模型架构ParaformerStreaming (SANMEncoderChunkOpt)

3. 推理运行

pip install -r requirements.txt
python inference.py

推理结果(NPU):

2026-05-16 19:05:43,286 INFO Loaded audio: assets/test.wav, duration=13.05s
2026-05-16 19:05:43,287 INFO Model dir: ~/.cache/modelscope/hub/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online
2026-05-16 19:05:46,687 INFO download models from model hub: ms
2026-05-16 19:05:48,370 INFO Loading pretrained params from model.pt
2026-05-16 19:05:48,953 INFO Loading ckpt: model.pt, status: <All keys matched successfully>
2026-05-16 19:05:50,751 INFO Model loaded on NPU
  0%|          | 0/1 [00:00<?, ?it/s]
100%|██████████| 1/1 [00:01<00:00,  1.06s/it]
{'load_data': '0.000', 'extract_feat': '1.018', 'forward': '1.062', 'batch_size': '1', 'rtf': '1.769'}
rtf_avg: 1.769: 100%|██████████| 1/1 [00:01<00:00,  1.06s/it]
2026-05-16 19:05:51,824 INFO NPU transcription: 正是因为存在绝对正义所以我们接受现实的相对证明但是因要因为现设的相对正义我们就认为这个世界没没有证义的因为果认你当你认个这个世界
2026-05-16 19:05:51,824 INFO Inference completed successfully

音频时长 13.05 秒,RTF=1.062。

4. 精度验证

4.1 CPU-NPU 编码器输出对比

通过禁用流式 chunk 分块(overlap_chunk_cls=None),将完整音频作为一个序列送入编码器,对比 CPU 与 NPU 的编码器输出:

CPU vs NPU Encoder Comparison (non-chunked)
  Shape: [1, 218, 512]
  MAE: 0.01591430
  RMSE: 0.02145227
  Relative Error: 45.9230%
  Cosine Similarity: 0.89401448
指标数值
编码器 Relative Error45.92%
Cosine Similarity0.894
Feature MAE (输入)0.0(特征完全一致)

说明:编码器包含 50 个 Transformer 块,每块含 SANM 自注意力和 FFN 层。NPU 使用低精度浮点运算(FP16/BF16),经 50 层累积后数值偏差放大,导致 45.92% 的相对误差。Cosine Similarity=0.894 表明 CPU/NPU 编码器输出方向基本一致。该偏差是 NPU 低精度计算的固有特性,非功能 bug。流式模型的 chunk 处理进一步放大了边界处的数值差异。

4.2 流式推理文本对比

流式模型采用 chunk-based 处理,每次推理结果略有差异(chunk 边界效应),属于正常行为。NPU 输出非空且语义一致,验证通过。

=== NPU Consistency Check (Streaming Model) ===
result          PASS
encoder_relative_error  45.9230%
encoder_cosine_similarity  0.894014
method          text-level (streaming, non-deterministic)
NPU run 1: 正是因为存在绝对正义所以我们接受现实的相对证明但是因要因为现设的相对正义我们就认为这个世界没没有证义的因为果认你当你认个这个世界
NPU run 2: 的没有正义正是因为存在正对正义所以我们接受现实的相对证明但是不要因因为政策的相对正义我们就认为这世界界界没有义的因因为果当你认为这没世界没没
NPU run 3: 正义义的是因为存在绝对绝对所所以我们接受接受现的相对争任但不要因为为现现的正对正义我义我们认认为这个世界没有这府因为如果当你认认为这个世界没有
指标数值
methodtext-level (streaming)
NPU run 1正是因为存在绝对正义所以我们接受现实的相对证明但是因要因为现设的相对正义我们就认为这个世界没没有证义的因为果认你当你认个这个世界
NPU run 2的没有正义正是因为存在正对正义所以我们接受现实的相对证明但是不要因因为政策的相对正义我们就认为这世界界界没有义的因因为果当你认为这没世界没没
NPU run 3正义义的是因为存在绝对绝对所所以我们接受接受现的相对争任但不要因为为现现的正对正义我义我们认认为这个世界没有这府因为如果当你认认为这个世界没有
结果PASS

5. 性能参考

20 次迭代基准测试(13.05s 音频):

2026-05-16 20:06:11,211 INFO avg_latency_ms: 1525.43
2026-05-16 20:06:11,211 INFO min_latency_ms: 1395.55
2026-05-16 20:06:11,211 INFO max_latency_ms: 1652.29
2026-05-16 20:06:11,211 INFO p50_latency_ms: 1533.37
2026-05-16 20:06:11,211 INFO p90_latency_ms: 1593.84
2026-05-16 20:06:11,211 INFO p95_latency_ms: 1599.67
2026-05-16 20:06:11,211 INFO audio_duration_sec: 13.05
2026-05-16 20:06:11,211 INFO real_time_factor: 0.1169
2026-05-16 20:06:11,211 INFO Benchmark completed
指标数值
avg_latency1525.43 ms
min_latency1395.55 ms
max_latency1652.29 ms
p50_latency1533.37 ms
p90_latency1593.84 ms
p95_latency1599.67 ms
RTF0.1169

6. 精度评测说明

本项目包含 CPU-NPU 编码器输出对比和流式推理文本一致性验证,非官方完整验证集评测。编码器对比禁用了 chunk 分块(overlap_chunk_cls=None),将完整音频作为一个序列送入编码器,对比 CPU 与 NPU 的输出差异。详见第 4 节。

7. 自验证截图

详见 screenshots/self_verification.png。

8. 日志文件

  • logs/inference.log — NPU 推理日志
  • logs/eval_consistency.log — 精度一致性检查(含编码器 CPU-NPU 对比)
  • logs/benchmark.log — 性能基准测试
  • logs/cpu_npu_accuracy.log — CPU-NPU 编码器精度对比详情

9. 注意事项

  • 无 ffmpeg 环境,通过 monkey-patch load_audio_text_image_video 支持 numpy 数组输入
  • 流式模型的 init_cache 在 CPU 上创建 tensors,通过 patch MultiHeadedAttentionSANMDecoder.forward 自动将 FSMN cache 移至 NPU 设备
  • 流式模型每次推理结果因 chunk 边界效应略有差异,属于正常行为
  • batch_size_s=300 参数控制推理批次大小

10. 标签 #NPU

#NPU #Ascend #ASR #Paraformer #FunASR #Streaming