Qwen3-ASR-1.7B#
1 引言#
Qwen3-ASR-1.7B 是 Qwen 团队推出的 1.7B 参数自动语音识别(ASR)模型。它支持中英文语音、中文方言、多语言语音及歌声转录,并提供长音频和流式推理能力。
本文档描述了 Qwen3-ASR-1.7B 在昇腾 NPU 上支持的特性、环境准备、单节点部署、功能验证及评估流程。
Qwen3-ASR-1.7B 随上游 vLLM v0.19.0 版本引入。请使用与 vLLM 版本匹配的 vLLM-Ascend 镜像,并参考支持矩阵了解当前发布状态。
2 支持的特性#
请参考支持特性列表了解模型支持矩阵。
请参考特性指南了解特性配置信息。
3 前提条件#
3.1 模型权重#
BF16模型可以使用一个Ascend 910B 64 GB NPU或一个Ascend Atlas 300I DUO 48 GB NPU进行部署。从ModelScope下载模型权重。
将权重下载到部署环境可访问的目录。对于多节点部署,请使用共享目录,例如 /root/.cache/。
4 安装#
4.1 Docker 镜像安装#
使用与硬件对应的 vLLM-Ascend Docker 镜像。将模型权重挂载路径替换为您环境中的路径。
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0
docker run --rm \
--name vllm-ascend \
--shm-size=1g \
--net host \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-it -d $IMAGE bash
export IMAGE=quay.io/ascend/vllm-ascend:v0.23.0-310p
docker run --rm \
--name vllm-ascend \
--shm-size=10g \
--net host \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64 \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-it -d $IMAGE bash
验证容器正在运行,且已安装的包版本与镜像标签匹配:
docker ps --filter name=vllm-ascend
pip show vllm vllm-ascend
预期结果:docker ps 列出状态为 Up 的容器,pip show 显示两个包的版本信息。
4.2 源码安装#
如果您希望从源码构建而非使用 Docker 镜像,请按照安装指南安装 vLLM-Ascend。
备注
对于Atlas 300I DUO,源码安装可能会引入triton和triton-ascend。在Atlas 300I DUO上运行vLLM-Ascend之前,请先卸载它们:
pip uninstall -y triton-ascend triton
验证源码安装:
pip show vllm-ascend
5 在线服务部署#
5.1 单节点在线部署#
单节点部署将音频预填充和解码运行在同一张 NPU 上,适用于开发、测试及小规模 ASR 服务。将 your_model_path 替换为本地模型目录,或使用 Qwen/Qwen3-ASR-1.7B 通过已配置的模型仓库下载模型。
vllm serve your_model_path \
--served-model-name qwen3-asr \
--tensor-parallel-size 1 \
--max-model-len 4096 \
--gpu-memory-utilization 0.9 \
--enforce-eager \
--port 8000
vllm serve your_model_path \
--served-model-name qwen3-asr \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--dtype float16 \
--max-model-len 4096 \
--additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false,"enable_npu_graph_ex":false}}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,4]}' \
--port 8000
关键参数说明:
--tensor-parallel-size 1使用一张 NPU。仅在确认硬件和部署拓扑支持所选并行配置后,再增加该值。--max-model-len 4096限制最大序列长度。在 Atlas 300I DUO 上,务必显式指定一个保守值;自动检测可能分配过大的注意力掩码并导致内存不足错误。--gpu-memory-utilization 0.9设置 vLLM 执行器可用的设备内存比例。如果其他工作负载共享 NPU,请降低此值。--enforce-eager禁用图执行。在 Atlas 300I A2 2UP 示例中用于兼容性。
服务启动成功后,日志中包含 Application startup complete。如果启动失败,请参阅公共 FAQ。
6 功能验证#
服务启动后,可通过发送提示词来调用模型。
聊天补全 API:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-asr",
"messages": [
{
"role": "user",
"content": [
{
"type": "audio_url",
"audio_url": {
"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav"
}
}
]
}
]
}'
将 localhost、8000 和 qwen3-asr 替换为部署所用的地址、端口和 --served-model-name。预期结果:HTTP 200 及包含转录文本的 JSON 响应(位于 choices 字段中)。
7 精度评估#
使用词错误率(WER)评估词级识别质量,使用字符错误率(CER)评估字符级识别质量。
8 性能评估#
使用代表生产工作负载的音频样本测量 ASR 服务性能。至少记录音频时长、请求并发数、端到端延迟、实时因子和吞吐量。这确保结果包含音频预处理、请求构建、API 通信、推理和响应解析。
实际性能因硬件、音频时长、并发数和部署配置而异。在选择生产配置前,请分别评估短音频、长音频和并发请求。
9 性能调优#
以下设置是起点而非全局最优配置。请根据音频时长、并发数、延迟要求和可用 NPU 内存进行调整。
场景 |
推荐起点 |
关键考量 |
|---|---|---|
低延迟 |
|
使用短音频输入,避免与其他工作负载共享 NPU。 |
高吞吐量 |
在建立延迟基线后增加请求并发数 |
监控NPU内存和端到端延迟;不要使用合成的纯文本请求作为ASR流量的代理。 |
长音频 |
仅在必要时增加 |
在Atlas 300I DUO上,请保持该值保守,因为注意力掩码内存会随配置的最大长度增长。 |
关于通用参数调优,请参考性能调优指南。
10 常见问题#
关于常见环境、安装和通用参数问题,请参阅公共FAQ。本节涵盖模型和硬件特定的指导。
Atlas 300I DUO在启动过程中内存不足#
症状: 服务器在初始化注意力机制时因内存不足错误而失败。
**原因:**在Atlas 300I DUO上,自动检测到的大上下文长度可能会生成完整的因果注意力掩码,其内存消耗随max_model_len呈二次方增长。
解决方案: 始终将--max-model-len显式设置为保守值(例如4096),并在验证可用NPU内存后才增加该值。