概述

简介

Qwen3-ASR 系列包括 Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B,支持 52 种语言和方言语言识别与语音识别(ASR)。两者均利用大规模语音训练数据以及其基础模型 Qwen3-Omni 强大的音频理解能力。实验表明,1.7B 版本在开源 ASR 模型中达到业界领先水平,并可与最强的商业闭源 API 相媲美。主要特性如下:

一体化:Qwen3-ASR-1.7B 和 Qwen3-ASR-0.6B 支持 30 种语言和 22 种中文方言的语言识别与语音识别,同时涵盖来自多个国家和地区的英语口音。

卓越且高效:Qwen3-ASR 系列模型在复杂声学环境和具有挑战性的文本模式下仍能保持高质量、鲁棒的识别效果。Qwen3-ASR-1.7B 在开源和内部基准测试中均表现出色;而 0.6B 版本则在精度与效率之间取得良好平衡,在并发数为 128 时吞吐量可达 2000 倍。两者均支持单模型统一进行流式/离线推理,并可处理长音频转录。

新颖且强大的强制对齐方案:我们推出了 Qwen3-ForcedAligner-0.6B,支持对最多 5 分钟的语音在 11 种语言中任意单元进行时间戳预测。评估显示,其时间戳精度超越了基于端到端(E2E)的强制对齐模型。

全面的推理工具包:除了开源 Qwen3-ASR 系列的架构和权重外,我们还发布了一个功能强大、特性完备的推理框架,支持基于 vLLM 的批处理推理、异步服务、流式推理、时间戳预测等功能。

模型架构

已发布模型说明与下载

以下是 Qwen3-ASR 模型的介绍及下载信息,请根据需求选择并下载合适的模型。

模型 支持的语言 支持的方言 推理模式 音频类型
Qwen3-ASR-1.7B & Qwen3-ASR-0.6B 中文 (zh)、英文 (en)、粤语 (yue)、阿拉伯语 (ar)、德语 (de)、法语 (fr)、西班牙语 (es)、葡萄牙语 (pt)、印尼语 (id)、意大利语 (it)、韩语 (ko)、俄语 (ru)、泰语 (th)、越南语 (vi)、日语 (ja)、土耳其语 (tr)、印地语 (hi)、马来语 (ms)、荷兰语 (nl)、瑞典语 (sv)、丹麦语 (da)、芬兰语 (fi)、波兰语 (pl)、捷克语 (cs)、菲律宾语 (fil)、波斯语 (fa)、希腊语 (el)、匈牙利语 (hu)、马其顿语 (mk)、罗马尼亚语 (ro) 安徽、东北、福建、甘肃、贵州、河北、河南、湖北、湖南、江西、宁夏、山东、陕西、山西、四川、天津、云南、浙江、粤语(香港口音)、粤语(广东口音)、吴语、闽南语 离线 / 流式 语音、歌声、带背景音乐的歌曲
Qwen3-ForcedAligner-0.6B 中文、英文、粤语、法语、德语、意大利语、日语、韩语、葡萄牙语、俄语、西班牙语 -- NAR 语音

在 qwen-asr 包或 vLLM 中加载模型时,会根据模型名称自动下载模型权重。但若您的运行环境不允许在执行过程中下载权重,可使用以下命令手动将模型权重下载至本地目录:

# Download through ModelScope (recommended for users in Mainland China)
pip install -U modelscope
modelscope download --model Qwen/Qwen3-ASR-1.7B  --local_dir ./Qwen3-ASR-1.7B
modelscope download --model Qwen/Qwen3-ASR-0.6B --local_dir ./Qwen3-ASR-0.6B
modelscope download --model Qwen/Qwen3-ForcedAligner-0.6B --local_dir ./Qwen3-ForcedAligner-0.6B
# Download through Hugging Face
pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-ASR-1.7B --local-dir ./Qwen3-ASR-1.7B
huggingface-cli download Qwen/Qwen3-ASR-0.6B --local-dir ./Qwen3-ASR-0.6B
huggingface-cli download Qwen/Qwen3-ForcedAligner-0.6B --local-dir ./Qwen3-ForcedAligner-0.6B

快速开始

环境配置

使用 Qwen3-ASR 最简单的方法是从 PyPI 安装 qwen-asr Python 包。这将自动安装所需的运行时依赖项,并允许您加载任意已发布的 Qwen3-ASR 模型。如果您希望进一步简化环境配置,也可以使用我们的官方 Docker 镜像qwen-asr 包提供两种后端:transformers 后端和 vLLM 后端。不同后端的使用说明请参见 Python 包使用方法。我们建议使用全新的、隔离的环境,以避免与现有包发生依赖冲突。您可以按如下方式创建一个干净的 Python 3.12 环境:

