本文档介绍在X86平台上,基于vLLM推理引擎进行Qwen3-omni- captioner模型的推理指导。
Qwen3-omni- captioner模型是基于 Qwen3-Omni-30B-A3B-Instruct 微调而来的下游音频细粒度字幕模型,能够为任意音频输入生成详细且低幻觉的字幕,在多说话人情感识别、环境音分层解析等任务上表现突出。 Qwen3-Omni-30B-A3B-Instruct包含thinker和talker两个部分,Thinker负责思考和推理的“大脑”,它处理复杂的跨模态信息,进行逻辑分析和规划。Talker负责生成回应的“嘴巴”,把 Thinker 的思考结果转化成流畅的文本或自然的语音。 而Qwen3-omni- captioner因为不需要音频输出,所以仅包含thinker模块。 Qwen3-omni- captioner专注音频输入(只支持音频输入,文本输出。),输出低幻觉的详细文字描述,适合音频理解与转写。
由于Qwen3-omni模型结构变化,当前vLLm主干版本还不支持,Qwen团队基于vLLM单独拉了分支版本进行构建。而在昇腾上运行Qwen3-omni模型,需要基于Qwen团队构建的vLLM分支版本进行修改、编译。
参考如下链接中的第一章节安装CANN、torch_npu、vllm版本及依赖库: https://ai.gitcode.com/Ascend-SACT/Qwen3-Omni-30B
执行如下命令下载模型权重 pip install modelscope modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Captioner --local_dir models/Qwen3-omni-captioner/
: source /usr/local/Ascend/ascend-toolkit/set_env.sh source /usr/local/Ascend/nnal/atb/set_env.sh export LD_LIBRARY_PATH=/usr/local/Ascend/driver/:LD_LIBRARY_PATH export HCCL_INTRA_ROCE_ENABLE=1
执行如下命令拉起vllm serve:
vllm serve /inspire/sj-ssd/project/embodied-multimodality-ascend/public/models/Qwen3-omni-captioner/
--served-model-name qwen3-Omni-captioner
--tensor-parallel-size 4
--dtype bfloat16
--enforce-eager
--port 8106
通过如下curl命令进行音频输入测试:
curl http://127.0.0.1:8106/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "qwen3-omni-captioner",
"messages": [
{"role": "user", "content": [
{"type": "audio_url", "audio_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/cookbook/caption2.mp3"}}
]}
]
}'
先启动本地 HTTP 服务,将测试音频文件目录以 HTTP 方式共享: python -m http.server 8000 --directory /inspire/sj-ssd/project/embodied-multimodality-ascend/public/datasets/qwen3-omni-testdata/
通过如下curl命令进行音频输入测试:
curl http://127.0.0.1:8106/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "qwen3-Omni-captioner",
"messages": [
{"role": "user", "content": [
{"type": "audio_url", "audio_url": {"url": "http://127.0.0.1:8000/captioner-case1.wav"}}
]}
],
"temperature": 0.6,
"max_tokens": 4096,
"top_p": 0.95,
"top_k": 20,
"repetition_penalty": 1.1,
"seed": 42
}'
source /usr/local/Ascend/ascend-toolkit/set_env.sh source /usr/local/Ascend/nnal/atb/set_env.sh export LD_LIBRARY_PATH=/usr/local/Ascend/driver/:LD_LIBRARY_PATH export HCCL_INTRA_ROCE_ENABLE=1 vllm serve {PORT} --served-model-name qwen3-omni-captioner --tensor-parallel-size 4 --dtype bfloat16 --enforce-eager
export INF_API_KEY="MyDEEXqylyMMtzugabBs5p80Q2h+L8jn1zlU+pM60gg="
curl https://gka8eppokjggcmdbj5am5cokapp5acj9.openapi-sj.sii.edu.cn/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer $INF_API_KEY"
-d '{
"model": "qwen3-omni-captioner",
"messages": [
{"role": "user", "content": [
{"type": "audio_url", "audio_url": {"url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/cookbook/caption2.mp3"}}
]}
]
}'
参考如下链接安装evalscope: https://evalscope.readthedocs.io/zh-cn/latest/best_practice/qwen3_omni.html
通过vllm serve拉起模型服务后,通过如下指令执行evalscope性能压测:
evalscope perf
--model qwen3-Omni-captioner
--url http://localhost:8106/v1/chat/completions
--api-key "API_KEY"
--parallel 1 5 10 50 100
--number 2 10 20 100 200
--api openai
--dataset random_vl
--min-tokens 1024
--max-tokens 1024
--prefix-length 0
--min-prompt-length 1024
--max-prompt-length 1024
--image-width 512
--image-height 512
--image-format RGB
--image-num 1
--tokenizer-path /inspire/sj-ssd/project/embodied-multimodality-ascend/public/models/Qwen3-30B-A3B-Instruct-2507