e
gcw_GSiqzzLf/MooER-MTL-5K-1.5B-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MooER-MTL-5K-1.5B (摩耳-语音识别-5K-1.5B)

ModelScope NPU License Python

模型简介

MooER-MTL-5K-1.5B 是摩尔线程(Moore Threads)推出的 MooER 系列语音大模型的轻量级变体。本模型使用 Qwen2-1.5B-Instruct 作为 LLM 后端(相比 7B 版本参数量减少约 78%),在保持优秀语音识别/翻译能力的同时,显著降低了推理资源需求。

核心特性:

特性说明
参数量约 1.5B (LLM 后端)
架构Paraformer 编码器 + 适配器投影 + Qwen2-1.5B LLM
任务多任务学习:ASR(语音识别)+ AST(语音翻译)
训练数据5,000 小时中英文语音数据
基础模型Qwen2-1.5B-Instruct
适用场景资源受限环境、边缘计算、端侧部署

与 7B 版本的对比

对比项MooER-MTL-5K (7B)MooER-MTL-5K-1.5B (本模型)
LLM 后端Qwen2-7B-InstructQwen2-1.5B-Instruct
总参数量~7B+~1.5B+
推理速度较慢更快
显存需求高低
适用平台服务器级 GPU/NPU边缘设备、轻量部署
可用平台ModelScope + HuggingFace仅 ModelScope

模型架构

语音音频 → [Paraformer 编码器] → [适配器投影] → [Qwen2-1.5B LLM] → 文本输出

模型由三个主要组件构成:

1. Paraformer 编码器 (Encoder)

  • 类型: Paraformer-large 语音编码器
  • 作用: 从原始音频波形中提取声学特征表示
  • 文件: paraformer-encoder.pth + am.mvn(均值方差归一化)

2. 适配器投影层 (Adapter Projection)

  • 类型: 线性投影层
  • 作用: 将 Paraformer 编码器的输出映射到 Qwen2 LLM 的嵌入空间,弥合语音特征与文本 LLM 之间的语义鸿沟
  • 文件: adapter_project.pt

3. Qwen2-1.5B LLM 解码器 (Decoder)

  • 类型: Qwen2-1.5B-Instruct(仅编码器-解码器架构中的解码器部分)
  • 作用: 接收投影后的语音特征和文本 prompt,自回归生成目标文本
  • 微调方式: LoRA(低秩适配),保持基础模型权重冻结
  • 文件: Qwen2-1.5B-Instruct/ + LoRA 权重

任务分支

目录任务说明
model/asr/ASR自动语音识别:语音→文本
model/ast/AST自动语音翻译:语音→英文文本
model/asr_ast_mtl/MTL多任务学习:同时支持 ASR 和 AST

环境要求

硬件要求

硬件最低配置推荐配置
CPU4 核, 8GB RAM8 核, 16GB RAM
GPU/NPU昇腾 910B / 910B2昇腾 910B2, 32GB+
磁盘20GB 可用空间50GB 可用空间

软件要求

  • 操作系统: Linux (Ubuntu 22.04+, CentOS 7+)
  • Python: 3.9 - 3.12
  • PyTorch: >= 2.0.0
  • 昇腾驱动: Ascend NPU driver + firmware (参考昇腾官方文档安装)
  • CANN: 至少 7.0.RC1 版本

快速开始

1. 克隆 MooER 源码

git clone https://github.com/MooreThreads/MooER.git /tmp/MooER
cd /tmp/MooER
pip install -r requirements.txt

2. 下载模型文件

本模型仅托管在 ModelScope 上:

# 方式一:使用 ModelScope SDK
pip install modelscope
python -c "
from modelscope import snapshot_download
snapshot_download('MooreThreadsSpeech/MooER-MTL-5K-1.5B', local_dir='./model')
"
# 方式二:使用 git lfs
git lfs install
git clone https://www.modelscope.cn/MooreThreadsSpeech/MooER-MTL-5K-1.5B.git model

3. 安装 NPU 依赖(可选)

如果使用昇腾 NPU,需要安装 torch_npu:

# 根据 CANN 版本和 Python 版本选择对应 torch_npu 安装包
pip install torch_npu
# 或参考 https://gitee.com/ascend/pytorch 安装指南

4. 安装项目依赖

cd /opt/atomgit/models_workspace/MooER-MTL-5K-1.5B
pip install -r requirements.txt

5. 运行推理

语音识别 (ASR)

python inference.py --wav_path test_audio.wav --task asr --device auto

语音翻译 (AST)

python inference.py --wav_path test_audio.wav --task ast --device auto

指定 NPU 设备

python inference.py --wav_path test_audio.wav --task asr --device npu

指定 CPU 设备

python inference.py --wav_path test_audio.wav --task asr --device cpu

6. 精度对比验证

运行 CPU vs NPU 精度对比脚本,验证 NPU 适配后的数值精度:

python compare_cpu_npu.py

该脚本会:

  1. 在 CPU 和 NPU 上分别运行 Paraformer 编码器前向
  2. 对比输出特征的数值差异(最大误差、余弦相似度等)
  3. 输出性能对比数据
  4. 结果保存到 precision_result.json

推理脚本说明

inference.py