conda create -n qwen3-asr python=3.12 -y
conda activate qwen3-asr

运行以下命令以最小化安装并启用 transformers 后端支持:

pip install -U qwen-asr

若要启用 vLLM 后端以获得更快的推理速度和流式支持,请运行:

pip install -U qwen-asr[vllm]

如果您希望在本地开发或修改代码,请以可编辑模式从源码安装:

git clone https://github.com/QwenLM/Qwen3-ASR.git
cd Qwen3-ASR
pip install -e .
# support vLLM backend
# pip install -e ".[vllm]"

此外,我们推荐使用 FlashAttention 2 来减少 GPU 显存占用并加速推理速度,尤其适用于长输入和大批量场景。

pip install -U flash-attn --no-build-isolation

如果您的机器内存小于 96GB 且拥有大量 CPU 核心,请运行:

MAX_JOBS=4 pip install -U flash-attn --no-build-isolation

此外,您还需要具备与 FlashAttention 2 兼容的硬件。更多相关信息请参阅 FlashAttention 仓库 的官方文档。只有当模型以 torch.float16 或 torch.bfloat16 格式加载时,才能使用 FlashAttention 2。

Python 包使用方法

快速推理

qwen-asr 包提供了两个后端:transformers 后端 和 vLLM 后端。您可以将音频输入作为本地路径、URL、base64 数据或 (np.ndarray, sr) 元组传入,并执行批量推理。若要快速尝试 Qwen3-ASR,可以使用以下代码通过 transformers 后端调用 Qwen3ASRModel.from_pretrained(...)

import torch
from qwen_asr import Qwen3ASRModel

model = Qwen3ASRModel.from_pretrained(
    "Qwen/Qwen3-ASR-1.7B",
    dtype=torch.bfloat16,
    device_map="cuda:0",
    # attn_implementation="flash_attention_2",
    max_inference_batch_size=32, # Batch size limit for inference. -1 means unlimited. Smaller values can help avoid OOM.
    max_new_tokens=256, # Maximum number of tokens to generate. Set a larger value for long audio input.
)

results = model.transcribe(
    audio="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav",
    language=None, # set "English" to force the language
)

print(results[0].language)
print(results[0].text)

如果您希望返回时间戳,请传入 forced_aligner 及其初始化参数。以下是带时间戳输出的批量推理示例:

import torch
from qwen_asr import Qwen3ASRModel

model = Qwen3ASRModel.from_pretrained(
    "Qwen/Qwen3-ASR-1.7B",
    dtype=torch.bfloat16,
    device_map="cuda:0",
    # attn_implementation="flash_attention_2",
    max_inference_batch_size=32, # Batch size limit for inference. -1 means unlimited. Smaller values can help avoid OOM.
    max_new_tokens=256, # Maximum number of tokens to generate. Set a larger value for long audio input.
    forced_aligner="Qwen/Qwen3-ForcedAligner-0.6B",
    forced_aligner_kwargs=dict(
        dtype=torch.bfloat16,
        device_map="cuda:0",
        # attn_implementation="flash_attention_2",
    ),
)

results = model.transcribe(
    audio=[
      "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_zh.wav",
      "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav",
    ],
    language=["Chinese", "English"], # can also be set to None for automatic language detection
    return_time_stamps=True,
)

for r in results:
    print(r.language, r.text, r.time_stamps[0])

更多详细用法示例,请参考 transformers 后端的 示例代码

vLLM 后端

如果您希望获得 Qwen3-ASR 最快的推理速度,我们强烈推荐使用 vLLM 后端,通过 Qwen3ASRModel.LLM(...) 初始化模型。下方提供了示例代码。请注意,您必须通过 pip install -U qwen-asr[vllm] 安装该后端。如果您希望模型输出时间戳,建议通过 pip install -U flash-attn --no-build-isolation 安装 FlashAttention,以加速 forced aligner 模型的推理。请记得将您的代码包裹在 if __name__ == '__main__': 之下,以避免 vLLM 故障排除 中描述的 spawn 错误。

import torch
from qwen_asr import Qwen3ASRModel

