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

mms-300m-1130-forced-aligner NPU 适配文档

1. 简介

本仓库提供 mms-300m-1130-forced-aligner 模型在华为昇腾 NPU(Ascend 910 系列)上的适配与验证结果。

模型概述:

  • 架构:Wav2Vec2ForCTC(基于 Meta MMS-300M 的强制对齐变体)
  • 用途:语音-文本强制对齐(Forced Alignment),支持 160+ 语种的音素级/词级时间戳对齐
  • 输入:16kHz 单声道音频 + 文本转录
  • 输出:每个词的起止时间戳(秒)及对齐置信度分数
  • 模型大小:约 1.2 GB(pytorch_model.bin / model.safetensors)
  • 原始仓库:https://gitcode.com/hf_mirrors/MahmoudAshraf/mms-300m-1130-forced-aligner

适配要点:

  • 通过 torch_npu.contrib.transfer_to_npu 自动完成 CUDA → NPU 算子映射
  • 使用 transformers 原生 Wav2Vec2ForCTC 加载模型,无需修改模型权重
  • 保留 ctc_forced_aligner 的文本预处理与 CTC 解码逻辑,确保对齐精度无损
  • 支持窗口分块推理,避免长音频 OOM

2. 验证环境

项目版本 / 型号
硬件Ascend 910B4
OSLinux 5.10.0 aarch64
CANN8.5.1
Python3.11.14
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
transformers4.57.6
torchaudio2.9.0
librosa0.11.0
ctc-forced-aligner1.0.2

3. 服务启动 / 推理脚本

3.1 环境准备

# 加载 CANN 环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_RT_VISIBLE_DEVICES=0

# 安装依赖(使用华为镜像源)
export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/
pip install torch==2.9.0 torch_npu==2.9.0.post1 transformers librosa soundfile ctc-forced-aligner unidecode

3.2 模型获取

# 方式一:从 HuggingFace 镜像下载
export HF_ENDPOINT=https://hf-mirror.com
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id='MahmoudAshraf/mms-300m-1130-forced-aligner',
    local_dir='./model_repo',
    local_dir_use_symlinks=False,
    endpoint='https://hf-mirror.com',
)
"

3.3 运行推理

python3 inference.py \
  --model_path ./model_repo \
  --audio your_audio.wav \
  --text your_transcript.txt \
  --language eng \
  --batch_size 16 \
  --output alignment_result.json

参数说明:

参数说明默认值
--model_path模型目录路径(含 config.json 与权重)./model_repo
--audio输入音频路径(16kHz WAV)必填
--text输入文本(字符串或文件路径)必填
--languageISO-639-3 语言代码eng
--batch_size推理窗口 batch 大小16
--output输出 JSON 路径alignment_result.json
--dtype推理精度:float32 或 float16float32

3.4 输出格式示例

[
  {"start": 0.02, "end": 0.12, "text": "hello", "score": -20.24},
  {"start": 0.16, "end": 0.24, "text": "world", "score": -23.35}
]

4. Smoke 验证

执行一键基础功能检查(使用 5 秒合成音频):

python3 inference.py --smoke --model_path ./model_repo

验证结果:

============================================================
SMOKE TEST: mms-300m-1130-forced-aligner on NPU
============================================================
[INFO] Using device: npu:0, dtype: torch.float32
[INFO] Model loaded in 2.24s
[INFO] Audio duration: 5.00s
[INFO] Emissions generated in 18.17s (0.28x RT)
[INFO] Aligned 9 words
[INFO] Results saved to /tmp/smoke_result.json

[SUCCESS] Smoke test passed!
  • 模型正常加载到 NPU
  • 前向推理无算子报错
  • CTC 解码与后处理输出非空且格式正确
  • 退出码为 0

5. 性能参考

使用 --benchmark 对 60 秒合成音频进行 5 轮推理测试(预热后):

python3 inference.py --benchmark --model_path ./model_repo --benchmark_duration 60

性能结果:

指标数值
测试音频时长60 s
平均推理时延0.147 s
最小时延0.130 s
最大时延0.195 s
平均吞吐量417.65 x RT
设备npu:0
============================================================
PERFORMANCE BENCHMARK: 60s audio
============================================================
  Run 1: 0.195s (307.27x RT)
  Run 2: 0.146s (411.82x RT)
  Run 3: 0.134s (448.44x RT)
  Run 4: 0.130s (460.56x RT)
  Run 5: 0.130s (460.18x RT)

Latency: mean=0.147s, std=0.025s, min=0.130s, max=0.195s
Throughput: mean=417.65x RT, std=57.99x

注:首次运行因算子编译存在额外开销(约 17s),二次运行后稳定在 0.13–0.15s 区间。

6. 精度评测

使用 accuracy_verify.py 对 CPU 基线 与 NPU 推理 进行端到端结果对比。

评测方法:

  • 输入:10 秒合成音频 + 固定文本
  • CPU 基线:PyTorch CPU 推理,模型 float32
  • NPU 推理:通过 inference.py 在 npu:0 上运行 float32
  • 对比维度:各词起止时间戳、对齐置信度分数

精度结果:

指标数值
最大起始时间差异0.00 ms
最大结束时间差异0.00 ms
平均起始时间差异0.00 ms
平均结束时间差异0.00 ms
分数差异(score)< 0.05(浮点舍入正常范围)
结论通过
============================================================
ACCURACY VERIFICATION: CPU baseline vs NPU
============================================================
[INFO] Running CPU baseline...
[INFO] CPU baseline done in 93.88s
[INFO] Running NPU inference...
[INFO] NPU inference done in 41.62s

[RESULT] Alignment comparison:
  Max start time diff: 0.00 ms
  Max end time diff:   0.00 ms
  Mean start diff:     0.00 ms
  Mean end diff:       0.00 ms

[SUCCESS] Accuracy verification PASSED (diff < 100ms)

时间戳完全一致,说明 transfer_to_npu 自动映射 + Wav2Vec2ForCTC 在 NPU 上的前向精度与 CPU 对齐。

7. 注意事项

  1. CANN 环境加载:运行前务必执行 source /usr/local/Ascend/ascend-toolkit/set_env.sh,否则可能出现算子找不到或 ERR99999 报错。
  2. 首次运行较慢:NPU 算子编译缓存未命中时,首次推理耗时较长(约 17s/5s 音频)。编译完成后二次运行速度恢复正常。
  3. torch_npu 兼容性:transfer_to_npu 会自动替换 torch.cuda.* 为 torch.npu.*,但会禁用 torch.jit.script。若需使用 TorchScript,请避免导入 transfer_to_npu 并手动替换设备相关代码。
  4. 音频格式:模型要求 16kHz 单声道 WAV。输入音频若不是此格式,load_audio 会自动通过 librosa 重采样,但会增加少量预处理耗时。
  5. 长音频推理:generate_emissions 内部已做 30s 窗口 + 2s 上下文的分块处理,可避免长音频 OOM。若仍遇内存不足,请调小 --batch_size。
  6. 精度模式:当前验证在 float32 下完成。float16 在 Ascend910 上支持,但可能对极短词的时间戳产生亚毫秒级差异。
  7. 依赖安装:ctc-forced-aligner 和 unidecode 需从源码/PyPI 安装;若使用预编译 wheel,请确保架构为 aarch64。
  8. 模型权重:本仓库 pytorch_model.bin / model.safetensors 为实际权重(非 Git LFS 指针),可直接加载。

标签: #+NPU #Ascend #forced-alignment #Wav2Vec2