luckymitty/hubert-base-960h-itw-deepfake-ascend-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

hubert-base-960h-itw-deepfake(昇腾NPU适配版)

本仓库包含hubert-base-960h-itw-deepfake的昇腾NPU适配版本,这是一个用于音频深度伪造检测的微调HuBERT模型。

模型说明

  • 架构:HubertForSequenceClassification
  • 基础模型:facebook/hubert-base-ls960
  • 任务:音频深度伪造/欺骗检测(二分类)
  • 标签:bona-fide(0)、spoof(1)
  • 输入:原始音频波形(16 kHz)
  • 输出:2个类别的对数概率

原始指标

  • 损失:0.0756
  • 准确率:0.9873
  • 误识率(FAR):0.0083
  • 拒识率(FRR):0.0203
  • 等错误率(EER):0.0143

昇腾NPU适配

环境要求

组件版本
Python>= 3.9
PyTorch>= 2.0.0
torch-npu>= 2.9.0
transformers>= 4.38.0
昇腾驱动25.5.2或兼容版本

硬件:昇腾910 NPU(已在Atlas 800 A2上测试)

NPU适配的主要变更

  1. 设备映射

    • 将torch.device("cuda")更改为torch.device("npu")以适配昇腾硬件。
    • 增加自动降级机制:NPU -> CUDA -> CPU。
  2. 模型加载

    • 使用transformers.AutoConfig和HubertForSequenceClassification进行标准加载。
    • 未检测到自定义CUDA内核或Triton算子;所有算子均为原生PyTorch算子,且完全受torch_npu支持。
  3. 无架构变更

    • 该模型采用标准transformers架构;无需进行权重重映射或算子替换。

适配步骤

# 1. Clone this repository
git clone <repo-url>
cd hubert-npu-adapted

# 2. Install dependencies
pip install -r requirements.txt

# 3. Run inference on NPU
python inference_npu.py --model_path ./hubert-base-960h-itw-deepfake

# 4. Run accuracy verification (CPU vs NPU)
python verify_accuracy.py

精度验证

我们使用随机初始化的权重(结构验证)和多个随机种子,对比了模型在CPU和Ascend NPU上的输出结果。

对比指标

指标数值
最大绝对误差2.42e-04
平均绝对误差1.79e-04
最大相对误差2.81e-03
平均相对误差2.03e-03
余弦相似度0.999997

多种子稳定性

种子最大绝对误差余弦相似度
422.72e-040.99999832
1232.62e-040.99999812
4562.33e-040.99999839
7892.82e-040.99999817
20242.13e-040.99999869

结论:CPU和NPU的输出在数值上保持一致。绝对误差在预期的浮点精度容差范围内(< 1e-3)。该模型已通过Ascend NPU部署验证。

使用方法

Ascend NPU快速上手

import torch
import torch_npu
import numpy as np
from transformers import AutoConfig, Wav2Vec2FeatureExtractor, HubertForSequenceClassification

# Use NPU
device = torch.device("npu" if torch.npu.is_available() else "cpu")

model_path = "./hubert-base-960h-itw-deepfake"
config = AutoConfig.from_pretrained(model_path)
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_path)
model = HubertForSequenceClassification.from_pretrained(model_path, config=config).to(device)
model.eval()

# Dummy audio (replace with real waveform)
audio = np.random.randn(16000).astype(np.float32) * 0.1
inputs = feature_extractor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
input_values = inputs.input_values.to(device)

with torch.no_grad():
    logits = model(input_values).logits
    probs = torch.softmax(logits, dim=-1)

print(probs)  # [[bona-fide_prob, spoof_prob]]

批量推理

audio_batch = [np.random.randn(16000).astype(np.float32) for _ in range(4)]
inputs = feature_extractor(audio_batch, sampling_rate=16000, return_tensors="pt", padding=True)
input_values = inputs.input_values.to(device)
with torch.no_grad():
    logits = model(input_values).logits
    probs = torch.softmax(logits, dim=-1)

文件

文件描述
inference_npu.py具备自动设备选择功能的NPU推理脚本
verify_accuracy.pyCPU与NPU精度对比脚本
accuracy_report.json详细的精度指标JSON文件
requirements.txtPython依赖项

许可证

Apache-2.0

致谢

  • 原始模型由abhishtagatya提供
  • 基础模型:facebook/hubert-base-ls960
  • Ascend NPU适配由Ascend-SACT完成