if __name__ == '__main__':
    model = Qwen3ASRModel.LLM(
        model="Qwen/Qwen3-ASR-1.7B",
        gpu_memory_utilization=0.7,
        max_inference_batch_size=128, # Batch size limit for inference. -1 means unlimited. Smaller values can help avoid OOM.
        max_new_tokens=4096, # Maximum number of tokens to generate. Set a larger value for long audio input.
        forced_aligner="Qwen/Qwen3-ForcedAligner-0.6B",
        forced_aligner_kwargs=dict(
            dtype=torch.bfloat16,
            device_map="cuda:0",
            # attn_implementation="flash_attention_2",
        ),
    )

    results = model.transcribe(
        audio=[
        "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_zh.wav",
        "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav",
        ],
        language=["Chinese", "English"], # can also be set to None for automatic language detection
        return_time_stamps=True,
    )

    for r in results:
        print(r.language, r.text, r.time_stamps[0])

更多详细用法示例,请参考 vLLM 后端的 示例代码。此外,您还可以通过 qwen-asr-serve 命令启动一个 vLLM 服务器,该命令是对 vllm serve 的封装。您可以传入 vllm serve 支持的任意参数,例如:

qwen-asr-serve Qwen/Qwen3-ASR-1.7B --gpu-memory-utilization 0.8 --host 0.0.0.0 --port 8000

并通过以下方式向服务器发送请求:

import requests

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}

data = {
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "audio_url",
                    "audio_url": {
                        "url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav"
                    },
                }
            ],
        }
    ]
}

response = requests.post(url, headers=headers, json=data, timeout=300)
response.raise_for_status()
content = response.json()['choices'][0]['message']['content']
print(content)

# parse ASR output if you want
from qwen_asr import parse_asr_output
language, text = parse_asr_output(content)
print(language)
print(text)
流式推理

Qwen3-ASR 完全支持流式推理。目前,流式推理仅在 vLLM 后端中可用。请注意,流式推理不支持批量推理或返回时间戳。详情请参考 示例代码。您也可以通过 指南 启动一个流式 Web 演示,体验 Qwen3-ASR 的流式转录功能。

ForcedAligner 使用方法

Qwen3-ForcedAligner-0.6B 可对齐文本与语音对,并返回词级或字符级的时间戳。以下是直接使用 forced aligner 的示例:

import torch
from qwen_asr import Qwen3ForcedAligner

model = Qwen3ForcedAligner.from_pretrained(
    "Qwen/Qwen3-ForcedAligner-0.6B",
    dtype=torch.bfloat16,
    device_map="cuda:0",
    # attn_implementation="flash_attention_2",
)

results = model.align(
    audio="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_zh.wav",
    text="甚至出现交易几乎停滞的情况。",
    language="Chinese",
)

print(results[0])
print(results[0][0].text, results[0][0].start_time, results[0][0].end_time)

此外,forced aligner 支持本地路径 / URL / base64 数据 / (np.ndarray, sr) 输入以及批量推理。详情请参考 示例代码

DashScope API 使用方法

为了进一步探索 Qwen3-ASR,我们鼓励您尝试我们的 DashScope API,以获得更快、更高效的体验。详细的 API 信息和文档请参考以下内容:

API 描述 API 文档(中国大陆) API 文档(国际版)
Qwen3-ASR 实时 API。 将音频流实时转化为文字-实时语音识别-通义千问-大模型服务平台百炼-阿里云-大模型服务平台百炼(Model Studio)-阿里云帮助中心 Build Real-Time Speech Recognition with WebSocket & DashScope SDK - Alibaba Cloud Model Studio - Alibaba Cloud - Alibaba Cloud Model Studio - Alibaba Cloud Documentation Center
Qwen3-ASR 文件转写 API。 非实时语音识别-大模型服务平台百炼(Model Studio)-阿里云帮助中心 Non-real-time speech recognition - Alibaba Cloud Model Studio - Alibaba Cloud Documentation Center

启动本地 Web UI 演示

Gradio 演示

要启动 Qwen3-ASR 的 Web UI Gradio 演示,请先安装 qwen-asr 包,然后运行 qwen-asr-demo。使用以下命令获取帮助:

qwen-asr-demo --help

要启动演示,可使用以下命令:

# Transformers backend
qwen-asr-demo \
  --asr-checkpoint Qwen/Qwen3-ASR-1.7B \
  --backend transformers \
  --cuda-visible-devices 0 \
  --ip 0.0.0.0 --port 8000

