本文档记录 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 上推理运行。
相关获取地址:
| 组件 | 版本 |
|---|---|
Python | 3.11.14 |
torch | 2.9.0+cpu |
torch_npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
soundfile | 0.13.1 |
librosa | 0.11.0 |
Ascend910B4 (1 逻辑卡)Linux 5.10.0 aarch64/opt/atomgit/mms-300m-forced-alignerpip 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.wavfrom 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}")本模型的核心功能是将音频与文本进行时间对齐。完整的强制对齐流程包括:
Wav2Vec2ForCTC 和 Wav2Vec2Processorargmax 解码每个时间帧的 token<blank>)表示无语音区间输出示例:
Input: [1, 102400] (6.40s @ 16kHz)
Output: [1, 319, 31] (319 帧, 31 个 token 类别)
每帧: ~0.0201spython3 inference.py basic --audio test_speech.wav验证结果:
[1, 319, 31]| 指标 | 数值 | 判定 |
|---|---|---|
| 余弦相似度 | 0.99999952 | ✅ > 0.999 |
| MSE | 1.27e-5 | ✅ < 5e-4 |
| 转录一致性 | 100% | ✅ 完全一致 |
| 设备 | 推理时间 (s) | RTF (Real-Time Factor) | 加速比 |
|---|---|---|---|
| CPU (ARM) | 12.562 | 2.094x | 1x (baseline) |
| Ascend NPU (910B4) | 0.063 | 0.011x | ~200x |
| 音频长度 | NPU 推理时间 | RTF | 备注 |
|---|---|---|---|
| 1.0s | 0.031s | 0.031x | 32x 实时 |
| 3.0s | 0.037s | 0.012x | 81x 实时 |
| 5.0s | 0.031s | 0.006x | 161x 实时 |
| 10.0s | 0.038s | 0.004x | 270x 实时 |
| 30.0s | 0.066s | 0.002x | 455x 实时 |
说明:
使用合成语音音频(多共振峰语音模拟信号),分别在 CPU 和 NPU 上运行模型推理,对比 CTC logits 输出:
| 指标 | CPU (baseline) | Ascend NPU | 误差 |
|---|---|---|---|
| Logits 范围 | [-23.51, 6.96] | [-23.52, 6.95] | < 0.02 |
| 余弦相似度 | 1.0 (baseline) | 0.99999952 | 0.00005% |
| MSE | - | 1.27e-5 | < 0.001% |
| 最大绝对误差 | - | 0.0138 | < 0.02% |
| 转录结果 | <blank> | <blank> | 完全相同 |
结论:NPU 推理结果与 CPU 完全一致,精度满足 < 1% 误差要求。
transformers + torch_npu 原生推理<blank> 为主;使用真实语音可得到更有意义的对齐结果#NPU 标签,标识已在华为昇腾 NPU 上验证通过