80K 小时训练的语音识别 + 语音翻译模型,已适配华为昇腾 NPU
MooER (摩耳) 是由摩尔线程 (Moore Threads) 开发的基于大语言模型 (LLM) 的语音识别 (ASR) 与语音翻译 (AST) 模型。MooER-MTL-80K 是使用 80,000 小时 多语言语音数据训练的多任务版本,相比 MooER-5K (5,000 小时) 版本在识别准确率上有显著提升。
MooER-MTL-80K 支持以下功能:
MooER-MTL-80K 采用三部分级联架构:
音频输入 → Paraformer 编码器 → Adapter 投影层 → Qwen2-7B-Instruct LLM → 文本输出| 组件 | 参数量 | 说明 |
|---|---|---|
| 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 使用了更多内部数据,显著提升了模型在各种场景下的识别准确率,特别是在英文语音识别方面。
| 测试集 | MooER-5K | MooER-80K | SenseVoice-Small | Whisper-Large-v3 | Qwen-Audio |
|---|---|---|---|---|---|
| AIShell-1 | 1.93 | 1.25 | 3.03 | 7.86 | 1.43 |
| AIShell-2 (iOS) | 3.17 | 2.67 | 3.79 | 5.38 | 3.57 |
| Test_MagicData | 3.48 | 2.52 | 3.81 | 8.36 | 5.31 |
| Test_THCHS | 4.11 | 3.14 | 5.17 | 9.06 | 4.86 |
| Fleurs (cmn_dev) | 5.81 | 5.23 | 6.39 | 4.54 | 10.54 |
| Fleurs (cmn_test) | 6.77 | 6.18 | 7.36 | 5.24 | 11.07 |
| 平均 | 4.21 | 3.50 | 4.93 | 6.74 | 6.13 |
| 测试集 | MooER-5K | MooER-80K | SenseVoice-Small | Whisper-Large-v3 |
|---|---|---|---|---|
| LibriSpeech (test_clean) | 7.78 | 4.11 | 4.07 | 3.42 |
| LibriSpeech (test_other) | 15.25 | 9.99 | 8.26 | 5.62 |
| Fleurs (eng_dev) | 18.89 | 13.32 | 12.92 | 11.63 |
| Fleurs (eng_test) | 20.41 | 14.97 | 13.41 | 12.57 |
| GigaSpeech (dev) | 23.46 | 16.92 | 19.44 | 19.18 |
| GigaSpeech (test) | 22.09 | 16.64 | 16.65 | 22.34 |
| 平均 | 17.98 | 12.66 | 12.46 | 12.46 |
| 测试集 | Whisper-Large-v3 | Qwen2-Audio | SeamlessM4T-v2 | MooER-5K-MTL |
|---|---|---|---|---|
| CoVoST1 zh2en | 13.5 | - | 25.3 | 30.2 |
| CoVoST2 zh2en | 12.2 | 24.4 | 22.2 | 25.2 |
| CCMT2019 dev | 15.9 | - | 14.8 | 19.6 |
本仓库包含在华为昇腾 NPU 上运行 MooER-MTL-80K 所需的适配脚本和工具。
| 文件 | 说明 |
|---|---|
inference.py | 昇腾 NPU 推理脚本,支持 ASR 和 AST 任务 |
compare_cpu_npu.py | CPU vs NPU 精度对比和性能测试脚本 |
requirements.txt | Python 依赖包列表 |
test_audio.wav | 测试音频文件 |
README.md | 本文件(中文说明文档) |
本仓库的核心工作是将 MooER-MTL-80K 模型从标准的 PyTorch + CUDA 环境迁移至华为昇腾 NPU (Ascend 910/910B) 环境。适配内容包括:
torch.cuda 替换为 torch.npu,支持 NPU 设备自动检测与切换compare_cpu_npu.py 脚本验证 NPU 与 CPU 推理结果的余弦相似度和相对误差已通过以下验证:
# 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.gittorch>=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.99MooER-MTL-80K 的模型权重需要从 ModelScope 或 HuggingFace 下载,然后放置到 model/ 目录下。
# 安装 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 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 install
# 从 ModelScope 克隆
git clone https://www.modelscope.cn/MooreThreadsSpeech/MooER-MTL-80K.git ./model
# 或从 HuggingFace 克隆
git clone https://huggingface.co/mtspeech/MooER-MTL-80K ./modelMooER 使用 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# 克隆 MooER 官方代码
cd /tmp
git clone https://github.com/MooreThreads/MooER.git
# 安装依赖
cd /opt/atomgit/models_workspace/MooER-MTL-80K
pip install -r requirements.txt确保模型权重已下载并放置在正确位置(参考 下载模型权重 部分)。
# 语音识别 (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将语音转录为文本,支持中文和英文。
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 权重目录将中文语音端到端翻译为英文文本。
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使用 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精度对比指标说明:
当平均相对误差 < 1% 时,判定为验证通过(PASS),否则给出警告(WARN)。
结果会自动保存到 precision_result.json 文件中。
由于模型权重文件较大(Paraformer 编码器 ~260MB + Qwen2-7B-Instruct ~15GB),无法直接存储在 Git 仓库中。请使用 git-lfs 或 ModelScope/HuggingFace 下载工具获取。
--device npu 获得最佳推理性能--device cpu 在 CPU 上运行(速度较慢)--device auto 让脚本自动检测可用设备compare_cpu_npu.py 检查 NPU 与 CPU 的精度差异npu-smi info 查看设备状态本项目基于 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}
}本仓库由社区贡献,旨在降低 MooER 模型在昇腾 NPU 上的使用门槛。如在使用中遇到问题,欢迎提交 Issue 或 Pull Request。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。