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

Dolphin-small

模型介绍

Dolphin-small 是 DataoceanAI 与清华大学联合开发的多语言、多任务自动语音识别(ASR)模型,参数量 372M。该模型支持 40 种东方语言和 22 种中文方言的语音识别、语音活动检测(VAD)、分割和语言识别(LID)。

  • 模型架构: E-Branchformer Encoder + Transformer Decoder + CTC
  • 论文: Dolphin: A Large-Scale Automatic Speech Recognition Model for Eastern Languages
  • 官方仓库: GitHub
  • HuggingFace: DataoceanAI
  • ModelScope: DataoceanAI/dolphin-small

模型参数

参数值
参数量372M
Encoder 层数12 (E-Branchformer)
Decoder 层数12 (Transformer)
隐藏层维度768
注意力头数12
词汇量40,002 (BPE)
采样率16kHz
模型格式PyTorch

环境要求

硬件环境

项目要求
NPUAscend 910B (至少 1 卡)
显存≥ 4GB HBM

软件环境

项目版本
OSopenEuler / Ubuntu (aarch64)
CANN≥ 8.0
Python3.10 / 3.11
PyTorch2.9.0
torch_npu2.9.0.post1
numpy≥ 1.26
sentencepiece≥ 0.2.0
PyYAML≥ 6.0

依赖安装

# 华为镜像源
export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/

# 基础依赖
pip install torch==2.9.0 torch_npu==2.9.0.post1
pip install numpy sentencepiece PyYAML

# 音频处理 (可选,用于加载非 WAV 格式音频)
pip install soundfile
# 或使用 ffmpeg: apt install ffmpeg

快速开始

1. 下载模型

pip install modelscope
modelscope download --model DataoceanAI/dolphin-small

模型文件将下载到 ~/.cache/modelscope/hub/models/DataoceanAI/dolphin-small/。

2. 准备模型目录

mkdir -p model
cp ~/.cache/modelscope/hub/models/DataoceanAI/dolphin-small/{config.yaml,small.pt,bpe.model,feats_stats.npz} model/

3. 运行推理

# 在昇腾 NPU 上运行推理
python3 inference.py audio.wav --device npu

# 运行性能基准测试
python3 inference.py audio.wav --device npu --benchmark --num_runs 10

# CPU 推理 (用于精度对比)
python3 inference.py audio.wav --device cpu

NPU 适配说明

适配方法

采用 torch_npu + transfer_to_npu 自动迁移方案,关键适配点:

  1. 设备映射: transfer_to_npu 自动将 torch.cuda.* API 映射到 torch.npu.*
  2. 模型重构: 从 ESPnet 格式的 checkpoint 重建 E-Branchformer + Transformer 架构,确保 state dict 键名精确匹配(822 个键全匹配,0 缺失)
  3. Mask 类型适配: 将 FP32 mask 转换为 BOOL 类型以满足 NPU 算子要求
  4. 解码器位置编码: 使用手动正弦位置编码替代 ESPnet 的 PositionalEncoding 模块

关键代码

import torch_npu
from torch_npu.contrib import transfer_to_npu

# 模型自动迁移到 NPU
model = DolphinASR(config, vocab)
model.load_state_dict(ckpt, strict=False)  # 822 keys matched
model.to("npu")
model.eval()

# 推理
with torch.no_grad():
    result = model.greedy_decode(feats, mask)

适配验证

  • State dict 键名完整匹配 (822/822)
  • 模型在 NPU 上成功加载
  • 端到端推理流程跑通
  • NPU 输出与 CPU 基线一致
  • 无算子 fallback 警告

性能评测

测试环境

项目配置
NPUAscend 910B × 2 (单卡推理)
CPUKunpeng 920 aarch64
CANN25.5.2
测试音频5 秒,16kHz,单声道
Batch Size1

推理时延

指标NPU (Ascend 910B)CPU (Kunpeng 920)加速比
首次推理 (含 warmup)2.32s126.48s54.5x
平均推理时延2.25s126.48s56.2x
中位数时延2.26s127.44s56.4x
标准差0.025s2.21s-
实时率 (RTF)0.4525.30-

RTF < 1 表示推理速度快于实时,满足流式 ASR 需求

精度评测

指标结果
Encoder 最大差异0.0570
Encoder 平均差异0.0073
CTC 最大差异0.0605
CTC 平均差异0.0065
最大相对误差0.42%
精度验收✅ PASS (< 1% 误差)

显存占用

指标值
模型加载~3.1 GB
推理峰值~4.0 GB

文件说明

文件说明
inference.pyNPU 推理脚本(支持 benchmark 模式)
eval_accuracy.pyNPU vs CPU 精度评测脚本
model/config.yamlESPnet 模型配置文件
model/small.pt模型权重 (1.4 GB)
model/bpe.modelSentencePiece BPE 分词模型
model/feats_stats.npz特征归一化统计量

许可证

本项目基于 Apache 2.0 许可证开源。模型权重版权归 DataoceanAI 所有。


标签

#NPU #Ascend #昇腾 #ASR #Speech-Recognition #Dolphin #E-Branchformer #PyTorch


引用

@article{dolphin2025,
  title={Dolphin: A Large-Scale Automatic Speech Recognition Model for Eastern Languages},
  author={DataoceanAI and Tsinghua University},
  journal={arXiv preprint arXiv:2503.20212},
  year={2025}
}