m
mxy-yy/mms-300m-1130-forced-aligner-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MMS-300M Forced Aligner Ascend NPU 部署指南

项目简介

MMS-300M Forced Aligner 是基于 Wav2Vec2 架构的语音强制对齐模型,用于将文本与音频进行时间对齐。本项目提供其在华为 Ascend NPU 环境下的部署方案。

特性

  • 支持 Ascend NPU 推理加速
  • Wav2Vec2 CTC 强制对齐
  • 423 个权重全部正确加载
  • CPU vs NPU 精度对比测试

环境要求

  • 硬件: 华为 Ascend 910 系列 NPU
  • CANN: 8.0.RC1 或更高版本
  • PyTorch: 2.8.0+ with torch_npu

目录结构

mms-300m-1130-forced-aligner-ascend/
├── inference.py          # NPU推理测试脚本
├── test.log              # 测试日志
├── README.md             # 本文档

模型结构

MMS-300M Wav2Vec2ForCTC 模型包含以下组件:

组件说明参数数量
FeatureEncoder7层CNN特征提取器~1.2M
FeatureProjectionLayerNorm + Linear~0.5M
PosConvEmbed位置卷积嵌入~0.1M
Wav2Vec2Encoder24层Transformer~445M
lm_headCTC输出层~31K

总参数量: 449,687,199

部署步骤

1. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

2. 执行推理测试

cd mms-300m-1130-forced-aligner-ascend/
python3 inference.py

3. 执行精度测试

cd mms-300m-1130-forced-aligner-ascend/
python3 inference.py --precision_test

测试验证

NPU 推理测试结果

指标结果
输入形状torch.Size([1, 48000])
输出形状torch.Size([1, 149, 31])
推理设备npu:0
推理耗时~4.6s

精度测试结果

指标实测值阈值状态
Max Error (sum)1.22e-04< 1e-3PASS
Max Error (mean)5.96e-08< 1e-5PASS
Max Error (std)2.98e-08< 1e-5PASS

性能数据

操作耗时
模型加载~6s
CPU 参考计算 (20 tensors)0.02s
NPU 推理 (20 tensors)0.24s
端到端推理 (3秒音频)~4.6s

测试日志

2026-05-19 12:17:06,322 - INFO - MMS-300M Forced Aligner Ascend NPU Inference
2026-05-19 12:17:06,322 - INFO - Loading MMS-300M model from /opt/atomgit/mxy/mms-300m-1130-forced-aligner
2026-05-19 12:17:12,564 - INFO - Model loaded! Params: 449687199
2026-05-19 12:17:12,679 - INFO - Input waveform: torch.Size([1, 48000])
2026-05-19 12:17:16,966 - INFO - Logits: torch.Size([1, 149, 31]), Time: 4281.25ms, Device: npu:0

技术说明

模型架构适配

  1. 自定义 Wav2Vec2 实现: 由于原始模型使用 HuggingFace transformers 库,适配为纯 PyTorch 实现以支持 NPU
  2. 权重映射: 完整的 state_dict key 到 model path 映射
  3. Feature Projection: LayerNorm(512) → Linear(512→1024) 的正确顺序
  4. PosConvEmbed: 处理 Conv1d 输出长度不匹配问题

常见问题

Q: 推理报错 "Dimension out of range"?

A: 确保 FeatureEncoder 的 forward 方法正确添加了 channel 维度 unsqueeze(1)

Q: 模型加载报错 "no attribute xxx"?

A: 检查 key_to_model_path 映射是否完整覆盖了所有权重 key

参考资料

  • Wav2Vec2 论文: https://arxiv.org/abs/2006.11477