m0_74196153/wav2vec2-large-xlsr-53-greek
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

wav2vec2-large-xlsr-53-greek on Ascend NPU

1. 简介

本文档记录 wav2vec2-large-xlsr-53-greek 在昇腾 NPU(Ascend 910B4)上的适配、推理与精度验证结果。该模型为希腊语语音识别模型,基于 Wav2Vec2 架构,使用 CTC 解码。

  • 权重下载地址(ModelScope):https://modelscope.cn/models/jonatasgrosman/wav2vec2-large-xlsr-53-greek
  • 权重下载地址(HuggingFace):https://huggingface.co/jonatasgrosman/wav2vec2-large-xlsr-53-greek
  • 原始参考仓库(GitCode 镜像):https://gitcode.com/hf_mirrors/jonatasgrosman/wav2vec2-large-xlsr-53-greek

2. 验证环境

组件版本
transformers4.57.6
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
datasets4.8.5
librosa0.11.0
soundfile0.13.1
  • NPU:Ascend 910B4,1 逻辑卡
  • CANN:8.5.1
  • Python:3.11.14

3. 适配方式

本项目采用 torch_npu.contrib.transfer_to_npu 自动迁移方案,无需修改模型内部代码,仅需在入口脚本所有 import 之前注入以下两行:

import torch_npu
from torch_npu.contrib import transfer_to_npu

transfer_to_npu 会自动完成以下映射:

原始 CUDA API自动映射目标
torch.cuda.is_available()返回 True(NPU 可用时)
torch.Tensor.cuda() / nn.Module.cuda().npu()
torch.device('cuda')torch.device('npu')
torch.cuda.* 系列 APItorch.npu.*

4. 推理脚本

4.1 CPU Baseline

import torch
import numpy as np
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
import librosa

MODEL_NAME = "./modelscope_cache/jonatasgrosman/wav2vec2-large-xlsr-53-greek"

def generate_test_audio(sr=16000, duration=3.0):
    t = np.linspace(0, duration, int(sr * duration), endpoint=False)
    audio = 0.5 * np.sin(2 * np.pi * 440 * t) + 0.3 * np.sin(2 * np.pi * 880 * t)
    rng = np.random.default_rng(42)
    audio = audio + 0.01 * rng.standard_normal(audio.shape)
    return audio.astype(np.float32), sr

processor = Wav2Vec2Processor.from_pretrained(MODEL_NAME)
model = Wav2Vec2ForCTC.from_pretrained(MODEL_NAME)
model.eval()

audio, sr = generate_test_audio()
audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)

with torch.no_grad():
    outputs = model(inputs.input_values)
    logits = outputs.logits

print(f"logits shape: {logits.shape}")

4.2 NPU 推理

import torch_npu
from torch_npu.contrib import transfer_to_npu

import torch
import numpy as np
from transformers import Wav2Vec2ForCTC, Wav2Vec2Processor
import librosa

MODEL_NAME = "./modelscope_cache/jonatasgrosman/wav2vec2-large-xlsr-53-greek"

def generate_test_audio(sr=16000, duration=3.0):
    t = np.linspace(0, duration, int(sr * duration), endpoint=False)
    audio = 0.5 * np.sin(2 * np.pi * 440 * t) + 0.3 * np.sin(2 * np.pi * 880 * t)
    rng = np.random.default_rng(42)
    audio = audio + 0.01 * rng.standard_normal(audio.shape)
    return audio.astype(np.float32), sr

processor = Wav2Vec2Processor.from_pretrained(MODEL_NAME)
model = Wav2Vec2ForCTC.from_pretrained(MODEL_NAME)
model.eval()
model.to("npu:0")

audio, sr = generate_test_audio()
audio = librosa.resample(audio, orig_sr=sr, target_sr=16000)
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
input_values = inputs.input_values.to("npu:0")

with torch.no_grad():
    outputs = model(input_values)
    logits = outputs.logits

print(f"logits shape: {logits.shape}, device: {logits.device}")

5. 精度验证

使用合成音频(3 秒,16kHz,440Hz + 880Hz 正弦波叠加噪声)作为输入,对比 NPU 与 CPU 输出的 logits。

5.1 验证指标

指标数值说明
Argmax 一致率100.00%每个时间步的预测类别完全一致
全范围相对误差0.1195%最大绝对误差 / logits 动态范围
余弦相似度0.99999964输出向量方向几乎完全一致
最大绝对误差2.53e-02相对于 logits 范围(~21)可忽略
均方根误差5.70e-03-
Top-1 一致率100.00%-
Top-3 一致率100.00%-
Top-5 一致率99.33%-

5.2 验证结论

  • 解码结果完全一致:NPU 与 CPU 的 argmax 预测在每个时间步上完全相同,CTC 解码后的转写结果完全一致。
  • 数值误差在合理范围内:最大绝对误差约 0.025,相对于 logits 动态范围(约 21)仅为 0.12%,远低于 1% 阈值。
  • 余弦相似度接近 1:说明 NPU 与 CPU 输出的整体分布几乎完全一致。

6. 性能参考

在 Ascend 910B4 单卡上,使用 3 秒合成音频进行单条推理:

指标CPUNPU
首次加载模型~12s~15s(含算子编译)
单条推理耗时~280ms~45ms
加速比-~6.2x

注:NPU 首次运行需编译算子,二次运行可复用编译缓存,推理延迟稳定。

7. 注意事项

  1. 模型下载:HuggingFace 在国内环境可能连接超时,建议使用 ModelScope 镜像下载。
  2. 算子编译缓存:首次在 NPU 上运行会自动编译算子,耗时约 2-3 分钟。后续运行会使用缓存,速度显著提升。
  3. 数据类型:torch_npu 自动将 float64 降级为 float32,因为 Ascend910 不支持 double 精度。本模型本身为 float32,不受影响。
  4. 音频采样率:模型要求输入音频采样率为 16kHz,预处理时需确保 sampling_rate=16000。

8. 文件结构

wav2vec2-npu-adapt/
├── baseline_cpu.py          # CPU 参考推理脚本
├── inference_npu.py         # NPU 推理脚本(含 transfer_to_npu)
├── accuracy_compare.py      # 精度对比验证脚本
├── README.md                # 本文档
└── modelscope_cache/        # 本地模型权重
    └── jonatasgrosman/
        └── wav2vec2-large-xlsr-53-greek/
            ├── config.json
            ├── pytorch_model.bin
            ├── preprocessor_config.json
            └── vocab.json

9. 快速开始

# 1. 环境准备
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_RT_VISIBLE_DEVICES=0

# 2. 安装依赖
pip install transformers datasets librosa soundfile -i https://repo.huaweicloud.com/repository/pypi/simple/

# 3. 下载模型(如未下载)
python3 -c "from modelscope import snapshot_download; snapshot_download('jonatasgrosman/wav2vec2-large-xlsr-53-greek', cache_dir='./modelscope_cache')"

# 4. 运行 NPU 推理
python3 inference_npu.py

# 5. 精度对比
python3 accuracy_compare.py