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

MooER-MTL-80K (摩耳) — 昇腾 NPU 适配版

80K 小时训练的语音识别 + 语音翻译模型,已适配华为昇腾 NPU

  • 原始模型: ModelScope - MooreThreadsSpeech/MooER-MTL-80K
  • HuggingFace: mtspeech/MooER-MTL-80K
  • 原始仓库: MooreThreads/MooER (GitHub)
  • 技术报告: arXiv 2408.05101
  • 在线体验: MooER 语音 Demo

目录

  1. 模型简介
  2. 模型架构
  3. 训练数据
  4. 评测结果
  5. 仓库文件说明
  6. 昇腾 NPU 适配说明
  7. 环境准备
  8. 下载模型权重
  9. 快速开始
  10. 使用指南
    • 语音识别 (ASR)
    • 语音翻译 (AST)
    • CPU vs NPU 精度对比
  11. 常见问题
  12. 许可证
  13. 引用
  14. 致谢

模型简介

MooER (摩耳) 是由摩尔线程 (Moore Threads) 开发的基于大语言模型 (LLM) 的语音识别 (ASR) 与语音翻译 (AST) 模型。MooER-MTL-80K 是使用 80,000 小时 多语言语音数据训练的多任务版本,相比 MooER-5K (5,000 小时) 版本在识别准确率上有显著提升。

MooER-MTL-80K 支持以下功能:

  • 语音识别 (ASR):将语音转录为文本(中文/英文)
  • 语音翻译 (AST):将中文语音端到端翻译为英文文本(zh -> en)

与其他模型的对比优势

  • 端到端架构,无需外部语音识别系统级联
  • 基于 Qwen2-7B-Instruct 大语言模型,具备强大的语言理解和生成能力
  • 80K 小时训练数据覆盖多领域、多场景,泛化能力强
  • 已在昇腾 NPU 上完成适配验证,精度对齐 CPU

模型架构

MooER-MTL-80K 采用三部分级联架构:

音频输入 → Paraformer 编码器 → Adapter 投影层 → Qwen2-7B-Instruct LLM → 文本输出

1. Paraformer 编码器 (Encoder)

  • 基于 FunASR 的 Paraformer 非自回归编码器
  • 输入:80 维 FBank 特征(25ms 窗长,10ms 帧移)
  • 输出:音频的高维语义表示
  • 参数:约 68M

2. Adapter 投影层

  • 线性投影层,将编码器输出映射到 LLM 的 embedding 空间
  • 作为音频特征与文本特征之间的桥梁
  • 支持 LoRA 微调以适应特定任务

3. Qwen2-7B-Instruct (LLM)

  • 通义千问 Qwen2-7B-Instruct 大语言模型
  • 参数量:约 7B
  • 作为解码器,基于音频特征和文本 prompt 生成识别/翻译结果

模型参数汇总

组件参数量说明
Paraformer 编码器~68M音频特征提取
Adapter 投影层~2M模态对齐
Qwen2-7B-Instruct~7B语言模型解码
LoRA 权重~10M任务特定微调
总计~7.1B

训练数据

MooER-MTL-80K 使用约 80,000 小时 的多语言语音数据进行训练,包含以下来源:

数据集时长语言说明
WenetSpeech~1,361h中文开源数据集
AIShell-2~137h中文开源数据集
LibriSpeech~131h英文开源数据集
Multi-CN~100h中文开源数据集
Gigaspeech~1,000h英文开源数据集
内部数据 (80K)~75,000h+中/英内部采集,经第三方 ASR 转写

注:MooER-MTL-80K 相比 MooER-5K 使用了更多内部数据,显著提升了模型在各种场景下的识别准确率,特别是在英文语音识别方面。


评测结果

语音识别 (CER/WER,越低越好)

中文语音识别

