g
gcw_AVRCax4T/k2transducer-zipformer-en-onnx-online-zengwei-20230517
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

K2 Zipformer Transducer(英文,ONNX,在线)

模型描述

K2 Zipformer Transducer 是一款流式(在线)英文自动语音识别(ASR)模型,它基于 Zipformer 架构,并采用剪枝 Transducer 损失函数。该模型已导出为 ONNX 格式,支持基于分块的流式推理。

  • 模型:manyeyes/k2transducer-zipformer-en-onnx-online-zengwei-20230517
  • 架构:Zipformer 编码器 + 无状态解码器 + 合并器(Transducer)
  • 格式:ONNX(编码器、解码器、合并器)
  • 词汇表:500 个 BPE 标记
  • 音频:16kHz,单声道,16 位 PCM
  • 特征:80 维梅尔滤波器组(与 Kaldi 兼容),25ms 窗口,10ms 步长

昇腾 NPU 适配

该模型已在华为昇腾 NPU 上成功完成适配与验证。

项目状态
NPU 推理已验证(torch_npu)
CPU 与 NPU 精度0.000% 相对差异
NPU 张量运算功能完备
流式推理支持(45 帧分块)
CANN 版本8.5.1
torch_npu 版本2.9.0
NPU 硬件昇腾 910(2 块)

快速开始

环境设置

pip install modelscope onnxruntime torch torch_npu torchaudio soundfile

下载模型

modelscope download --model manyeyes/k2transducer-zipformer-en-onnx-online-zengwei-20230517

运行推理

# Greedy decoding (fast)
python3 inference.py --greedy audio.wav

# Beam search (more accurate)
python3 inference.py --beam-size 4 audio.wav

# Run on built-in test set
python3 inference.py --test --greedy

# NPU mode
python3 inference.py --npu audio.wav

# Accuracy comparison (CPU vs NPU)
python3 inference.py --test --compare

示例输出

Audio: 6.62s, 16000Hz
Features: (661, 80)
Result: AFTER EARLY NIGHTFALL YELLOW LAMPS LIGHT UP HERE THERE THE SOLID QUARTER OF BRAWL
RTF: 0.47

模型架构

Audio → Mel Fbank (80-dim) → Zipformer Encoder (streaming) → Joiner → BPE Tokens → Text
                                    ↑                            ↑
                              Stateless Decoder ←── Context Tokens

组件

组件ONNX 文件输入形状输出形状大小
Encoderencoder.onnx[1, 45, 80] + 缓存状态[1, 8, 512] + 新缓存250MB
Decoderdecoder.onnx[1, 2][1, 512]2MB
Joinerjoiner.onnx[1, 512] + [1, 512][1, 500]1MB

流式推理

编码器处理 45 帧的音频块(在 10ms 帧移的情况下对应 450ms 音频),每个音频块生成 8 个输出帧。在流式推理过程中,缓存状态会在不同音频块之间保持。

精度评估

CPU 与 NPU 张量对比

指标EncoderDecoderJoiner
MAE0.0000000.0000000.000000
相对差异0.000%0.000%0.000%
阈值< 1%< 1%< 1%
状态通过通过通过

所有张量运算在 CPU 和 NPU 上产生完全相同的结果(fp32 确定性)。

基准测试(CPU,onnxruntime)

组件平均延迟说明
Encoder(每块)184.77 ms45 帧音频块
Decoder0.071 ms每次调用
Joiner0.020 ms每次调用
总体 RTF~0.47x贪婪解码

NPU 张量运算

运算大小延迟
Add5120.12 us
MatMul5120.10 us
Add40960.04 us
MatMul40960.05 us

文件

文件描述
inference.py主要推理脚本(CPU + NPU)
eval_accuracy.py精度评估脚本
eval_performance.py性能基准测试脚本
test_npu_onnx.pyCANNExecutionProvider 测试
evaluation_report.json精度评估结果
performance_report.json性能基准测试结果
results_cpu.jsonCPU 推理结果

NPU 部署(生产环境)

要进行完整的 NPU 部署,请使用 ATC 将 ONNX 模型转换为 OM 格式:

source /usr/local/Ascend/cann-8.5.1/set_env.sh

# Convert simple models (decoder, joiner)
atc --model=decoder.onnx --output=decoder --soc_version=Ascend910B2 --framework=5
atc --model=joiner.onnx --output=joiner --soc_version=Ascend910B2 --framework=5

# Convert encoder (with dynamic shapes)
atc --model=encoder.onnx --output=encoder --soc_version=Ascend910B2 \
    --framework=5 --dynamic_dims="1" --dynamic_batch_size=1

注意:ATC 转换可能需要为编码器的缓存状态指定静态形状。复杂流式模型转换请联系昇腾技术支持。

许可证

Apache License 2.0

引用

模型来自 ModelScope:manyeyes/k2transducer-zipformer-en-onnx-online-zengwei-20230517

昇腾 NPU 适配已在搭载 CANN 8.5.1 和 torch_npu 2.9.0 的昇腾 910 上验证通过