TeleSpeech-ASR-Finetune 昇腾 NPU 适配
tags: #NPU #Ascend #Huawei-Ascend #auto-speech-recognition #data2vec #PyTorch
hardware: #NPU #Ascend-910B
license: apache-2.0
模型信息
| 属性 | 值 |
|---|
| 模型名称 | TeleSpeech-ASR-Finetune |
| 模型来源 | luchuanze/TeleSpeech-ASR-Finetune |
| 基础架构 | data2vec 2.0 (Audio Encoder + Transformer) |
| 任务类型 | auto-speech-recognition (语音识别) |
| 框架 | PyTorch 2.9 |
| 输入 | 40-dim MFCC/FBank 特征 |
| 输出 | 1024-dim 上下文语音表征 |
| 参数量 | ~300M (0.3B) |
| 原始框架 | Fairseq (data2vec_dialect) |
硬件环境
| 项目 | 规格 |
|---|
| 硬件平台 | Huawei Atlas 800 A2 |
| NPU 型号 | Ascend 910B/910C |
| CANN 版本 | 8.5.1 |
| torch_npu 版本 | 2.9.0.post1 |
| PyTorch 版本 | 2.9.0 |
适配方案
架构概述
TeleSpeech-ASR 基于 data2vec 2.0 多模态架构,包含以下核心组件:
Audio Waveform → FBank (40-dim) → CNN Encoder → Relative Positional Encoder
→ ALiBi Context Encoder (8层) → Transformer Backbone (16层) → 1024-dim 表征
关键组件
| 模块 | 配置 |
|---|
| CNN 特征提取 | 2层 Conv1d (40→512→512, kernel=3, stride=2) |
| 特征投影 | LayerNorm(512) + Linear(512→1024) |
| 相对位置编码 | 5层 Conv1d(64→1024, kernel=19) |
| Context Encoder | 8层 ALiBi Transformer (dim=1024, heads=16, ff=4096) |
| Transformer Backbone | 16层 Standard Transformer (dim=1024, heads=16, ff=4096) |
NPU 适配策略
- 模型重建: 从 Fairseq checkpoint 提取权重,使用纯 PyTorch 重建模型结构
- 权重映射: 直接 key-value 映射加载 313 个参数张量,无需转换
- 设备适配: 使用
torch.npu 自动将模型和输入迁移到 NPU 设备
- 无自定义算子: 全部使用标准 PyTorch 算子,兼容
torch_npu 后端
快速开始
1. 环境准备
# 确保已安装 torch_npu
pip install torch_npu
# 安装 modelscope 下载模型
pip install modelscope
2. 下载模型
modelscope download --model luchuanze/TeleSpeech-ASR-Finetune
3. 运行推理
# NPU 推理
python3 inference.py --device npu
# NPU 推理 + 性能评测
python3 inference.py --device npu --benchmark --benchmark-steps 50
# NPU 推理 + CPU 精度对比
python3 inference.py --device npu --compare
# CPU 推理 (基线)
python3 inference.py --device cpu --benchmark --benchmark-steps 10
# 从音频文件推理
python3 inference.py --device npu --audio /path/to/audio.wav --output features.npy
4. 运行完整评测
python3 eval_benchmark.py
评测完成后结果保存至 eval/evaluation_results.json。
评测结果
1. 模型加载验证
| 指标 | 结果 |
|---|
| 总参数张量数 | 313 |
| 成功加载 | 313 |
| 加载率 | 100.00% |
| 状态 | PASS |
2. 精度对比 (CPU vs NPU)
| 指标 | 数值 |
|---|
| CPU 输出均值 | -0.229099 |
| NPU 输出均值 | -0.229255 |
| CPU 输出标准差 | 31.433681 |
| NPU 输出标准差 | 31.433445 |
| 最大绝对误差 | 0.084839 |
| 平均绝对误差 | 0.005475 |
| 相对误差 | 0.0238% |
| 余弦相似度 | 0.99999972 |
| 精度阈值 (1%) | PASS |
3. 性能 Benchmark (seq_len=300)
| 指标 | 数值 |
|---|
| 推理延迟 (avg) | 12.09 ms |
| 吞吐量 | 24,813 frames/sec |
| Benchmark 迭代数 | 100 |
4. 多序列长度性能
| 输入帧数 | 输出帧数 | 推理延迟 | 吞吐量 (fps) |
|---|
| 150 | 38 | 12.14 ms | 12,351 |
| 300 | 75 | 12.09 ms | 24,806 |
| 600 | 150 | 12.03 ms | 49,860 |
| 1200 | 300 | 12.08 ms | 99,302 |
| 2400 | 600 | 17.90 ms | 134,068 |
5. CPU vs NPU 延迟对比
| 设备 | 推理延迟 | 加速比 |
|---|
| CPU | ~991 ms | 1× |
| NPU | 12.09 ms | ~82× |
文件说明
| 文件 | 说明 |
|---|
inference.py | 推理脚本(支持 CPU/NPU/CUDA) |
eval_benchmark.py | 精度/性能评测脚本 |
eval/evaluation_results.json | 评测结果 JSON |
README.md | 部署文档 |
模型卡片
tags:
- NPU
- Ascend
- Huawei-Ascend
- auto-speech-recognition
- data2vec
- PyTorch
hardware:
- NPU
- Ascend-910B
model_type: data2vec
task: auto-speech-recognition
language: zh (Chinese, multi-dialect)
license: Apache-2.0
framework: PyTorch
技术细节
输入预处理
模型输入为 40 维 FBank (Filter Bank) 特征,采样率为 16kHz:
- 窗长: 400 samples (25ms)
- 帧移: 160 samples (10ms)
- FFT 点数: 512
- Mel 滤波器组: 40 个
输出格式
模型输出为 [batch, time_frames, 1024] 的上下文语音表征,供下游 ASR 解码器(如 CTC)使用。
注意事项
- 本模型输出的是中间表征(encoder output),不包含 CTC 解码头
- 完整的 ASR 流水线需要额外的解码器(如 WeNet 的 CTC/Attention 解码器)
- 模型权重格式为 32-bit float,与 NPU 原生支持一致
- 当前未使用 torch_npu 融合算子优化,可根据需要进一步调优
生成工具: Model Agent (Claude Code)
适配日期: 2026-05-18
CANN 版本: 8.5.1