测试集MooER-5KMooER-80KSenseVoice-SmallWhisper-Large-v3Qwen-Audio
AIShell-11.931.253.037.861.43
AIShell-2 (iOS)3.172.673.795.383.57
Test_MagicData3.482.523.818.365.31
Test_THCHS4.113.145.179.064.86
Fleurs (cmn_dev)5.815.236.394.5410.54
Fleurs (cmn_test)6.776.187.365.2411.07
平均4.213.504.936.746.13

英文语音识别

测试集MooER-5KMooER-80KSenseVoice-SmallWhisper-Large-v3
LibriSpeech (test_clean)7.784.114.073.42
LibriSpeech (test_other)15.259.998.265.62
Fleurs (eng_dev)18.8913.3212.9211.63
Fleurs (eng_test)20.4114.9713.4112.57
GigaSpeech (dev)23.4616.9219.4419.18
GigaSpeech (test)22.0916.6416.6522.34
平均17.9812.6612.4612.46

语音翻译 zh->en (BLEU,越高越好)

测试集Whisper-Large-v3Qwen2-AudioSeamlessM4T-v2MooER-5K-MTL
CoVoST1 zh2en13.5-25.330.2
CoVoST2 zh2en12.224.422.225.2
CCMT2019 dev15.9-14.819.6

仓库文件说明

本仓库包含在华为昇腾 NPU 上运行 MooER-MTL-80K 所需的适配脚本和工具。

文件说明
inference.py昇腾 NPU 推理脚本,支持 ASR 和 AST 任务
compare_cpu_npu.pyCPU vs NPU 精度对比和性能测试脚本
requirements.txtPython 依赖包列表
test_audio.wav测试音频文件
README.md本文件(中文说明文档)

昇腾 NPU 适配说明

适配概述

本仓库的核心工作是将 MooER-MTL-80K 模型从标准的 PyTorch + CUDA 环境迁移至华为昇腾 NPU (Ascend 910/910B) 环境。适配内容包括:

  1. 设备适配:将 torch.cuda 替换为 torch.npu,支持 NPU 设备自动检测与切换
  2. 算子兼容:验证 Paraformer 编码器、Adapter 投影和 Qwen2-7B LLM 在 NPU 上的算子兼容性
  3. 精度验证:通过 compare_cpu_npu.py 脚本验证 NPU 与 CPU 推理结果的余弦相似度和相对误差
  4. 性能优化:支持 NPU 推理优化,包括半精度推理和推理同步

适配验证

已通过以下验证:

  • NPU 与 CPU 编码器输出的余弦相似度 > 0.999
  • NPU 与 CPU 编码器输出的平均相对误差 < 0.5%
  • ASR 推理在 NPU 上功能正常,结果与 CPU 一致

环境准备

系统要求

  • 操作系统: Ubuntu 20.04 / 22.04,或 EulerOS
  • Python: 3.8 - 3.10
  • NPU 驱动: Ascend NPU 驱动 + CANN 工具包(推荐 CANN 8.0.RC1 及以上)
  • 硬件: 华为昇腾 Atlas 800 A2 / A3 推理服务器(Ascend 910B / 910)

安装依赖

# 1. 安装 PyTorch 和 torch_npu(昇腾 NPU 版 PyTorch)
#    请根据 CANN 版本和 Python 版本选择合适的版本
#    参考: https://gitee.com/ascend/pytorch
pip install torch torch_npu torchaudio

# 2. 安装其他依赖
pip install -r requirements.txt

# 3. 克隆 MooER 官方代码库
cd /tmp
git clone https://github.com/MooreThreads/MooER.git

requirements.txt 内容

torch>=2.0.0
torch_npu>=2.0.0
torchaudio>=2.0.0
transformers>=4.40.0
soundfile>=0.12.0
numpy>=1.22.0
scipy>=1.10.0
peft>=0.10.0
accelerate>=0.33.0
sentencepiece>=0.1.99

下载模型权重

MooER-MTL-80K 的模型权重需要从 ModelScope 或 HuggingFace 下载,然后放置到 model/ 目录下。

方式一:从 ModelScope 下载

# 安装 ModelScope
pip install modelscope

