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

MooER-MTL-5K 摩耳多任务语音识别/翻译模型 (昇腾 NPU 适配版)

NPU Framework Task

模型简介

MooER-MTL-5K 是由 MooreThreads 团队开发的多任务语音识别与翻译模型。该模型基于 Paraformer 编码器 + Qwen2-7B-Instruct 大语言模型 架构,通过 LoRA 微调技术实现高质量的语音识别(ASR)和语音翻译(AST)能力。

本仓库是基于昇腾 NPU (Ascend910系列) 适配的版本,支持在华为昇腾设备上高效运行推理。

核心特性

  • 多任务支持: 同时支持 ASR(语音识别,中文输出)和 AST(语音翻译,英文输出)
  • Paraformer 编码器: 高性能非自回归语音编码器,提取语音特征
  • Qwen2-7B-Instruct 大模型: 强大的语言理解和生成能力
  • LoRA 高效微调: 轻量级适配器,针对 ASR 和 AST 分别微调
  • 昇腾 NPU 原生支持: 通过 torch_npu 实现 NPU 加速推理

模型架构

输入音频 (16kHz WAV)
    │
    ▼
Fbank 特征提取 (80维 filter bank)
    │
    ▼
Paraformer 编码器 ← CMVN 归一化
    │
    ▼
Adapter 投影层 (将编码器输出映射到 LLM 空间)
    │
    ▼
Qwen2-7B-Instruct LLM (带 LoRA 权重)
    │
    ▼
文本输出 (ASR: 中文 / AST: 英文)

任务类型

任务任务标识输入输出
ASR (Automatic Speech Recognition)--task asr中文语音中文文本
AST (Speech Translation)--task ast中文语音英文文本

基础信息

属性值
框架PyTorch
编码器Paraformer (非自回归)
语言模型Qwen2-7B-Instruct
微调方式LoRA
输入格式16kHz 单声道 WAV
输出格式文本
参数量 (编码器+投影)~80MB (不含 LLM)
全模型参数量~7B

原始模型

  • ModelScope: https://www.modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K
  • GitHub 仓库: https://github.com/MooreThreads/MooER

依赖环境

系统要求

  • Python >= 3.9
  • 昇腾 NPU 驱动 (CANN 7.0+)
  • MooER 源码 (需克隆至 /tmp/MooER)

Python 依赖

包名版本要求说明
torch>= 2.0.0深度学习框架
torch_npu>= 2.0.0昇腾 NPU 适配库
torchaudio>= 2.0.0音频处理
transformers>= 4.40.0LLM 推理
soundfile>= 0.12.0音频文件读取
numpy>= 1.22.0数值计算
scipy>= 1.10.0科学计算
peft>= 0.10.0LoRA 权重加载
accelerate>= 0.33.0模型加速
sentencepiece>= 0.1.99分词器

环境准备

1. 安装系统依赖

# 安装 MooER 推理代码
git clone https://github.com/MooreThreads/MooER.git /tmp/MooER

# 安装 CANN 昇腾驱动 (如未安装)
# 请参考华为官方 CANN 安装文档

2. 安装 Python 依赖

pip install -r requirements.txt

3. 下载模型文件

# 下载 MooER-MTL-5K 模型
git clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K.git

# 下载 Qwen2-7B-Instruct 基座模型 (约 15GB,必需)
git clone https://huggingface.co/Qwen/Qwen2-7B-Instruct
# 或
git clone https://modelscope.cn/models/qwen/Qwen2-7B-Instruct

4. 下载模型权重文件

由于 GitCode 平台文件大小限制,本仓库仅包含推理脚本、配置文件和少量配置文件。 所有模型权重文件 (adapter_project.pt, adapter_model.bin, paraformer-encoder.pth, Qwen2-7B-Instruct) 均需从 ModelScope 或 HuggingFace 下载。