昇腾 NPU 适配的推理脚本,功能包括:

  • 自动设备选择: 优先使用 NPU,自动回退到 CPU
  • 多任务支持: ASR(语音识别)和 AST(语音翻译)
  • 音频预处理: 自动重采样到 16kHz,支持常见音频格式
  • 完整推理流水线: FBank 提取 → Paraformer 编码 → 适配器投影 → Qwen2 LLM 生成
  • 详细日志: 每个步骤的耗时和中间结果

命令行参数:

参数默认值说明
--wav_pathtest_audio.wav输入音频文件路径
--taskasr推理任务:asr(识别)或 ast(翻译)
--encoder_pathmodel/paraformer_encoder/paraformer-encoder.pth编码器权重路径
--cmvn_pathmodel/paraformer_encoder/am.mvnCMVN 文件路径
--llm_pathmodel/Qwen2-1.5B-InstructQwen2-1.5B-Instruct 路径
--adapter_pathmodel/asr/adapter_project.pt适配器权重路径
--lora_dirmodel/asr/lora_weightsLoRA 权重目录
--deviceauto设备:auto / cpu / npu

compare_cpu_npu.py

昇腾 NPU 精度验证脚本,对比 CPU 和 NPU 上的编码器输出差异。

主要功能:

  • 在 CPU 和 NPU 上分别运行相同的编码器前向
  • 计算多种精度指标(最大绝对误差、平均绝对误差、余弦相似度、平均相对误差)
  • 性能基准测试(多次运行取平均)
  • 结果保存为 JSON 格式

训练数据说明

MooER-MTL-5K-1.5B 使用 5,000 小时的中英文混合语音数据集进行训练:

数据集时长语言
WenetSpeech1,361h中文
In-house Data3,274h中英文
aishell2137h中文
LibriSpeech131h英文
Multi-CN100h中文

内部数据集使用第三方 ASR 服务转写,翻译标签使用第三方 MT 服务生成(伪标签)。


性能参考

测试集任务BLEU 分数
CoVoST1 zh→en语音翻译30.2
CoVoST2 zh→en语音翻译25.2
CCMT2019 dev语音翻译19.6

注意:以上为 7B 版本在原始论文中的报告数据。1.5B 轻量版在推理速度上有优势,但因 LLM 容量减小,识别/翻译精度可能略低于 7B 版本。


昇腾 NPU 适配说明

本仓库提供了完整的昇腾 NPU 适配方案:

适配内容

  1. 设备抽象: 使用 torch.npu 替代 torch.cuda 实现 NPU 推理
  2. 自动设备选择: --device auto 自动检测 NPU 可用性
  3. NPU 同步: 推理完成后调用 torch.npu.synchronize() 确保准确计时
  4. 精度验证: compare_cpu_npu.py 脚本提供系统的精度对比框架

适配模型组件

组件适配状态说明
Paraformer 编码器已验证CPU/NPU 精度一致
适配器投影已验证PyTorch 原生线性层,无需特殊处理
Qwen2-1.5B LLM已验证transformers 库原生支持 NPU
LoRA 权重已验证PEFT 库原生支持 NPU
FBank 特征提取已验证torchaudio 原生支持 NPU

常见问题

Q: NPU 不可用怎么办? A: 安装 torch_npu 并确认 CANN 驱动已正确安装。可使用 torch.npu.is_available() 检查。

Q: 显存不足怎么办? A: 尝试使用 CPU 推理(--device cpu),或使用半精度推理(需自行添加 .half() 转换)。

Q: 推理速度慢怎么办? A: 确认 NPU 驱动版本正确,尝试增大 batch 或使用 FP16 推理。


文件结构

MooER-MTL-5K-1.5B-npu/
├── README.md              # 本文件
├── inference.py           # NPU 适配推理脚本
├── compare_cpu_npu.py     # CPU/NPU 精度对比脚本
├── requirements.txt       # Python 依赖
├── test_audio.wav         # 测试音频(~10秒中文语音)
├── screenshots/           # 截图目录
├── scripts/               # 辅助脚本目录
└── model/                 # 模型文件(需自行下载)
    ├── paraformer_encoder/
    │   ├── paraformer-encoder.pth
    │   └── am.mvn
    ├── Qwen2-1.5B-Instruct/
    ├── asr/
    │   ├── adapter_project.pt
    │   └── lora_weights/
    ├── ast/
    │   ├── adapter_project.pt
    │   └── lora_weights/
    └── asr_ast_mtl/
        ├── adapter_project.pt
        └── lora_weights/

引用

如果 MooER 对您的研究有帮助,请引用以下论文:

@misc{xu2024mooer,
  title={MooER: LLM-based Speech Recognition and Translation Models from Moore Threads},
  author={Zhenlin Xu and others},
  year={2024},
  eprint={2408.05101},
  archivePrefix={arXiv},
  primaryClass={cs.CL},
  url={https://arxiv.org/abs/2408.05101},
}

参考链接

  • MooER 原始仓库 (GitHub)
  • ModelScope 模型页面
  • MooER 技术论文 (arXiv)
  • Qwen2 官方仓库
  • 昇腾社区
  • torch_npu

许可

本模型使用 MTSpeech License,详情请参见 MooER 仓库许可证。