本文档记录 Qwen3-ASR-0.6B 在 Ascend910 NPU 上的适配、推理验证与性能调优结果。
Qwen3-ASR-0.6B 是一个基于 Qwen3-Omni 的语音识别(ASR)模型,支持 30 种语言和 22 种中文方言的语言识别与语音转文字。模型架构包含:
适配目标:
| 属性 | 值 |
|---|---|
| 模型名称 | Qwen/Qwen3-ASR-0.6B |
| 模型大小 | 6.7 亿参数 (~1.75GB) |
| 支持语言 | 30 种(中、英、粤、日、韩、法、德等) |
| 推理方式 | Offline / Streaming |
| 输入类型 | 16kHz mono 音频 |
| 原始框架 | PyTorch + transformers |
| 组件 | 规格 |
|---|---|
| NPU | Ascend910B (64GB HBM) × 2 逻辑卡 |
| CPU | ARM 架构 |
| 内存 | 不低于 32GB |
| 组件 | 版本 |
|---|---|
Python | 3.11.14 |
torch | 2.9.0 |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
qwen-asr | 0.0.6 |
vllm | 0.18.0+empty |
vllm-ascend | 0.18.0rc1 |
accelerate | 1.12.0 |
librosa | 0.10.0+ |
soundfile | 0.12.0+ |
# 安装依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install torch_npu torchvision_npu
pip install transformers accelerate librosa soundfile
pip install qwen-asr支持从 ModelScope(国内推荐)或 HuggingFace 下载:
# 通过 ModelScope(国内推荐)
pip install -U modelscope
modelscope download --model Qwen/Qwen3-ASR-0.6B --local_dir ./Qwen3-ASR-0.6B
# 通过 Hugging Face
pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-ASR-0.6B --local-dir ./Qwen3-ASR-0.6B在 NPU 上运行 Qwen3-ASR 的关键在于:
device_map="npu:0" 或手动将模型 .to("npu:0")torch.bfloat16(NPU 原生支持,无精度损失)qwen-asr 包自动将 Qwen3ASRForConditionalGeneration 注册到 transformersimport torch
import torch_npu
from qwen_asr import Qwen3ASRModel
# 加载模型(自动注册 + NPU 部署)
model = Qwen3ASRModel.from_pretrained(
"Qwen/Qwen3-ASR-0.6B", # 或本地路径
dtype=torch.bfloat16,
device_map="npu:0", # 关键:映射到 NPU
max_inference_batch_size=32,
max_new_tokens=256,
)
# 单文件推理
results = model.transcribe(
audio="audio.wav",
language="Chinese", # 可选:语言提示
)
print(results[0].language) # 检测到的语言
print(results[0].text) # 识别文本# 单文件推理(英文自动检测)
python scripts/inference.py --audio assets/asr_en_sample.wav
# 单文件推理(指定语言)
python scripts/inference.py --audio assets/asr_zh_sample.wav --language Chinese
# 批量推理
python scripts/inference.py --batch assets/asr_zh_sample.wav assets/asr_en_sample.wav
# 列出支持的语言
python scripts/inference.py --list-languagespython scripts/inference.py --audio assets/asr_zh_sample.wav --language Chinese输出示例:
Language : Chinese
Text : 甚至出现交易几乎停滞的情况。
Time : 5.009spython scripts/inference.py --audio assets/asr_en_sample.wav输出示例:
Language : English
Text : Hmm. Oh yeah, yeah. He wasn't even that big when I started listening to him...
Time : 36.891s验证结果:
使用相同音频在不同精度下进行转录对比:
| 对比组 | 设备 | 数据类型 |
|---|---|---|
| Baseline | NPU | float32 |
| 测试 | NPU | bfloat16 |
python scripts/accuracy_eval.py| 测试音频 | 语言 | float32 结果 | bfloat16 结果 | CER | WER |
|---|---|---|---|---|---|
| asr_zh_sample.wav | Chinese | 甚至出现交易几乎停滞的情况。 | 甚至出现交易几乎停滞的情况。 | 0.00% | 0.00% |
| asr_en_sample.wav | English | Hmm. Oh yeah, yeah... | Hmm. Oh yeah, yeah... | 0.00% | 0.00% |
| 平均 | 0.00% | 0.00% |
结论:bfloat16 与 float32 的推理结果完全一致,CER/WER 均为 0.00%,远优于 < 1% 的要求。
精度保障说明:
qwen-asr 的 transformers 后端使用 eager attention,计算确定性高| 参数 | 值 |
|---|---|
| NPU | Ascend910 (单卡) |
| 数据类型 | bfloat16 |
| 预热轮数 | 1 |
| 测试轮数 | 3(取平均值) |
| max_new_tokens | 512 |
| max_inference_batch_size | 64 |
python scripts/perf_eval.py --warmup 1 --runs 3| 音频 | 时长(s) | 文件大小 | 平均延迟(ms) | 中位延迟(ms) | RTF | 吞吐量 |
|---|---|---|---|---|---|---|
| asr_zh_sample.wav | 4.20 | 131KB | 1162 | 1175 | 0.28x | 0.86 files/s |
| asr_en_sample.wav | 15.05 | 2121KB | 6467 | 5188 | 0.43x | 0.15 files/s |
RTF (Real-Time Factor):
--max-batch-size 64 充分利用 NPU 并行能力┌──────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ 音频输入 │────▶│ Audio Preprocess │────▶│ Qwen3-ASR-0.6B │
│ (WAV/URL) │ │ (16kHz mono) │ │ (Ascend910 NPU) │
└──────────────┘ └─────────────────┘ └────────┬─────────┘
│
▼
┌──────────────┐ ┌─────────────────┐ ┌──────────────────┐
│ 转录结果 │◀────│ Post-process │◀────│ 文本解码 │
│ (JSON/Text) │ │ (CER/语言过滤) │ │ (Qwen3 Decoder) │
└──────────────┘ └─────────────────┘ └──────────────────┘accelerate 时需确认支持 NPU 设备映射device_map 不生效,可使用 model.to("npu:0") 手动移动(np.ndarray, sr) 元组max_inference_batch_size 参数NPU_DEVICE 环境变量指定使用的 NPU 卡号# NPU 配置
export NPU_DEVICE=0 # 使用 NPU 设备索引
export ASCEND_RT_VISIBLE_DEVICES=0 # 可见 NPU 设备
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:TrueQwen3-ASR-0.6B-NPU/
├── README.md # 本调优文档
├── assets/ # 测试音频
│ ├── asr_zh_sample.wav # 中文测试音频
│ └── asr_en_sample.wav # 英文测试音频
├── scripts/
│ ├── inference.py # NPU 推理脚本
│ ├── accuracy_eval.py # 精度评测脚本
│ ├── perf_eval.py # 性能评测脚本
│ └── gen_test_audio.py # 合成测试音频
├── results/
│ ├── perf_results.json # 性能测试结果
│ └── accuracy_report.json # 精度评测报告
└── logs/ # 运行日志