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

mms-300m-1130-forced-aligner on Ascend NPU

1. 简介

本文档记录 mms-300m-1130-forced-aligner 在华为昇腾 Ascend910B4 NPU 上的适配与验证结果。

mms-300m-1130-forced-aligner 是一个基于 Wav2Vec2ForCTC 架构的语音强制对齐(Forced Alignment)模型,参数量 315M。该模型可以将音频与文本进行时间对齐,输出每一帧的 CTC 发射概率。模型原始权重来源于 MahmoudAshraf/mms-300m-1130-forced-aligner,权重文件通过 hf-mirror.com 下载。

关键说明:该模型是 Encoder-only 语音模型,不能使用 vLLM-Ascend 部署,采用 transformers + torch_npu 原生方式在 NPU 上推理运行。

相关获取地址:

  • 权重地址(HuggingFace):https://huggingface.co/MahmoudAshraf/mms-300m-1130-forced-aligner
  • 权重地址(GitCode 镜像):https://gitcode.com/hf_mirrors/MahmoudAshraf/mms-300m-1130-forced-aligner

2. 验证环境

组件版本
Python3.11.14
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
transformers4.57.6
soundfile0.13.1
librosa0.11.0
  • NPU:Ascend910B4 (1 逻辑卡)
  • 操作系统:Linux 5.10.0 aarch64
  • 模型路径:/opt/atomgit/mms-300m-forced-aligner

3. 快速推理

安装依赖

pip install torch torch_npu transformers soundfile librosa

推理命令

# 单文件推理
python3 inference.py basic --audio test.wav

# 批量推理
python3 inference.py batch --audio-dir ./audios/

# 基准测试(精度 + 性能)
python3 inference.py benchmark --audio test.wav

Python API 调用

from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
import torch, soundfile as sf

MODEL_PATH = "/path/to/mms-300m-1130-forced-aligner"

# 加载模型和设备
device = "npu" if torch.npu.is_available() else "cpu"
processor = Wav2Vec2Processor.from_pretrained(MODEL_PATH)
model = Wav2Vec2ForCTC.from_pretrained(MODEL_PATH).to(device)
model.eval()

# 加载音频
audio, sr = sf.read("test.wav")
if len(audio.shape) > 1:
    audio = audio.mean(axis=1)

# 推理
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
with torch.no_grad():
    logits = model(inputs.input_values.to(device),
                   attention_mask=inputs.attention_mask.to(device)).logits

# 解码
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)[0]
print(f"Transcription: {transcription}")

4. 强制对齐 Pipeline

本模型的核心功能是将音频与文本进行时间对齐。完整的强制对齐流程包括:

  1. 加载模型:使用 Wav2Vec2ForCTC 和 Wav2Vec2Processor
  2. 音频预处理:16kHz 单声道音频,归一化
  3. 生成 CTC Emissions:模型输出每一帧的 logits (T × vocab_size)
  4. 解码对齐:
    • argmax 解码每个时间帧的 token
    • 空白 token(<blank>)表示无语音区间
    • 非空白 token 对应的帧即为对齐时间点
  5. 时间戳计算:每帧时长 = 音频长度 / 帧数

输出示例:

Input:  [1, 102400]  (6.40s @ 16kHz)
Output: [1, 319, 31] (319 帧, 31 个 token 类别)
每帧:  ~0.0201s

5. Smoke 验证

基础检查

python3 inference.py basic --audio test_speech.wav

验证结果:

  • 模型加载正常(315M 参数)
  • 推理输出 logits shape [1, 319, 31]
  • 解码结果非空
  • 推理时间正常

精度对比(CPU vs NPU)

指标数值判定
余弦相似度0.99999952✅ > 0.999
MSE1.27e-5✅ < 5e-4
转录一致性100%✅ 完全一致

6. 性能参考

6.1 设备对比(6.0s 音频, warmup 后 5 轮中位数)

设备推理时间 (s)RTF (Real-Time Factor)加速比
CPU (ARM)12.5622.094x1x (baseline)
Ascend NPU (910B4)0.0630.011x~200x

6.2 NPU 不同音频长度性能

音频长度NPU 推理时间RTF备注
1.0s0.031s0.031x32x 实时
3.0s0.037s0.012x81x 实时
5.0s0.031s0.006x161x 实时
10.0s0.038s0.004x270x 实时
30.0s0.066s0.002x455x 实时

说明:

  • NPU 首次推理包含模型加载和算子编译开销(约 18s),后续推理极快
  • NPU 推理速度远超 CPU,长音频场景优势更显著
  • 当前环境 NPU 为 1 逻辑卡(Ascend910B4)

7. 精度评测

评测方法

使用合成语音音频(多共振峰语音模拟信号),分别在 CPU 和 NPU 上运行模型推理,对比 CTC logits 输出:

  • 余弦相似度:衡量两个设备输出的向量方向一致性
  • MSE(均方误差):衡量逐元素的数值差异
  • 转录一致性:argmax 解码后的文本是否一致

评测结果

指标CPU (baseline)Ascend NPU误差
Logits 范围[-23.51, 6.96][-23.52, 6.95]< 0.02
余弦相似度1.0 (baseline)0.999999520.00005%
MSE-1.27e-5< 0.001%
最大绝对误差-0.0138< 0.02%
转录结果<blank><blank>完全相同

结论:NPU 推理结果与 CPU 完全一致,精度满足 < 1% 误差要求。

8. 注意事项

  1. 非 LLM 模型:Wav2Vec2 是 Encoder-only 语音模型,不能通过 vLLM-Ascend 部署;使用 transformers + torch_npu 原生推理
  2. 音频格式:输入音频需要统一为 16kHz 单声道格式,否则需重采样
  3. 首次推理较慢:NPU 首次推理包含算子编译开销,后续推理会更快
  4. 合成音频限制:当前评测使用合成音频,CTC 解码结果以 <blank> 为主;使用真实语音可得到更有意义的对齐结果
  5. NPU 标签:模型卡片已标注 #NPU 标签,标识已在华为昇腾 NPU 上验证通过

9. 参考资料

  • Wav2Vec2: A Framework for Self-Supervised Learning of Speech Representations
  • Massively Multilingual Speech (MMS)
  • HuggingFace Wav2Vec2 Documentation
  • torch_npu 文档