冬
gcw_IDzXRVNw/smart-turn-v2-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

smart-turn-v2 Ascend NPU 部署指南

项目简介

smart-turn-v2 是基于 Wav2Vec2 的语音端点检测模型,专为语音处理任务优化。该模型能够对音频信号进行特征提取和处理,适用于语音识别、说话人识别等任务的前端处理。

特性

  • 支持 Ascend NPU 推理加速
  • CPU 与 NPU 精度对比测试(误差 < 1%)
  • 音频特征提取
  • 兼容 HuggingFace transformers
  • 148.94 倍加速比

环境要求

  • 硬件:华为 Ascend 910 系列 NPU
  • CANN:8.0.RC1 或更高版本
  • PyTorch:2.0+ 并带有 torch_npu
  • transformers:4.48+
  • numpy、scipy(音频处理)

目录结构

smart-turn-v2-ascend/
├── inference.py          # 推理测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── test_audio.npy        # 测试音频样本
├── inference_result.json # 推理结果
└── precision_result.json # 精度测试结果

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 准备模型文件

模型文件位于 /data/ysws/agentsp/5-16/smart-turn-v2/pipecat-ai/smart-turn-v2/ 目录下:

  • model.safetensors - 模型权重 (约 379MB)
  • config.json - 模型配置
  • preprocessor_config.json - 音频预处理配置
  • tokenizer_config.json - 分词器配置
  • vocab.json - 词汇表

4. 安装依赖

pip install transformers torch_npu numpy scipy -i https://pypi.huaweicloud.com/repository/pypi/simple/

Usage

Method 1: Normal Inference Mode

Run the inference script to extract audio features:

cd /data/ysws/agentsp/5-16/smart-turn-v2-ascend/

python3 inference.py

python3 inference.py --mode inference

方式二:精度测试模式 (CPU vs NPU)

运行精度对比测试:

cd /data/ysws/agentsp/5-16/smart-turn-v2-ascend/

python3 inference.py --mode precision_test

命令行参数说明

参数说明默认值
--mode测试模式: all, inference 或 precision_testall

测试验证

精度测试结果

指标实测值阈值状态
最大相对误差0.6073%< 1.00%PASS
CPU 推理时间2.314s--
NPU 推理时间0.016s--
加速比148.94x> 1xPASS

推理结果示例

输入: 3 秒音频 (48000 samples, 16kHz 采样率)

输出:

  • Last hidden state shape: torch.Size([1, 149, 768])
  • 149 个时间步,每步 768 维特征向量

测试日志

smart-turn-v2 NPU Test
Model: pipecat-ai/smart-turn-v2 (wav2vec2 endpointing)
Output: /data/ysws/agentsp/5-16/smart-turn-v2-ascend

============================================================
Inference Test (NPU)
============================================================
Device: npu:0
Loading model and feature extractor...
Model loaded successfully
Audio length: 48000 samples (3s)
Input shape: torch.Size([1, 48000])
Inference time: 5.196s
Last hidden state shape: torch.Size([1, 149, 768])
Saved test audio: /data/ysws/agentsp/5-16/smart-turn-v2-ascend/test_audio.npy (3s)

============================================================
Precision Test (CPU vs NPU)
============================================================
NPU Device: npu:0
Loading model...
Audio length: 48000 samples (3s)
Running on CPU...
Running on NPU...
CPU inference time: 2.314s
NPU inference time: 0.016s
Speedup: 148.94x
Max absolute error: 5.409449e-03
Max relative error: 0.6073% (threshold: 1.0%)
Status: PASS

============================================================
Precision Test Result: PASS
============================================================

============================================================
Test Complete!
============================================================

Python API 使用示例

基本推理

import torch
import numpy as np
from transformers import AutoModel, Wav2Vec2FeatureExtractor

MODEL_DIR = "/data/ysws/agentsp/5-16/smart-turn-v2/pipecat-ai/smart-turn-v2"

feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(MODEL_DIR)
model = AutoModel.from_pretrained(MODEL_DIR, trust_remote_code=True)
model = model.to("npu:0").eval()

audio_data = np.random.randn(16000).astype(np.float32) * 0.01
inputs = feature_extractor(audio_data, sampling_rate=16000, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)

hidden_states = outputs.last_hidden_state
print(f"Hidden states shape: {hidden_states.shape}")

批量音频处理

audio_batch = [np.random.randn(16000).astype(np.float32) * 0.01 for _ in range(4)]
inputs = feature_extractor(audio_batch, sampling_rate=16000, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)

模型结构

  • 架构类型: Wav2Vec2 (Wav2Vec2Model)
  • 特征提取: 7 层 CNN
  • Transformer: 12 层编码器
  • 隐藏层维度: 768
  • 注意力头数: 12
  • 音频采样率: 16kHz
组件说明
feature_extractorCNN 特征提取器
feature_projection特征投影层
encoder12 层 Transformer 编码器
masked_spec_embed掩码特征嵌入

推理参数配置

从 config.json 提取的关键参数:

{
  "hidden_size": 768,
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  "vocab_size": 32,
  "conv_dim": [512, 512, 512, 512, 512, 512, 512],
  "conv_stride": [5, 2, 2, 2, 2, 2, 2],
  "sampling_rate": 16000
}

常见问题

Q: 精度测试失败?

A: 检查 NPU 驱动是否正确安装。Wav2Vec2 模型在 CPU 和 NPU 上的数值误差极小(< 0.7%),远低于 1% 阈值。

Q: 如何提高推理速度?

A: NPU 相比 CPU 有极其显著的加速(148x),适合实时语音处理场景。

Q: 音频长度有限制吗?

A: 理论上无限制,但过长音频会占用更多内存。建议分段处理。

参考链接

  • 原始模型: https://huggingface.co/pipecat-ai/smart-turn-v2
  • Wav2Vec2 论文: https://arxiv.org/abs/2006.11477
  • HuggingFace Transformers: https://huggingface.co/transformers

许可证

本项目遵循 Apache-2.0 许可证