m0_74196153/wav2vec2-indonesian-javanese-sundanese
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

wav2vec2-indonesian-javanese-sundanese on Ascend NPU

1. 简介

本文档记录 indonesian-nlp/wav2vec2-indonesian-javanese-sundanese 在昇腾 Ascend 910B4 NPU 上的适配与验证结果。

该模型基于 facebook/wav2vec2-large-xlsr-53 微调,支持印尼语 (Indonesian)、爪哇语 (Javanese)、巽他语 (Sundanese) 三语种语音识别。模型架构为 Wav2Vec2ForCTC,包含 7层CNN特征提取 + 24层Transformer编码器 + CTC分类头,搭配4gram语言模型进行Beam Search解码。

适配方案:使用 torch_npu + transformers 直接推理,无需任何算子替换——所有算子 (Conv1d, Linear, LayerNorm, MultiheadAttention, GELU) 均被 torch_npu 原生支持。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/indonesian-nlp/wav2vec2-indonesian-javanese-sundanese
  • 权重下载地址(hf-mirror镜像):https://hf-mirror.com/indonesian-nlp/wav2vec2-indonesian-javanese-sundanese
  • Ascend CANN Toolkit:https://www.hiascend.com/software/aiengine

参考文档:

  • https://huggingface.co/indonesian-nlp/wav2vec2-indonesian-javanese-sundanese
  • https://huggingface.co/docs/transformers/model_doc/wav2vec2

2. 验证环境

组件版本
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
transformers4.57.6
pyctcdecode0.2.0
kenlm0.2.0
CANN8.5.1
SOC_VERSIONascend910b1
  • NPU:1 逻辑卡 (Ascend 910B4)
  • 模型路径:wav2vec2-indonesian-javanese-sundanese/
  • 模型大小:~1.2GB (pytorch_model.bin) + ~2.2GB (4gram.bin LM)

3. 模型下载

由于HuggingFace直连可能受限,推荐使用镜像站下载:

# 方法1:使用hf-mirror镜像
export HF_ENDPOINT=https://hf-mirror.com
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download(
    'indonesian-nlp/wav2vec2-indonesian-javanese-sundanese',
    local_dir='./wav2vec2-indonesian-javanese-sundanese'
)
"

# 方法2:直接使用 transformers(需要设置 HF_ENDPOINT)
export HF_ENDPOINT=https://hf-mirror.com
python3 -c "
from transformers import Wav2Vec2ForCTC, Wav2Vec2ProcessorWithLM
model = Wav2Vec2ForCTC.from_pretrained('indonesian-nlp/wav2vec2-indonesian-javanese-sundanese')
processor = Wav2Vec2ProcessorWithLM.from_pretrained('indonesian-nlp/wav2vec2-indonesian-javanese-sundanese')
"

4. 推理使用

4.1 安装依赖

# 基础依赖
pip install torch_npu transformers soundfile librosa

# kenlm 需从源码安装 (用于4gram语言模型解码)
pip install https://github.com/kpu/kenlm/archive/master.zip

4.2 启动推理

# 单文件推理 (NPU后端)
python3 inference.py --audio audio.wav --backend npu

# CPU后端 (精度对比)
python3 inference.py --audio audio.wav --backend cpu

# 长音频分块推理
python3 inference.py --audio long_audio.wav --chunk-length-s 10.0

# 详细模式
python3 inference.py --audio audio.wav --verbose

4.3 核心代码示例

import torch
import torch_npu
import numpy as np
import soundfile as sf
from transformers import Wav2Vec2ForCTC, Wav2Vec2ProcessorWithLM

MODEL_PATH = "./wav2vec2-indonesian-javanese-sundanese"

# 加载模型
processor = Wav2Vec2ProcessorWithLM.from_pretrained(MODEL_PATH)
model = Wav2Vec2ForCTC.from_pretrained(MODEL_PATH).npu().eval()

# 加载音频
audio, sr = sf.read("audio.wav")
if len(audio.shape) > 1:
    audio = audio.mean(axis=1)
if sr != 16000:
    import librosa
    audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)

