MooER-MTL-5K 是由 MooreThreads 团队开发的多任务语音识别与翻译模型。该模型基于 Paraformer 编码器 + Qwen2-7B-Instruct 大语言模型 架构,通过 LoRA 微调技术实现高质量的语音识别(ASR)和语音翻译(AST)能力。
本仓库是基于昇腾 NPU (Ascend910系列) 适配的版本,支持在华为昇腾设备上高效运行推理。
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 |
/tmp/MooER)| 包名 | 版本要求 | 说明 |
|---|---|---|
| torch | >= 2.0.0 | 深度学习框架 |
| torch_npu | >= 2.0.0 | 昇腾 NPU 适配库 |
| torchaudio | >= 2.0.0 | 音频处理 |
| transformers | >= 4.40.0 | LLM 推理 |
| soundfile | >= 0.12.0 | 音频文件读取 |
| numpy | >= 1.22.0 | 数值计算 |
| scipy | >= 1.10.0 | 科学计算 |
| peft | >= 0.10.0 | LoRA 权重加载 |
| accelerate | >= 0.33.0 | 模型加速 |
| sentencepiece | >= 0.1.99 | 分词器 |
# 安装 MooER 推理代码
git clone https://github.com/MooreThreads/MooER.git /tmp/MooER
# 安装 CANN 昇腾驱动 (如未安装)
# 请参考华为官方 CANN 安装文档pip install -r requirements.txt# 下载 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由于 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下载所有权重文件后,完整的目录结构如下:
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 GB | ModelScope / HuggingFace |
paraformer-encoder.pth | ~80 MB | ModelScope 原始仓库 |
adapter_model.bin (ASR/AST/MTL) | ~617 MB each | ModelScope 原始仓库 |
# 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 官方源码,默认路径为 /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# 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# 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_path | test_audio.wav | 输入音频路径 (16kHz) |
--task | asr | 任务类型: asr 或 ast |
--encoder_path | model/paraformer_encoder/paraformer-encoder.pth | 编码器权重路径 |
--cmvn_path | model/paraformer_encoder/am.mvn | CMVN 归一化文件路径 |
--llm_path | model/Qwen2-7B-Instruct | Qwen2 模型路径 |
--adapter_path | model/asr/adapter_project.pt | 投影层权重路径 |
--lora_dir | model/asr/lora_weights | LoRA 权重目录 |
--device | auto | 推理设备: 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.wavimport 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 适配:
torch.npu 设备支持: 通过 torch.npu.is_available() 自动检测 NPU 设备,支持 auto/cpu/npu 三种设备选择模式torch.npu.synchronize() 确保准确计时compare_cpu_npu.py 对比 CPU 和 NPU 编码器输出差异,验证 NPU 推理精度model.to(device) 将整个模型搬运至 NPU.to(device) 移至 NPU运行 compare_cpu_npu.py 可对比 CPU 和 NPU 推理精度:
# CPU 和 NPU 精度对比
python compare_cpu_npu.py脚本会自动完成以下对比指标并保存至 precision_result.json:
预期结果:余弦相似度 > 0.999,平均相对误差 < 1% (PASS)
以下为测试环境 (Ascend 910B, 32GB) 上的推理性能参考值:
| 阶段 | CPU | NPU (910B) |
|---|---|---|
| 编码器推理 | ~800ms | ~50ms |
| LLM 生成 (200 tokens) | ~30s | ~2-3s |
| 总推理 (5s 音频) | ~35s | ~3s |
注:实际性能取决于音频长度、NPU 型号、CANN 版本及系统负载。
| 文件 | 大小 | 说明 |
|---|---|---|
inference.py | 6 KB | 昇腾 NPU 推理脚本 |
compare_cpu_npu.py | 5 KB | CPU/NPU 精度对比脚本 |
README.md | - | 本文件 |
requirements.txt | 169 B | Python 依赖 |
test_audio.wav | 128 KB | 测试音频 (16kHz) |
model/configuration.json | 56 B | 模型配置 |
model/LICENSE | 8.7 KB | 许可证 |
model/paraformer_encoder/am.mvn | 11 KB | CMVN 归一化参数 |
model/asr/adapter_project.pt | 37 MB | ASR 投影层权重 |
model/asr/lora_weights/adapter_config.json | 542 B | ASR LoRA 配置 |
model/ast/adapter_project.pt | 37 MB | AST 投影层权重 |
model/ast/lora_weights/adapter_config.json | 542 B | AST LoRA 配置 |
model/asr_ast_mtl/adapter_project.pt | 37 MB | 多任务投影层权重 |
model/asr_ast_mtl/lora_weights/adapter_config.json | 542 B | 多任务 LoRA 配置 |
model/Qwen2-7B-Instruct/ | - | 基座模型占位说明 |
model/assets/ | 330 KB | Logo 与架构图 |
| 文件 | 大小 | 说明 |
|---|---|---|
model/paraformer_encoder/paraformer-encoder.pth | ~80 MB | 编码器权重 |
model/asr/lora_weights/adapter_model.bin | ~617 MB | ASR LoRA 权重 |
model/ast/lora_weights/adapter_model.bin | ~617 MB | AST LoRA 权重 |
model/asr_ast_mtl/lora_weights/adapter_model.bin | ~617 MB | 多任务 LoRA 权重 |
model/Qwen2-7B-Instruct/ (完整目录) | ~15 GB | Qwen2 基座模型 |
#+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 上推理成功。