本文档记录 Qwen3-ASR-0.6B 在 vLLM-Ascend 0.18.0rc1 环境的快速部署与验证结果。
Qwen3-ASR-0.6B 是阿里云通义千问团队开源的自动语音识别(ASR)模型,支持 30 种语言和 22 种中文方言的语音识别与语言识别。该模型采用音频编码器 + Qwen3 文本解码器的编码器-解码器架构,总参数量约 0.6B。
本文档验证的要点:
相关获取地址:
quay.io/ascend/vllm-ascend:v0.18.0rc1| 组件 | 版本 |
|---|---|
vllm-ascend | 0.18.0rc1 |
vllm | 0.18.0+empty |
transformers | 4.57.6 |
torch-npu | 2.9.0.post1+gitee7ba04 |
qwen-asr | 0.0.6 |
2 逻辑卡(Ascend910)/opt/atomgit/QwenASR/modelsQwen3ASRForConditionalGeneration(音频编码器 + Qwen3 文本解码器)# 克隆 qwen-asr 源码并安装
pip install -e . --no-build-isolation --no-deps
# 若遇到 nagisa / soynlp 缺失,可安装提供的占位模块
# 这两个依赖仅用于强制对齐器(Forced Aligner),不影响 ASR 核心功能当前 vllm-ascend 0.18.0rc1 与 qwen-asr 0.0.6 的 vLLM 后端存在以下接口差异,需在模型加载前应用运行时补丁(已提供 npu_patch.py):
AscendMMEncoderAttention.__init__ 缺少 multimodal_config 参数get_vit_attn_backend 缺少 attn_backend_override 参数SupportsMultiModal._embed_text_input_ids 缺少 handle_oov_mm_token 参数补丁使用方式:
import npu_patch # 在 import qwen_asr 之前导入
from qwen_asr import Qwen3ASRModelimport 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)export ASCEND_RT_VISIBLE_DEVICES=0
python inference.py --audio /path/to/audio.wav --language Chinese使用提供的测试音频进行基础验证:
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 成功注册并加载测试条件:单条音频、单卡 NPU、无并发。
| 音频 | 时长 | CPU 耗时 | NPU 耗时 | 加速比 |
|---|---|---|---|---|
asr_zh.wav | ~4.2s | 9.49s | 5.12s | 1.85x |
asr_en.wav | ~68s | 41.59s | 6.51s | 6.38x |
说明:
使用相同音频样本分别通过 CPU(transformers 后端)和 NPU(vLLM 后端)推理,对比输出文本差异。
| 后端 | 识别结果 |
|---|---|
| CPU | 甚至出现交易几乎停滞的情况。 |
| NPU | 甚至出现交易几乎停滞的情况。 |
| 差异 | 完全一致 |
| 后端 | 识别结果 |
|---|---|
| CPU | Hmm. Oh yeah, yeah. He wasn't even... |
| NPU | Mhm. Oh yeah, yeah. He wasn't even... |
| 差异 | 仅首词 Hmm vs Mhm,其余完全一致 |
| 指标 | 数值 |
|---|---|
| 文本相似度 | 98.92% |
| 精度差距 | 1.08% |
| 差异类型 | 语气词/填充词(filler word)识别差异 |
结论:NPU 与 CPU 推理结果高度一致,差异仅为语气词层面的浮点误差,不影响语义理解。
vllm-ascend 接口兼容性:当前 qwen-asr 0.0.6 的 vLLM 后端基于较新的 vLLM 接口编写,与 vllm-ascend 0.18.0rc1 存在少量 API 差异,需通过 npu_patch.py 运行时补丁解决。
ACL Graph 编译:首次加载模型时,ACL Graph 编译和预热约需 30-60 秒,后续推理复用编译缓存。
音频格式:输入音频应为 16kHz 采样率的 WAV 格式。模型内置音频处理器会自动处理采样率转换。
显存占用:单卡加载 Qwen3-ASR-0.6B 约占用 1.5GB 权重 + KV Cache,建议 gpu_memory_utilization 设置在 0.8~0.9。
多卡推理:当前验证为单卡场景。如需多卡张量并行,可设置 tensor_parallel_size=2 并调整 ASCEND_RT_VISIBLE_DEVICES。
| 文件 | 说明 |
|---|---|
README.md | 本适配文档 |
inference.py | NPU 推理脚本(vLLM 后端) |
test_asr.py | CPU/NPU 精度对比测试脚本 |
npu_patch.py | vllm-ascend 兼容性运行时补丁 |
test_data/ | 测试音频样本 |