昇腾系列--音频压测:基于Atlas800T A2环境使用vllm-ascend部署Qwen2.5-Omni-7B,并用aisbench压测Qwen2.5-Omni-7B音频转文字的性能
2026/9/21 17:25:45 网站建设 项目流程

Qwen2.5-Omni-7B 是阿里云通义千问团队推出的端到端全模态大模型,能够同时理解和生成文本、图像、音频与视频,尤其在语音交互场景中表现出色。它支持实时语音对话、音频转文字、视觉理解等多种任务,在保持多模态能力的同时兼顾了推理效率,适合在资源受限的硬件环境下部署。

本文面向希望在昇腾 Atlas800T A2 平台上部署并压测 Qwen2.5-Omni-7B 的开发者,内容涵盖环境准备、模型下载、vllm 服务加载,以及基于 aisbench 的音频转文字性能压测全流程。通过本文,读者可以快速搭建一套可运行的 Omni 模型推理服务,并掌握基本的性能评估方法。

一、Qwen2.5-Omni-7B环境部署

环境信息:

vllm0.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-pep517

pip3 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)成功率(%)
501.8227.5100
1003.4628.9100
1505.1329.2100

从压测结果可以看出,随着并发数从 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 驱动未安装或未生效,以及显存或内存不足导致初始化失败。

解决步骤:

  1. 确认已执行环境变量加载命令:source /usr/local/Ascend/ascend-toolkit/set_env.shsource /usr/local/Ascend/nnal/atb/set_env.sh
  2. 使用npu-smi info检查 NPU 设备是否可见,确认驱动和固件版本与 HDK 25.2.0 一致。
  3. 核对 vllm、vllm-ascend、torch、torch_npu 版本是否与本文环境信息一致,必要时重新安装对应版本。
  4. 检查ASCEND_RT_VISIBLE_DEVICES是否设置为可用的 NPU 编号,并确认--gpu-memory-utilization参数未超过实际可用显存。
  5. 查看启动日志中的具体报错关键字,结合官方文档或社区 issue 定位缺失的算子或依赖。

问题二:CANN 版本不兼容

错误现象:安装或运行时报错提示 CANN 版本与驱动、固件或 vllm-ascend 不匹配,例如 "CANN version does not match" 或算子编译失败。

原因分析:CANN、HDK 驱动固件以及 vllm-ascend 之间存在版本对应关系,任一组件版本不一致都可能导致接口或算子不兼容。

解决步骤:

  1. 确认 CANN 使用 8.2.RC1,并分别安装 toolkit、kernels、nnal 三个安装包,缺一不可。
  2. 核对 HDK 驱动和固件版本为 25.2.0,与 CANN 8.2.RC1 配套。
  3. 检查 vllm-ascend 版本为 0.11.0rc0,与 vllm 0.11.0 对应。
  4. 若升级或降级了任一组件,建议卸载后重新安装整套环境,避免残留旧版本文件。
  5. 安装完成后重新执行环境变量加载命令,并重启终端会话使配置生效。

问题三:aisbench 连接 vllm 超时

错误现象:运行 ais_bench 压测命令时,长时间无响应或报错 "Connection timeout"、"Failed to connect to 127.0.0.1:9988"。

原因分析:常见原因包括 vllm 服务未启动或端口不一致、配置文件中的服务地址错误、防火墙拦截,以及压测并发数过高导致服务响应缓慢。

解决步骤:

  1. 确认 vllm 服务已成功启动,并使用curl -s 127.0.0.1:9988/v1/chat/completions验证接口可访问。
  2. 检查 aisbench 配置文件benchmark/ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py中的服务地址和端口是否与 vllm 启动参数一致。
  3. 确认压测数据集路径正确,且音频文件已复制到benchmark/ais_bench/datasets/mm_custom/目录。
  4. 适当降低并发数,例如将--num-prompts从 150 调小,观察服务是否恢复正常响应。
  5. 检查服务器防火墙或安全组是否放行 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 平台上已经具备良好的可用性,通过上述优化手段,有望在更大规模的生产环境中发挥更强的多模态推理能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询