# Transformers backend + Forced Aligner (enable timestamps)
qwen-asr-demo \
  --asr-checkpoint Qwen/Qwen3-ASR-1.7B \
  --aligner-checkpoint Qwen/Qwen3-ForcedAligner-0.6B \
  --backend transformers \
  --cuda-visible-devices 0 \
  --backend-kwargs '{"device_map":"cuda:0","dtype":"bfloat16","max_inference_batch_size":8,"max_new_tokens":256}' \
  --aligner-kwargs '{"device_map":"cuda:0","dtype":"bfloat16"}' \
  --ip 0.0.0.0 --port 8000

# vLLM backend + Forced Aligner (enable timestamps)
qwen-asr-demo \
  --asr-checkpoint Qwen/Qwen3-ASR-1.7B \
  --aligner-checkpoint Qwen/Qwen3-ForcedAligner-0.6B \
  --backend vllm \
  --cuda-visible-devices 0 \
  --backend-kwargs '{"gpu_memory_utilization":0.7,"max_inference_batch_size":8,"max_new_tokens":2048}' \
  --aligner-kwargs '{"device_map":"cuda:0","dtype":"bfloat16"}' \
  --ip 0.0.0.0 --port 8000

然后打开 http://<your-ip>:8000,或通过 VS Code 等工具的端口转发进行访问。

后端说明

此演示支持两个后端:transformers 和 vLLM。所有特定于后端的初始化参数都应通过 --backend-kwargs 以 JSON 字典形式传入。如果未提供,演示将使用合理的默认值。

# Example: override transformers init args without flash attention
--backend-kwargs '{"device_map":"cuda:0","dtype":"bfloat16"}'

# Example: override vLLM init args with 65% GPU memory
--backend-kwargs '{"gpu_memory_utilization":0.65}'
CUDA 设备说明

由于 vLLM 不遵循 cuda:0 风格的设备选择方式,本演示通过 --cuda-visible-devices 设置 CUDA_VISIBLE_DEVICES 来选择 GPU。

# Use GPU 0
--cuda-visible-devices 0

# Use GPU 1
--cuda-visible-devices 1
时间戳说明

仅当提供了 --aligner-checkpoint 时,才会启用时间戳功能。如果您在未指定 forced aligner 的情况下启动演示,时间戳 UI 将自动隐藏。

# No forced aligner
qwen-asr-demo --asr-checkpoint Qwen/Qwen3-ASR-1.7B

# With forced aligner
qwen-asr-demo \
  --asr-checkpoint Qwen/Qwen3-ASR-1.7B \
  --aligner-checkpoint Qwen/Qwen3-ForcedAligner-0.6B
HTTPS 说明

为避免部署服务器后出现浏览器麦克风权限问题,建议/要求通过 HTTPS 运行 Gradio 服务(尤其是在远程访问或使用现代浏览器/网关时)。使用 --ssl-certfile 和 --ssl-keyfile 启用 HTTPS。首先,生成一个私钥和一个自签名证书(有效期为 365 天):

openssl req -x509 -newkey rsa:2048 \
  -keyout key.pem -out cert.pem \
  -days 365 -nodes \
  -subj "/CN=localhost"

然后使用 HTTPS 运行演示:

qwen-asr-demo \
  --asr-checkpoint Qwen/Qwen3-ASR-1.7B \
  --backend transformers \
  --cuda-visible-devices 0 \
  --ip 0.0.0.0 --port 8000 \
  --ssl-certfile cert.pem \
  --ssl-keyfile key.pem \
  --no-ssl-verify

接着打开 https://<your-ip>:8000 即可使用。如果你的浏览器显示警告,这是自签名证书的正常现象。在生产环境中,请使用正式证书。

流式演示

为了在 Web 界面中体验 Qwen3-ASR 的流式转录能力,我们提供了一个基于 Flask 的最小化流式演示。该演示在浏览器中捕获麦克风音频,将其重采样至 16,000 Hz,并持续将 PCM 数据块推送给模型。使用以下命令运行演示:

qwen-asr-demo-streaming \
  --asr-model-path Qwen/Qwen3-ASR-1.7B \
  --host 0.0.0.0 \
  --port 8000 \
  --gpu-memory-utilization 0.9

然后打开 http://<your-ip>:8000,或通过 VS Code 等工具的端口转发功能进行访问。

使用 vLLM 部署

vLLM 官方为 Qwen3-ASR 提供了开箱即用的模型支持,以实现高效推理。

安装

你可以使用 vLLM 的 nightly 版本 wheel 包或 Docker 镜像来运行 Qwen3-ASR。要安装 vLLM 的 nightly 版本,我们推荐使用 uv 作为环境管理器:

