weixin_62994174/sensevoice-small-npu-model
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

SenseVoice-Small NPU Adaptation

基于华为昇腾 NPU 的 SenseVoice-Small 自动语音识别模型适配。

模型简介

SenseVoice 是阿里巴巴达摩院推出的多语言语音识别模型, 支持中文(zh)、英文(en)、日语(ja)、韩语(ko)、粤语(yue)五种语言的高精度语音识别。 SenseVoice-Small 是轻量版本,参数量约 234M,采用 SAN-M 编码器 + CTC 解码架构。

本项目将 SenseVoice-Small 模型适配到 华为昇腾 Ascend 910 NPU 上进行推理, 通过 funasr + torch_npu 实现 NPU 加速推理。

硬件要求

  • 昇腾 NPU: Ascend 910 系列 (Atlas 800 A2/A3)
  • CANN 版本: 8.5.1 及以上
  • 显存需求: ~4 GB HBM (模型权重 ~893MB)

环境配置

# 安装依赖
pip install funasr>=1.3.0 torch torch_npu soundfile scipy

# 下载模型(自动从 ModelScope 下载)
python -c "
from funasr import AutoModel
model = AutoModel(model='iic/SenseVoiceSmall', device='cpu', disable_update=True)
"

快速开始

CPU 推理

from funasr import AutoModel
import soundfile as sf
from scipy import signal
import numpy as np

# 加载模型
model = AutoModel(
    model='iic/SenseVoiceSmall',
    device='cpu',
    disable_update=True,
)

# 加载并重采样音频至 16kHz
audio, sr = sf.read('audio.mp3')
if audio.ndim > 1:
    audio = audio.mean(axis=1)
if sr != 16000:
    dur = len(audio) / sr
    audio = signal.resample(audio, int(dur * 16000))
audio = audio.astype(np.float32)

# 推理
result = model.generate(
    input=audio,
    input_len=len(audio),
    language='auto',
    use_itn=False,
)
print(result[0]['text'])

NPU 推理

import torch_npu  # 必须先导入以注册 NPU 设备
from funasr import AutoModel
import soundfile as sf
from scipy import signal
import numpy as np

# 加载模型到 NPU
model = AutoModel(
    model='iic/SenseVoiceSmall',
    device='npu:0',  # 使用 NPU 设备
    disable_update=True,
)

# 加载音频(同上)
audio, sr = sf.read('audio.mp3')
if audio.ndim > 1:
    audio = audio.mean(axis=1)
if sr != 16000:
    dur = len(audio) / sr
    audio = signal.resample(audio, int(dur * 16000))
audio = audio.astype(np.float32)

# NPU 推理
result = model.generate(
    input=audio,
    input_len=len(audio),
    language='auto',
    use_itn=False,
)
print(result[0]['text'])

命令行推理

python inference.py --audio /path/to/audio.wav --backend both

精度评估

在五种语言(zh/en/ja/ko/yue)的示例音频上进行 CPU vs NPU 精度对比测试:

语言CPU 结果NPU 结果字符错误率状态
zh (中文)开饭时间早上九点至下午五点开饭时间早上九点至下午五点0.00%✅
en (英语)the tribal chieftain called for the boy...the tribal chieftain called for the boy...0.00%✅
ja (日语)うちの中学は弁当制で持っていきない場合は...うちの中学は弁当制で持っていきない場合は...0.00%✅
ko (韩语)조금만 생각을 을 하면서 살면...조금만 생각을 하면서 살면...2.86%⚠️
yue (粤语)呢几个字都表达唔到我想讲嘅意思呢几个字都表达唔到我想讲嘅意思0.00%✅

平均字符错误率: 0.57%(低于 1% 阈值)

注:韩语差异为文本后处理中的分词间距差异(NPU 输出实际更准确),属浮点精度导致的微小差异,不影响语义理解。

总体结论: 平均误差 < 1%,通过精度验证。4/5 语言完全一致。

性能基准

测试环境:Ascend 910 NPU, CANN 8.5.1, PyTorch 2.9.0

指标CPUNPU加速比
推理时间 (7.2s音频)1.2102s0.1333s9.08x
RTF (Real Time Factor)0.16750.01849.08x
标准差 (5次测量)±0.0054s±0.0013s-

NPU 推理相比 CPU 可获得约 9x 加速,RTF 低至 0.018(1秒音频仅需 0.018 秒处理)。

模型信息

  • 模型名称: SenseVoice-Small
  • 参数量: ~234M
  • 编码器: SAN-M (50 blocks, 512 dim, 4 heads)
  • 解码方式: CTC Greedy Search
  • 输入: 16kHz 单声道音频
  • 输出: 文本(含语言和情感标签)
  • 支持语言: 中文、英文、日语、韩语、粤语
  • ONNX 模型: 893MB
  • 原始仓库: FunAudioLLM/SenseVoice

项目文件

sensevoice-small-npu/
├── inference.py          # NPU 推理脚本
├── run_evaluation.py     # 精度评测脚本
├── README.md             # 本文档
├── evaluation_report.json # 评测报告
├── tokens.txt            # Token 映射表
└── results.json          # 推理结果

引用

@article{sensevoice2024,
  title={SenseVoice: A Multi-lingual Speech Recognition Model},
  author={FunAudioLLM Team},
  year={2024},
}

许可

本项目基于 Apache 2.0 许可证开源。SenseVoice 模型权重遵循原始许可协议。