# NPU推理
inputs = processor(audio.astype(np.float32), sampling_rate=16000, return_tensors="pt", padding=True)
with torch.no_grad():
    logits = model(inputs.input_values.npu()).logits.cpu().numpy()

# CTC解码 (含4gram语言模型)
text = processor.decode(logits[0]).text
print(f"识别结果: {text}")

5. Smoke 验证

基础检查:

# 验证NPU可用
python3 -c "import torch_npu; print(torch.npu.is_available(), torch.npu.get_device_name(0))"

# 模型加载测试
python3 -c "
from transformers import Wav2Vec2ForCTC
model = Wav2Vec2ForCTC.from_pretrained('./wav2vec2-indonesian-javanese-sundanese')
print(f'Params: {sum(p.numel() for p in model.parameters()):,}')
"

# 运行完整评测
cd eval && python3 benchmark.py

验证结果:

  • torch.npu.is_available() → True
  • 模型加载成功,参数量 315,469,470
  • 评测脚本全部 PASS

6. 精度评测

使用合成音频信号(多频率正弦 + 噪声)进行 CPU vs NPU 精度对比,度量 cosine similarity 和绝对/相对误差。

音频时长CPU耗时NPU耗时加速比Cosine Similarity结论
1.0s2,581 ms29.1 ms88.7x0.99999509PASS
3.0s6,426 ms31.0 ms207.5x0.99999791PASS
5.0s10,448 ms31.7 ms329.7x0.99999896PASS
10.0s21,944 ms33.2 ms660.6x0.99999870PASS

CPU vs NPU 完整对比:

指标数值
CPU 总耗时10,553 ms
NPU 总耗时35.8 ms
NPU 加速比294.9x
Cosine 相似度0.99999860
CPU 解码文本'eeee'
NPU 解码文本'eeee'
解码文本一致性True

精度结论:NPU推理与CPU输出完全一致(余弦相似度 > 0.99999),误差 < 0.0003%,满足 < 1% 的精度要求。

7. 性能参考

测试条件:5.0s 合成音频 / 20 iterations / batch_size=1,取 warmup 后均值。

音频时长均值延迟P95延迟P99延迟RTF
1.0s39.1 ms40.6 ms43.3 ms0.0391
5.0s40.0 ms42.0 ms49.1 ms0.0080
10.0s40.5 ms41.5 ms42.2 ms0.0041
30.0s60.8 ms62.9 ms123.9 ms0.0020

批处理性能:

Batch Size均值延迟单样本延迟
138.6 ms38.6 ms
237.7 ms18.8 ms
440.0 ms10.0 ms
845.8 ms5.7 ms

压测时建议使用 batch_size=4~8 以获得最佳吞吐。

8. 注意事项

  1. kenlm 安装:4gram语言模型解码依赖 kenlm,需从源码安装:pip install https://github.com/kpu/kenlm/archive/master.zip
  2. 采样率要求:模型要求 16kHz 单声道输入,其他采样率需先用 librosa.resample 转换
  3. 模型权重格式:该模型使用 pytorch_model.bin,加载时默认 map_location='cpu' 避免内存问题
  4. NPU内存:模型加载后占NPU HBM约1.2GB (不含LM)。Ascend 910B4提供32GB HBM,批处理余量充裕
  5. 语言模型解码:4gram LM解码在CPU端执行,单次耗时约 200-300ms,不影响NPU推理管线
  6. HuggingFace 访问:内网环境建议设置 export HF_ENDPOINT=https://hf-mirror.com 使用镜像站
  7. NPU环境变量:建议设置 export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True 优化内存分配
  8. 精度:模型使用 float32 推理,核间精度误差 < 0.0003%,可视为零误差

9. 交付件清单

文件说明
inference.pyNPU 推理脚本,支持 NPU/CPU/CUDA 后端
eval/benchmark.py精度 + 性能评测脚本
eval/benchmark.log评测运行日志
eval/results.json评测结果 JSON

适配日期: 2026-05-09 适配工具: torch_npu + transformers NPU设备: Ascend 910B4