uv venv
source .venv/bin/activate
uv pip install -U vllm --pre \
    --extra-index-url https://wheels.vllm.ai/nightly/cu129 \
    --extra-index-url https://download.pytorch.org/whl/cu129 \
    --index-strategy unsafe-best-match
uv pip install "vllm[audio]" # For additional audio dependencies

在线服务

你可以通过运行以下命令轻松使用 vLLM 部署 Qwen3-ASR:

VLLM_USE_MODELSCOPE=true vllm serve Qwen/Qwen3-ASR-1.7B

模型服务器成功部署后,你可以通过多种方式与其交互。

使用 OpenAI SDK
import base64
import httpx
from openai import OpenAI

# Initialize client
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"
)

# Create multimodal chat completion request
response = client.chat.completions.create(
    model="Qwen/Qwen3-ASR-1.7B",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "audio_url",
                    "audio_url": {
                        {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav"}
                    }
                }
            ]
        }
    ],
)

print(response.choices[0].message.content)

该模型也支持通过 vLLM 的 OpenAI 转录 API 使用。

import httpx
from openai import OpenAI

# Initialize client
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="EMPTY"
)
audio_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav"
audio_file = httpx.get(audio_url).content

transcription = client.audio.transcriptions.create(
    model="Qwen/Qwen3-ASR-1.7B",
    file=audio_file,
)

print(transcription.text)
使用 cURL
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
    "messages": [
    {"role": "user", "content": [
        {"type": "audio_url", "audio_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-ASR-Repo/asr_en.wav"}}
    ]}
    ]
    }'

离线推理

参见以下使用 vLLM 对 Qwen3-ASR 进行离线推理的示例:

from vllm import LLM, SamplingParams
from vllm.assets.audio import AudioAsset
import base64
import requests

# Initialize the LLM
llm = LLM(
    model="Qwen/Qwen3-ASR-1.7B"
)

# Load audio
audio_asset = AudioAsset("winning_call")

# Create conversation with audio content
conversation = [
    {
        "role": "user",
        "content": [
            {
                "type": "audio_url",
                "audio_url": {"url": audio_asset.url}
            }
        ]
    }
]

sampling_params = SamplingParams(temperature=0.01, max_tokens=256)

# Run inference using .chat()
outputs = llm.chat(conversation, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)

Docker

为了更方便地使用我们的 qwen-asr Python 包,我们提供了预构建的 Docker 镜像:qwenllm/qwen3-asr。你只需安装 GPU 驱动并下载模型文件即可运行代码。请遵循 NVIDIA Container Toolkit 安装指南,确保 Docker 能够访问你的 GPU。如果你在中国大陆且无法顺利访问 Docker Hub,可以使用镜像加速器来加快镜像拉取速度。

首先,拉取镜像并启动容器:

LOCAL_WORKDIR=/path/to/your/workspace
HOST_PORT=8000
CONTAINER_PORT=80
docker run --gpus all --name qwen3-asr \
    -v /var/run/docker.sock:/var/run/docker.sock -p $HOST_PORT:$CONTAINER_PORT \
    --mount type=bind,source=$LOCAL_WORKDIR,target=/data/shared/Qwen3-ASR \
    --shm-size=4gb \
    -it qwenllm/qwen3-asr:latest

执行命令后,你将进入容器的 bash shell。你的本地工作目录( /path/to/your/workspace 替换为实际路径)将挂载到容器内的 /data/shared/Qwen3-ASR 路径下。主机的 8000 端口被映射到容器的 80 端口,因此你可以通过 http://<host-ip>:8000 访问容器内运行的服务。注意,容器内的服务必须绑定到 0.0.0.0(而非 127.0.0.1),端口转发才能生效。

如果你退出了容器,可以再次启动并重新进入:

docker start qwen3-asr
docker exec -it qwen3-asr bash

若要彻底删除容器,请运行:

docker rm -f qwen3-asr

评估

在评估过程中,我们使用 dtype=torch.bfloat16 对所有模型进行了推理,并通过 vLLM 设置 max_new_tokens=1024。所有解码均采用贪心搜索策略,且所有测试均未指定语言参数。详细的评估结果如下所示。

公开数据集上的 ASR 基准测试(WER ↓)

内部数据集上的 ASR 基准测试(WER ↓)

多语言 ASR 基准测试(WER ↓)

语种识别准确率 (%) ↑

歌声与歌曲转录(WER ↓)

ASR 推理模式性能(WER ↓)

强制对齐基准(AAS 毫秒 ↓)

转自:Qwen3-ASR-1.7B

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