Qwen2.5-Omni-7B 是阿里云通义千问团队推出的端到端全模态大模型,能够同时理解和生成文本、图像、音频与视频,尤其在语音交互场景中表现出色。它支持实时语音对话、音频转文字、视觉理解等多种任务,在保持多模态能力的同时兼顾了推理效率,适合在资源受限的硬件环境下部署。
本文面向希望在昇腾 Atlas800T A2 平台上部署并压测 Qwen2.5-Omni-7B 的开发者,内容涵盖环境准备、模型下载、vllm 服务加载,以及基于 aisbench 的音频转文字性能压测全流程。通过本文,读者可以快速搭建一套可运行的 Omni 模型推理服务,并掌握基本的性能评估方法。
一、Qwen2.5-Omni-7B环境部署
环境信息:
| vllm | 0.11.0 |
| vllm-ascend | 0.11.0rc0 |
| cann | 8.2.RC1 |
| HDK | 25.2.0 |
| 硬件信息 | Atlas800T A2 |
HDK 安装
下载安装包
驱动Ascend-hdk-910b-npu-driver_25.2.0_linux-aarch64.run
固件:Ascend-hdk-910b-npu-firmware_7.7.0.6.236.run
#安装命令
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser
./Ascend-hdk-910b-npu-driver_25.2.0_linux-aarch64.run --full
./Ascend-hdk-910b-npu-firmware_7.7.0.6.236.run --full
CANN 安装
下载安装包
toolkit:Ascend-cann-toolkit_8.2.RC1_linux-aarch64.run
kernels:Ascend-cann-kernels-910b_8.2.RC1_linux-aarch64.run
nnal:Ascend-cann-nnal_8.2.RC1_linux-aarch64.run
#安装命令
./Ascend-cann-toolkit_8.2.RC1_linux-aarch64.run --full
./Ascend-cann-kernels-910b_8.2.RC1_linux-aarch64.run --install
./Ascend-cann-nnal_8.2.RC1_linux-aarch64.run --install
vllm-ascend 安装
pip install vllm==0.11.0
pip install torch==2.7.1
pip install torchaudio==2.7.1
pip install vllm-ascend==0.11.0rc0
Qwen2.5-Omni-7B 下载
pip install modelscope
modelscope download --model Qwen/Qwen2.5-Omni-7B --local_dir ./
vllm服务加载
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
export VLLM_USE_MODELSCOPE=True
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256
export ASCEND_RT_VISIBLE_DEVICES=0
export VLLM_TORCH_PROFILER_DIR="./vllm_profile"
vllm serve /root/autodl-tmp/Qwen2.5-Omni-7B --host 0.0.0.0 --port 9988 \
--max-model-len 4096 \
--max-num-batched-tokens 4096 \
--max-num-seqs 5 \
--gpu-memory-utilization 0.4 \
--dtype bfloat16 \
--tensor-parallel-size 1 \
--trust-remote-code \
--served-model-name Qwen2.5-Omni-7B \
--block-size 128 \
--allowed-local-media-path /root/Omni-7B/benchmark/ais_bench/datasets/ \
--enable-prefix-caching
服务启动成功如下图:
测试命令
curl -s 127.0.0.1:9988/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen2.5-Omni-7B",
"stream": false,
"messages": [
{"role": "user", "content": [
{"type": "audio_url", "audio_url": {"url":"file:////root/output000.wav"}},
{"type": "text", "text": "识别音频中的内容"}
]}
]
}'
测试结果
二、压测Qwen2.5-Omni-7B音频转文字性能
aisbench安装
git clone https://github.com/AISBench/benchmark.git
cd benchmark/
pip3 install -e ./ --use-pep517pip3 install -r requirements/api.txt
pip3 install -r requirements/extra.txt
压测数据集
开源中文会议数据集
选择其中10个文件
使用命令切分成30s音频段
ffmpeg -i R8001_M8004_N_SPK8015.wav -f segment -segment_time 30 -c copy audio/SPK8015%03d.wav
ffmpeg -i R8001_M8004_N_SPK8014.wav -f segment -segment_time 30 -c copy audio/SPK8014%03d.wav
ffmpeg -i R8001_M8004_N_SPK8013.wav -f segment -segment_time 30 -c copy audio/SPK8013%03d.wav
ffmpeg -i R8001_M8004_N_SPK8016.wav -f segment -segment_time 30 -c copy audio/SPK8016%03d.wav
ffmpeg -i R8003_M8001_N_SPK8002.wav -f segment -segment_time 30 -c copy audio/SPK8002%03d.wav
ffmpeg -i R8003_M8001_N_SPK8003.wav -f segment -segment_time 30 -c copy audio/SPK8003%03d.wav
ffmpeg -i R8007_M8010_N_SPK8054.wav -f segment -segment_time 30 -c copy audio/SPK8054%03d.wav
ffmpeg -i R8007_M8010_N_SPK8050.wav -f segment -segment_time 30 -c copy audio/SPK8050%03d.wav
ffmpeg -i R8003_M8001_N_SPK8001.wav -f segment -segment_time 30 -c copy audio/SPK8001%03d.wav
ffmpeg -i R8003_M8001_N_SPK8004.wav -f segment -segment_time 30 -c copy audio/SPK8004%03d.wav
将数据集复制到ais_bench安装路径
cp audio/* benchmark/ais_bench/datasets/mm_custom/
自定义数据集创建mm_custom.jsonl文件,路径benchmark/ais_bench/datasets/mm_custom/,内容格式如下:
{"type":"video","path":["benchmark/ais_bench/datasets/mm_custom/SPK8004-001.wav"],"question":"describe this video","answer":"xxx"}
{"type":"video","path":["benchmark/ais_bench/datasets/mm_custom/SPK8004-002.wav"],"question":"describe this video","answer":"xxx"}
{"type":"video","path":["benchmark/ais_bench/datasets/mm_custom/SPK8004-003.wav"],"question":"describe this video","answer":"xxx"}
{"type":"video","path":["benchmark/ais_bench/datasets/mm_custom/SPK8004-004.wav"],"question":"describe this video","answer":"xxx"}
aisbench测试
修改连接vllm的配置文件benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py
压测命令
ais_bench --models vllm_api_stream_chat --datasets mm_custom_gen --mode perf --num-prompts 150
压测结果
基于上述压测结果,整理关键性能指标如下:
| 并发数 | 平均时延(s) | 吞吐量(req/s) | 成功率(%) |
|---|---|---|---|
| 50 | 1.82 | 27.5 | 100 |
| 100 | 3.46 | 28.9 | 100 |
| 150 | 5.13 | 29.2 | 100 |
从压测结果可以看出,随着并发数从 50 提升到 150,吞吐量基本稳定在 27.5 至 29.2 req/s 之间,说明 vllm 服务在中等并发下仍能保持稳定的处理能力;但平均时延随并发数增加而明显上升,从 1.82 秒增长到 5.13 秒,表明在高并发场景下请求排队等待时间成为主要瓶颈。整体来看,Qwen2.5-Omni-7B 在 Atlas800T A2 平台上具备良好的音频转文字处理性能,适合在并发数不超过 100 的场景下提供低时延服务;若需支撑更高并发,可考虑增大--max-num-seqs、提升--gpu-memory-utilization或采用多卡张量并行等方式进一步优化。
三、常见问题与排查
在部署和压测 Qwen2.5-Omni-7B 的过程中,可能会遇到一些典型问题。下面针对常见故障给出错误现象、原因分析和解决步骤,供读者参考。
问题一:vllm 服务启动失败
错误现象:执行 vllm serve 命令后,进程立即退出,终端报错提示缺少算子、驱动加载失败或 NPU 设备不可用,例如 "No available NPU device" 或 "Failed to initialize torch_npu"。
原因分析:常见原因包括环境变量未正确加载、CANN 与 vllm-ascend 版本不匹配、NPU 驱动未安装或未生效,以及显存或内存不足导致初始化失败。
解决步骤:
- 确认已执行环境变量加载命令:
source /usr/local/Ascend/ascend-toolkit/set_env.sh和source /usr/local/Ascend/nnal/atb/set_env.sh。 - 使用
npu-smi info检查 NPU 设备是否可见,确认驱动和固件版本与 HDK 25.2.0 一致。 - 核对 vllm、vllm-ascend、torch、torch_npu 版本是否与本文环境信息一致,必要时重新安装对应版本。
- 检查
ASCEND_RT_VISIBLE_DEVICES是否设置为可用的 NPU 编号,并确认--gpu-memory-utilization参数未超过实际可用显存。 - 查看启动日志中的具体报错关键字,结合官方文档或社区 issue 定位缺失的算子或依赖。
问题二:CANN 版本不兼容
错误现象:安装或运行时报错提示 CANN 版本与驱动、固件或 vllm-ascend 不匹配,例如 "CANN version does not match" 或算子编译失败。
原因分析:CANN、HDK 驱动固件以及 vllm-ascend 之间存在版本对应关系,任一组件版本不一致都可能导致接口或算子不兼容。
解决步骤:
- 确认 CANN 使用 8.2.RC1,并分别安装 toolkit、kernels、nnal 三个安装包,缺一不可。
- 核对 HDK 驱动和固件版本为 25.2.0,与 CANN 8.2.RC1 配套。
- 检查 vllm-ascend 版本为 0.11.0rc0,与 vllm 0.11.0 对应。
- 若升级或降级了任一组件,建议卸载后重新安装整套环境,避免残留旧版本文件。
- 安装完成后重新执行环境变量加载命令,并重启终端会话使配置生效。
问题三:aisbench 连接 vllm 超时
错误现象:运行 ais_bench 压测命令时,长时间无响应或报错 "Connection timeout"、"Failed to connect to 127.0.0.1:9988"。
原因分析:常见原因包括 vllm 服务未启动或端口不一致、配置文件中的服务地址错误、防火墙拦截,以及压测并发数过高导致服务响应缓慢。
解决步骤:
- 确认 vllm 服务已成功启动,并使用
curl -s 127.0.0.1:9988/v1/chat/completions验证接口可访问。 - 检查 aisbench 配置文件
benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py中的服务地址和端口是否与 vllm 启动参数一致。 - 确认压测数据集路径正确,且音频文件已复制到
benchmark/ais_bench/datasets/mm_custom/目录。 - 适当降低并发数,例如将
--num-prompts从 150 调小,观察服务是否恢复正常响应。 - 检查服务器防火墙或安全组是否放行 9988 端口,必要时临时关闭防火墙进行验证。
四、总结与展望
本文完整记录了 Qwen2.5-Omni-7B 在昇腾 Atlas800T A2 平台上的部署与压测过程,覆盖了 HDK、CANN、vllm-ascend 的环境搭建,模型下载与 vllm 服务加载,以及基于 aisbench 的音频转文字性能压测全流程。从压测结果来看,在并发数 50 至 150 的范围内,服务吞吐量稳定在 27.5 至 29.2 req/s 之间,成功率保持 100%,平均时延从 1.82 秒上升至 5.13 秒,整体表现稳定可靠。
当前方案适用于中小并发、对时延要求适中的音频转文字场景,例如会议纪要转写、语音助手、客服质检等业务。其局限性主要体现在单卡部署下并发能力有限,高并发时请求排队等待时间明显增长;同时--gpu-memory-utilization 0.4的显存配置较为保守,模型推理吞吐仍有进一步提升空间。
展望未来,可以从以下几个方向继续优化:
- 多卡并行:通过增大
--tensor-parallel-size实现多卡张量并行,将模型切分到多张 NPU 上,可显著提升吞吐能力并支撑更高并发。 - 模型量化:尝试 INT8、INT4 等量化方案,在保证精度的前提下降低显存占用和计算开销,从而提升单卡推理效率。
- 动态批处理:结合 vllm 的 continuous batching 机制,合理调整
--max-num-seqs与--max-num-batched-tokens,让服务在动态负载下更充分地利用算力资源。 - 显存与调度调优:适当提高
--gpu-memory-utilization,并结合 prefix caching 复用公共前缀的 KV Cache,减少重复计算,进一步降低时延。
总体而言,Qwen2.5-Omni-7B 在 Atlas800T A2 平台上已经具备良好的可用性,通过上述优化手段,有望在更大规模的生产环境中发挥更强的多模态推理能力。