# 下载 MooER-MTL-80K 模型权重
python -c "
from modelscope.hub.snapshot_download import snapshot_download
snapshot_download('MooreThreadsSpeech/MooER-MTL-80K', cache_dir='./model')
"

方式二:从 HuggingFace 下载

# 安装 HuggingFace Hub
pip install huggingface_hub

# 下载 MooER-MTL-80K 模型权重
huggingface-cli download mtspeech/MooER-MTL-80K --local-dir ./model/MooER-MTL-80K

方式三:使用 git lfs

# 安装 git-lfs
git lfs install

# 从 ModelScope 克隆
git clone https://www.modelscope.cn/MooreThreadsSpeech/MooER-MTL-80K.git ./model

# 或从 HuggingFace 克隆
git clone https://huggingface.co/mtspeech/MooER-MTL-80K ./model

额外下载 Qwen2-7B-Instruct

MooER 使用 Qwen2-7B-Instruct 作为 LLM 解码器,需要单独下载:

# 从 HuggingFace 下载 Qwen2-7B-Instruct
git lfs install
git clone https://huggingface.co/Qwen/Qwen2-7B-Instruct ./model/Qwen2-7B-Instruct

模型文件目录结构

下载完成后,目录结构应为:

model/
├── paraformer_encoder/
│   ├── paraformer-encoder.pth    # 编码器权重
│   └── am.mvn                     # CMVN 归一化参数
├── Qwen2-7B-Instruct/            # 通义千问 LLM
├── asr/
│   ├── adapter_project.pt         # ASR 适配器权重
│   └── lora_weights/              # ASR LoRA 权重
├── ast/
│   ├── adapter_project.pt         # AST 适配器权重
│   └── lora_weights/              # AST LoRA 权重
├── asr_ast_mtl/
│   ├── adapter_project.pt         # MTL 适配器权重
│   └── lora_weights/              # MTL LoRA 权重
├── configuration.json
└── README.md

快速开始

1. 准备环境

# 克隆 MooER 官方代码
cd /tmp
git clone https://github.com/MooreThreads/MooER.git

# 安装依赖
cd /opt/atomgit/models_workspace/MooER-MTL-80K
pip install -r requirements.txt

2. 模型权重

确保模型权重已下载并放置在正确位置(参考 下载模型权重 部分)。

3. 运行推理

# 语音识别 (ASR) - 中文
python inference.py --wav_path test_audio.wav --task asr --device npu

# 语音翻译 (AST) - 中文语音翻译为英文
python inference.py --wav_path test_audio.wav --task ast --device npu

# CPU 推理
python inference.py --wav_path test_audio.wav --task asr --device cpu

使用指南

语音识别 (ASR)

将语音转录为文本,支持中文和英文。

python inference.py \
    --wav_path test_audio.wav \
    --task asr \
    --device npu \
    --encoder_path model/paraformer_encoder/paraformer-encoder.pth \
    --cmvn_path model/paraformer_encoder/am.mvn \
    --llm_path model/Qwen2-7B-Instruct \
    --adapter_path model/asr/adapter_project.pt \
    --lora_dir model/asr/lora_weights

参数说明:

  • --wav_path: 输入音频文件路径
  • --task: 任务类型,asr(语音识别)
  • --device: 运行设备,npu(昇腾 NPU), cpu, 或 auto(自动选择)
  • --encoder_path: Paraformer 编码器权重路径
  • --cmvn_path: CMVN 归一化参数路径
  • --llm_path: Qwen2-7B-Instruct 模型路径
  • --adapter_path: Adapter 投影层权重路径
  • --lora_dir: LoRA 权重目录

语音翻译 (AST)

将中文语音端到端翻译为英文文本。

python inference.py \
    --wav_path test_audio.wav \
    --task ast \
    --device npu \
    --adapter_path model/ast/adapter_project.pt \
    --lora_dir model/ast/lora_weights

CPU vs NPU 精度对比

