Nice_try/Qwen3-ASR-0.6B-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Qwen3-ASR-0.6B on vLLM-Ascend 0.18.0rc1

1. 简介

本文档记录 Qwen3-ASR-0.6B 在 vLLM-Ascend 0.18.0rc1 环境的快速部署与验证结果。

Qwen3-ASR-0.6B 是阿里云通义千问团队开源的自动语音识别(ASR)模型,支持 30 种语言和 22 种中文方言的语音识别与语言识别。该模型采用音频编码器 + Qwen3 文本解码器的编码器-解码器架构,总参数量约 0.6B。

本文档验证的要点:

  • 模型权重可通过 vLLM-Ascend 正常加载并运行 transcription 任务
  • 与 CPU transformers 后端推理结果对比,精度差异在可接受范围内
  • 针对 vllm-ascend 的若干接口差异提供了运行时兼容补丁

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/Qwen/Qwen3-ASR-0.6B
  • 权重下载地址(HuggingFace):https://huggingface.co/Qwen/Qwen3-ASR-0.6B
  • Docker Image (vLLM-Ascend 0.18.0rc1 ):quay.io/ascend/vllm-ascend:v0.18.0rc1

2. 验证环境

组件版本
vllm-ascend0.18.0rc1
vllm0.18.0+empty
transformers4.57.6
torch-npu2.9.0.post1+gitee7ba04
qwen-asr0.0.6
  • NPU:2 逻辑卡(Ascend910)
  • 模型路径:/opt/atomgit/QwenASR/models
  • 架构:Qwen3ASRForConditionalGeneration(音频编码器 + Qwen3 文本解码器)

3. 服务启动

3.1 环境准备

# 克隆 qwen-asr 源码并安装
pip install -e . --no-build-isolation --no-deps

# 若遇到 nagisa / soynlp 缺失,可安装提供的占位模块
# 这两个依赖仅用于强制对齐器(Forced Aligner),不影响 ASR 核心功能

3.2 兼容性补丁

当前 vllm-ascend 0.18.0rc1 与 qwen-asr 0.0.6 的 vLLM 后端存在以下接口差异,需在模型加载前应用运行时补丁(已提供 npu_patch.py):

  1. AscendMMEncoderAttention.__init__ 缺少 multimodal_config 参数
  2. get_vit_attn_backend 缺少 attn_backend_override 参数
  3. SupportsMultiModal._embed_text_input_ids 缺少 handle_oov_mm_token 参数

补丁使用方式:

import npu_patch  # 在 import qwen_asr 之前导入
from qwen_asr import Qwen3ASRModel

3.3 Python API 推理

import os
os.environ["ASCEND_RT_VISIBLE_DEVICES"] = "0"

import npu_patch
from qwen_asr import Qwen3ASRModel

asr = Qwen3ASRModel.LLM(
    model="/opt/atomgit/QwenASR/models",
    dtype="bfloat16",
    max_model_len=65536,
    max_num_seqs=4,
    trust_remote_code=True,
    gpu_memory_utilization=0.85,
)

results = asr.transcribe(
    audio="/path/to/audio.wav",
    language=None,
    return_time_stamps=False,
)
print(results[0].text)

3.4 命令行推理

export ASCEND_RT_VISIBLE_DEVICES=0
python inference.py --audio /path/to/audio.wav --language Chinese

4. Smoke 验证

使用提供的测试音频进行基础验证:

python test_asr.py --backend both --audio test_data/asr_zh.wav
python test_asr.py --backend both --audio test_data/asr_en.wav --language English

验证结果:

  • /v1/models 等效检查:Qwen3ASRForConditionalGeneration 成功注册并加载
  • transcription 返回正常文本
  • 中英文音频均可正确识别

5. 性能参考

测试条件:单条音频、单卡 NPU、无并发。

音频时长CPU 耗时NPU 耗时加速比
asr_zh.wav~4.2s9.49s5.12s1.85x
asr_en.wav~68s41.59s6.51s6.38x

说明:

  • 短音频(<5s)加速比约 1.8x,主要受模型加载/编译开销影响
  • 长音频(~68s)加速比约 6.4x,NPU 优势更明显
  • vLLM 的 PIECEWISE ACL Graph 编译在首次加载时约需 30s,后续推理复用缓存

6. 精度评测

使用相同音频样本分别通过 CPU(transformers 后端)和 NPU(vLLM 后端)推理,对比输出文本差异。

6.1 中文音频(asr_zh.wav)

后端识别结果
CPU甚至出现交易几乎停滞的情况。
NPU甚至出现交易几乎停滞的情况。
差异完全一致

6.2 英文音频(asr_en.wav)

后端识别结果
CPUHmm. Oh yeah, yeah. He wasn't even...
NPUMhm. Oh yeah, yeah. He wasn't even...
差异仅首词 Hmm vs Mhm,其余完全一致

6.3 精度差距统计

指标数值
文本相似度98.92%
精度差距1.08%
差异类型语气词/填充词(filler word)识别差异

结论:NPU 与 CPU 推理结果高度一致,差异仅为语气词层面的浮点误差,不影响语义理解。

7. 注意事项

  1. vllm-ascend 接口兼容性:当前 qwen-asr 0.0.6 的 vLLM 后端基于较新的 vLLM 接口编写,与 vllm-ascend 0.18.0rc1 存在少量 API 差异,需通过 npu_patch.py 运行时补丁解决。

  2. ACL Graph 编译:首次加载模型时,ACL Graph 编译和预热约需 30-60 秒,后续推理复用编译缓存。

  3. 音频格式:输入音频应为 16kHz 采样率的 WAV 格式。模型内置音频处理器会自动处理采样率转换。

  4. 显存占用:单卡加载 Qwen3-ASR-0.6B 约占用 1.5GB 权重 + KV Cache,建议 gpu_memory_utilization 设置在 0.8~0.9。

  5. 多卡推理:当前验证为单卡场景。如需多卡张量并行,可设置 tensor_parallel_size=2 并调整 ASCEND_RT_VISIBLE_DEVICES。

8. 文件说明

文件说明
README.md本适配文档
inference.pyNPU 推理脚本(vLLM 后端)
test_asr.pyCPU/NPU 精度对比测试脚本
npu_patch.pyvllm-ascend 兼容性运行时补丁
test_data/测试音频样本

9. 参考文档

  • https://github.com/QwenLM/Qwen3-ASR
  • https://docs.vllm.ai/projects/ascend/zh-cn/v0.18.0/
  • https://huggingface.co/Qwen/Qwen3-ASR-0.6B