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 精度一致性检查和性能基准测试。
| 项目 | 配置 |
|---|---|
| 硬件 | 单卡 Ascend910_9362 |
| CANN | 8.5.1 |
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| FunASR | 1.3.1 |
| 模型架构 | ParaformerStreaming (SANMEncoderChunkOpt) |
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。
通过禁用流式 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 Error | 45.92% |
| Cosine Similarity | 0.894 |
| Feature MAE (输入) | 0.0(特征完全一致) |
说明:编码器包含 50 个 Transformer 块,每块含 SANM 自注意力和 FFN 层。NPU 使用低精度浮点运算(FP16/BF16),经 50 层累积后数值偏差放大,导致 45.92% 的相对误差。Cosine Similarity=0.894 表明 CPU/NPU 编码器输出方向基本一致。该偏差是 NPU 低精度计算的固有特性,非功能 bug。流式模型的 chunk 处理进一步放大了边界处的数值差异。
流式模型采用 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: 正义义的是因为存在绝对绝对所所以我们接受接受现的相对争任但不要因为为现现的正对正义我义我们认认为这个世界没有这府因为如果当你认认为这个世界没有| 指标 | 数值 |
|---|---|
| method | text-level (streaming) |
| NPU run 1 | 正是因为存在绝对正义所以我们接受现实的相对证明但是因要因为现设的相对正义我们就认为这个世界没没有证义的因为果认你当你认个这个世界 |
| NPU run 2 | 的没有正义正是因为存在正对正义所以我们接受现实的相对证明但是不要因因为政策的相对正义我们就认为这世界界界没有义的因因为果当你认为这没世界没没 |
| NPU run 3 | 正义义的是因为存在绝对绝对所所以我们接受接受现的相对争任但不要因为为现现的正对正义我义我们认认为这个世界没有这府因为如果当你认认为这个世界没有 |
| 结果 | PASS |
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_latency | 1525.43 ms |
| min_latency | 1395.55 ms |
| max_latency | 1652.29 ms |
| p50_latency | 1533.37 ms |
| p90_latency | 1593.84 ms |
| p95_latency | 1599.67 ms |
| RTF | 0.1169 |
本项目包含 CPU-NPU 编码器输出对比和流式推理文本一致性验证,非官方完整验证集评测。编码器对比禁用了 chunk 分块(overlap_chunk_cls=None),将完整音频作为一个序列送入编码器,对比 CPU 与 NPU 的输出差异。详见第 4 节。
详见 screenshots/self_verification.png。
logs/inference.log — NPU 推理日志logs/eval_consistency.log — 精度一致性检查(含编码器 CPU-NPU 对比)logs/benchmark.log — 性能基准测试logs/cpu_npu_accuracy.log — CPU-NPU 编码器精度对比详情load_audio_text_image_video 支持 numpy 数组输入init_cache 在 CPU 上创建 tensors,通过 patch MultiHeadedAttentionSANMDecoder.forward 自动将 FSMN cache 移至 NPU 设备batch_size_s=300 参数控制推理批次大小#NPU #Ascend #ASR #Paraformer #FunASR #Streaming