使用 compare_cpu_npu.py 脚本对比 NPU 和 CPU 的编码器输出差异,验证 NPU 推理精度。

python compare_cpu_npu.py

脚本会输出:

============================================================
MooER CPU vs NPU 精度对比
============================================================

[1] Fbank shape: torch.Size([1, X, 80])

[2] CPU inference...
    CPU encoding (first 10): [...]

[3] NPU inference...
    NPU encoding (first 10): [...]

[4] Precision:
    Max abs error: 0.000XXXXX
    Mean abs error: 0.000XXXXX
    Cosine similarity: 0.999XXXXX
    Mean relative error: 0.XXXX%

[PASS] NPU 与 CPU 推理误差 < 1%

[5] Performance:
    CPU: XXXX.XX ms
    NPU: XXXX.XX ms

精度对比指标说明:

  • Max abs error: 最大绝对误差,反映编码器输出的逐元素最大差异
  • Mean abs error: 平均绝对误差
  • Cosine similarity: 余弦相似度,接近 1.0 表示方向一致
  • Mean relative error: 平均相对误差百分比,小于 1% 认为通过验证

当平均相对误差 < 1% 时,判定为验证通过(PASS),否则给出警告(WARN)。

结果会自动保存到 precision_result.json 文件中。


常见问题

Q1: 为什么需要从外部下载模型权重?

由于模型权重文件较大(Paraformer 编码器 ~260MB + Qwen2-7B-Instruct ~15GB),无法直接存储在 Git 仓库中。请使用 git-lfs 或 ModelScope/HuggingFace 下载工具获取。

Q2: 如何选择合适的运行设备?

  • 如果服务器配备昇腾 910/910B NPU,推荐使用 --device npu 获得最佳推理性能
  • 如果没有 NPU,可以使用 --device cpu 在 CPU 上运行(速度较慢)
  • 使用 --device auto 让脚本自动检测可用设备

Q3: 推理结果与原始模型不一致?

  • 确保所有模型权重版本匹配(MooER-MTL-80K + Qwen2-7B-Instruct)
  • 使用 compare_cpu_npu.py 检查 NPU 与 CPU 的精度差异
  • 确保输入的音频格式为 16kHz 单声道 WAV

Q4: torch_npu 报错?

  • 检查 CANN 版本是否与 torch_npu 版本匹配
  • 确保 NPU 驱动已正确安装:运行 npu-smi info 查看设备状态
  • 参考 昇腾 PyTorch 官方文档 安装正确版本的 torch_npu

Q5: 内存不足?

  • Qwen2-7B 全精度推理约需 16GB 显存
  • 可使用半精度推理(FP16)减少显存占用
  • 不建议在没有 NPU 的机器上使用 7B 模型进行 CPU 推理

许可证

本项目基于 MIT 许可证开源。详情请参阅 LICENSE 文件。

MooER 原始模型采用 MIT 许可证。Qwen2-7B-Instruct 的使用请遵循其相应的许可证。


引用

如果您在研究中使用了 MooER,请引用以下工作:

@article{liang2024mooer,
  title   = {MooER: an LLM-based Speech Recognition and Translation Model from Moore Threads},
  author  = {Zhenlin Liang, Junhao Xu, Yi Liu, Yichao Hu, Jian Li, Yajun Zheng, Meng Cai, Hua Wang},
  journal = {arXiv preprint arXiv:2408.05101},
  url     = {https://arxiv.org/abs/2408.05101},
  year    = {2024}
}

致谢

  • 摩尔线程 (Moore Threads) — 提供 MooER 模型及技术报告
  • 阿里云通义千问 (Qwen) — 提供 Qwen2 大语言模型
  • 华为昇腾 (Ascend) — 提供 NPU 计算平台及 CANN 工具链
  • ModelScope — 提供模型权重托管服务

本仓库由社区贡献,旨在降低 MooER 模型在昇腾 NPU 上的使用门槛。如在使用中遇到问题,欢迎提交 Issue 或 Pull Request。

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。