# 一键下载脚本 (推荐)
# 从 ModelScope 下载 MooER-MTL-5K 完整模型
git clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K.git /tmp/MooER-MTL-5K-weights
cp -r /tmp/MooER-MTL-5K-weights/model/* ./model/

# 或手动下载单个文件:
# 1. 编码器权重
wget https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K/resolve/master/model/paraformer_encoder/paraformer-encoder.pth -O model/paraformer_encoder/paraformer-encoder.pth

# 2. ASR LoRA 权重
wget https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K/resolve/master/model/asr/lora_weights/adapter_model.bin -O model/asr/lora_weights/adapter_model.bin

# 3. Qwen2-7B-Instruct 基座模型 (~15GB)
git clone https://modelscope.cn/models/qwen/Qwen2-7B-Instruct model/Qwen2-7B-Instruct

5. 最终目录结构

下载所有权重文件后,完整的目录结构如下:

MooER-MTL-5K/
├── inference.py                 # NPU 推理脚本
├── compare_cpu_npu.py           # CPU vs NPU 精度对比
├── requirements.txt             # Python 依赖
├── test_audio.wav               # 测试音频
├── README.md                    # 本文件
├── model/
│   ├── configuration.json              # 模型配置
│   ├── paraformer_encoder/
│   │   ├── paraformer-encoder.pth      # 编码器权重 (~80MB, 需下载)
│   │   └── am.mvn                      # CMVN 归一化参数 ✓
│   ├── Qwen2-7B-Instruct/             # Qwen2-7B-Instruct (~15GB, 需下载)
│   ├── asr/
│   │   ├── adapter_project.pt          # ASR 投影层权重 (37MB) ✓
│   │   └── lora_weights/
│   │       ├── adapter_model.bin       # ASR LoRA 权重 (~617MB, 需下载)
│   │       └── adapter_config.json     # LoRA 配置 ✓
│   ├── ast/
│   │   ├── adapter_project.pt          # AST 投影层权重 (37MB) ✓
│   │   └── lora_weights/
│   │       ├── adapter_model.bin       # AST LoRA 权重 (需下载)
│   │       └── adapter_config.json     # LoRA 配置 ✓
│   ├── asr_ast_mtl/
│   │   ├── adapter_project.pt          # 多任务投影层权重 (37MB) ✓
│   │   └── lora_weights/
│   │       ├── adapter_model.bin       # 多任务 LoRA 权重 (需下载)
│   │       └── adapter_config.json     # LoRA 配置 ✓
│   ├── assets/
│   │   ├── MTLogo.png                  # 模型 Logo ✓
│   │   └── framework.png               # 架构图 ✓
│   ├── LICENSE                         # 许可证 ✓
│   └── README.md                       # 原始模型 README ✓
└── ...

✓ = 本仓库已包含    需下载 = 需用户手动下载

⚠️ 重要说明

需要额外下载的文件

由于 GitCode 文件大小限制,以下文件未包含在本仓库中,需要从 ModelScope / HuggingFace 下载:

文件大小下载来源
Qwen2-7B-Instruct/~15 GBModelScope / HuggingFace
paraformer-encoder.pth~80 MBModelScope 原始仓库
adapter_model.bin (ASR/AST/MTL)~617 MB eachModelScope 原始仓库
# Qwen2-7B-Instruct (必需,基座模型)
git clone https://modelscope.cn/models/qwen/Qwen2-7B-Instruct model/Qwen2-7B-Instruct
# 或: git clone https://huggingface.co/Qwen/Qwen2-7B-Instruct model/Qwen2-7B-Instruct

# MooER-MTL-5K 完整权重 (包含编码器、LoRA 等)
git clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K.git
# 然后将 model/ 目录下的文件复制过来

MooER 推理源码

推理脚本需要 MooER 官方源码,默认路径为 /tmp/MooER/src。请确保已克隆仓库:

git clone https://github.com/MooreThreads/MooER.git /tmp/MooER

完整安装步骤

# Step 1: 克隆 MooER 推理代码
git clone https://github.com/MooreThreads/MooER.git /tmp/MooER

# Step 2: 安装 Python 依赖
pip install -r requirements.txt

# Step 3: 下载 Qwen2-7B-Instruct 基座模型
git clone https://modelscope.cn/models/qwen/Qwen2-7B-Instruct model/Qwen2-7B-Instruct

# Step 4: 下载 MooER-MTL-5K 模型完整权重
git clone https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K.git /tmp/MooER-MTL-5K-weights
cp -r /tmp/MooER-MTL-5K-weights/model/* ./model/

# Step 5: 运行推理
python inference.py --wav_path test_audio.wav --task asr

推理命令

ASR (语音识别)

# NPU 推理 (自动检测)
python inference.py --wav_path test_audio.wav --task asr --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

AST (语音翻译)

# NPU 推理
python inference.py --wav_path test_audio.wav --task ast --device npu

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

完整参数说明

参数默认值说明
--wav_pathtest_audio.wav输入音频路径 (16kHz)
--taskasr任务类型: asr 或 ast
--encoder_pathmodel/paraformer_encoder/paraformer-encoder.pth编码器权重路径
--cmvn_pathmodel/paraformer_encoder/am.mvnCMVN 归一化文件路径
--llm_pathmodel/Qwen2-7B-InstructQwen2 模型路径
--adapter_pathmodel/asr/adapter_project.pt投影层权重路径
--lora_dirmodel/asr/lora_weightsLoRA 权重目录
--deviceauto推理设备: auto/cpu/npu

使用不同任务模型

# AST 任务
python inference.py \
    --task ast \
    --adapter_path model/ast/adapter_project.pt \
    --lora_dir model/ast/lora_weights \
    --wav_path test_audio.wav

# ASR+AST 多任务
python inference.py \
    --task asr \
    --adapter_path model/asr_ast_mtl/adapter_project.pt \
    --lora_dir model/asr_ast_mtl/lora_weights \
    --wav_path test_audio.wav

核心代码

推理流程 (inference.py)

import torch
import torchaudio
import soundfile as sf

# 1. 设备选择
device = 'npu:0' if torch.npu.is_available() else 'cpu'

# 2. 加载模型
model_config = asr_config.ModelConfig()
model_config.llm_path = args.llm_path
model_config.encoder_path = args.encoder_path
model_config.adapter_path = args.adapter_path
model_config.cmvn_path = args.cmvn_path
model_config.lora_dir = args.lora_dir
model_config.is_inference = True

model, tokenizer = mooer_model.init_model(model_config=model_config)
model.to(device)
model.eval()

# 3. 加载音频并进行 Fbank 特征提取
waveform, sample_rate = sf.read(wav_path)
feats = torchaudio.compliance.kaldi.fbank(
    audio_tensor * (1 << 15),
    num_mel_bins=80, frame_length=25, frame_shift=10
)

# 4. 编码器推理
encoder_out, _ = model.encoder(feats, feats_len)

# 5. 投影到 LLM 空间
projected = model.adapter(encoder_out)

# 6. LLM 生成
generated_ids = model.llm.generate(
    inputs=input_ids,
    encoder_outputs=projected,
    max_new_tokens=200
)

# 7. 解码输出
response = tokenizer.decode(generated_ids[0], skip_special_tokens=True)

昇腾 NPU 适配说明

本仓库在原模型基础上进行了以下 NPU 适配:

  1. torch.npu 设备支持: 通过 torch.npu.is_available() 自动检测 NPU 设备,支持 auto/cpu/npu 三种设备选择模式
  2. NPU 同步: 在推理完成后调用 torch.npu.synchronize() 确保准确计时
  3. 精度验证: 提供 compare_cpu_npu.py 对比 CPU 和 NPU 编码器输出差异,验证 NPU 推理精度

适配注意事项

  • 模型加载: 使用 model.to(device) 将整个模型搬运至 NPU
  • 输入张量: 音频特征和 token IDs 均需调用 .to(device) 移至 NPU
  • 内存管理: Qwen2-7B-Instruct 加载至 NPU 显存约需 15-20GB,请确保 NPU 显存充足 (Ascend 910B 32GB 及以上)
  • CANN 版本: 建议使用 CANN 7.0 及以上版本以获得最佳兼容性

精度对比

运行 compare_cpu_npu.py 可对比 CPU 和 NPU 推理精度:

# CPU 和 NPU 精度对比
python compare_cpu_npu.py

脚本会自动完成以下对比指标并保存至 precision_result.json:

  • 最大绝对误差 (Max abs error): 编码器输出的最大元素差异
  • 平均绝对误差 (Mean abs error): 编码器输出的平均元素差异
  • 余弦相似度 (Cosine similarity): CPU 与 NPU 输出向量的一致性
  • 平均相对误差 (Mean relative error): 相对误差百分比

预期结果:余弦相似度 > 0.999,平均相对误差 < 1% (PASS)

性能参考

以下为测试环境 (Ascend 910B, 32GB) 上的推理性能参考值:

阶段CPUNPU (910B)
编码器推理~800ms~50ms
LLM 生成 (200 tokens)~30s~2-3s
总推理 (5s 音频)~35s~3s

注:实际性能取决于音频长度、NPU 型号、CANN 版本及系统负载。

文件清单

本仓库包含的文件

文件大小说明
inference.py6 KB昇腾 NPU 推理脚本
compare_cpu_npu.py5 KBCPU/NPU 精度对比脚本
README.md-本文件
requirements.txt169 BPython 依赖
test_audio.wav128 KB测试音频 (16kHz)
model/configuration.json56 B模型配置
model/LICENSE8.7 KB许可证
model/paraformer_encoder/am.mvn11 KBCMVN 归一化参数
model/asr/adapter_project.pt37 MBASR 投影层权重
model/asr/lora_weights/adapter_config.json542 BASR LoRA 配置
model/ast/adapter_project.pt37 MBAST 投影层权重
model/ast/lora_weights/adapter_config.json542 BAST LoRA 配置
model/asr_ast_mtl/adapter_project.pt37 MB多任务投影层权重
model/asr_ast_mtl/lora_weights/adapter_config.json542 B多任务 LoRA 配置
model/Qwen2-7B-Instruct/-基座模型占位说明
model/assets/330 KBLogo 与架构图

需额外下载的文件 (未包含在本仓库)

文件大小说明
model/paraformer_encoder/paraformer-encoder.pth~80 MB编码器权重
model/asr/lora_weights/adapter_model.bin~617 MBASR LoRA 权重
model/ast/lora_weights/adapter_model.bin~617 MBAST LoRA 权重
model/asr_ast_mtl/lora_weights/adapter_model.bin~617 MB多任务 LoRA 权重
model/Qwen2-7B-Instruct/ (完整目录)~15 GBQwen2 基座模型

标签

#+NPU #+语音识别 #+昇腾 #+ASR #+AST #+语音翻译 #+Paraformer #+Qwen2 #+LoRA #+PyTorch #+ModelScope

许可证

本项目遵循原始模型的许可证。详见 model/LICENSE 文件。


本仓库为昇腾 NPU 适配版本,原始模型版权归 MooreThreads 所有。

推理成功证据

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

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

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

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