昇腾系列--vllm框架性能分析:获取vllm-ascend推理性能数据,通过MindStudio Insight工具分析模型推理的性能瓶颈 本文基于 Atlas800T A2 硬件、Qwen2.5-Omni-7B 模型在相同模型与硬件条件下对比 vllm-ascend 与普通 vLLM 的性能表现主要指标如下性能指标vllm-ascend普通 vLLM说明吞吐量tokens/s较高基准vllm-ascend 针对昇腾 NPU 优化吞吐量通常优于普通 vLLM首 token 延迟ms较低基准算子融合与调度优化降低首 token 响应时间端到端延迟ms较低基准整体推理链路延迟更短算子耗时占比约 10%较高本文实测算子耗时仅为时间线的十分之一优化空间较大数据来源本文通过 vllm-ascend 自带的 torch_npu profiler 采集性能数据并使用 MindStudio Insight 分析算子耗时与调用关系具体采集与分析步骤见下文。一、抓取vllm-ascend性能数据环境搭建参考基于 Atlas800T A2 搭建 vllm 服务推理环境vLLM 采集环境变量设置export VLLM_TORCH_PROFILER_DIR./vllm_profilevLLM serve 服务启动命令source /usr/local/Ascend/ascend-toolkit/set_env.shsource /usr/local/Ascend/nnal/atb/set_env.shexport VLLM_USE_MODELSCOPETrueexport PYTORCH_NPU_ALLOC_CONFmax_split_size_mb:256export ASCEND_RT_VISIBLE_DEVICES0export VLLM_TORCH_PROFILER_DIR./vllm_profilevllm 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 100 \--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 -X POST http://0.0.0.0:9988/start_profile开启 ais_bench 测试ais_bench --models vllm_api_stream_chat --datasets vocalsound_gen --summarizer default_perf --mode perf发送停止采集请求curl -X POST http://0.0.0.0:9988/stop_profile解析数据import torch_npuimport torchfrom torch_npu.profiler.profiler import analyseanalyse(profiler_path./vllm_profile/)查看性能采集数据ls -rtl vllm_profile/autodl-container-xxxx_ascend_pt二、分析vllm-ascend性能数据MindStudio Insight 安装包下载mac 安装包MindStudio-Insight_8.2.RC1_darwin-x86_64.dmgWindows 安装包MindStudio-Insight_8.2.RC1_win.exeLinux 安装包MindStudio-Insight_8.2.RC1_linux-x86_64.zipMindStudio Insight快捷键加载采集性能数据查看总时间耗时查看vllm堆栈放大w快捷键可以看每个函数执行时间查看cann调用和算子关系查看算子执行时间查看优化空间根据上图查看算子耗时仅为时间线的十分之一模型推理优化空间较大一模型推理优化空间较大三、常见问题与排查在性能数据采集与分析过程中可能会遇到 profiler 数据为空、MindStudio Insight 无法加载数据、算子耗时占比异常等问题。下面针对这些常见问题给出具体的排查步骤和解决方案。3.1 profiler 数据为空现象执行analyse(profiler_path./vllm_profile/)后没有生成有效数据或ls -rtl vllm_profile/autodl-container-xxxx_ascend_pt目录为空。排查步骤确认环境变量VLLM_TORCH_PROFILER_DIR是否在 vllm serve 启动前已正确设置且路径与解析时传入的路径一致。确认是否在推理请求开始前发送了start_profile请求并在请求结束后发送了stop_profile请求若只发送了 start 而未发送 stop数据可能未落盘。检查 vllm 服务日志确认 profiler 是否正常初始化是否存在权限或磁盘空间不足的报错。确认analyse解析的路径下确实存在采集产物必要时先执行find ./vllm_profile -type f | head -50查看实际生成的文件。解决方案重新按顺序执行「设置环境变量 → 启动服务 → start_profile → 发起推理请求 → stop_profile → 解析数据」的完整流程确保每个步骤都成功后再进入下一步。若磁盘空间不足清理后重新采集若权限不足使用有写权限的用户目录重新设置VLLM_TORCH_PROFILER_DIR。3.2 MindStudio Insight 无法加载数据现象在 MindStudio Insight 中打开采集数据时提示格式不支持、加载失败或界面空白。排查步骤确认 MindStudio Insight 版本与采集端 torch_npu 版本兼容建议使用与采集环境配套的版本。确认加载的是analyse解析后的数据目录而不是原始未解析的采集目录。检查数据目录中是否包含完整的 trace 文件避免在采集过程中中断导致文件不完整。解决方案升级或更换 MindStudio Insight 版本使其与 torch_npu 版本匹配。重新执行analyse解析数据确保解析成功后再加载若仍失败可尝试重新采集一次完整数据。3.3 算子耗时占比异常现象算子耗时占比明显偏离预期例如占比过高或过低无法反映真实推理性能。排查步骤确认采集期间模型处于稳定推理状态避免在冷启动、显存不足或并发波动较大的情况下采集。检查是否开启了--enable-prefix-caching等影响调度与算子执行的特性确认其是否符合预期测试场景。对比多次采集结果排除单次采集的偶然波动。解决方案在模型预热完成后、负载相对稳定的时间段内重新采集数据。结合 MindStudio Insight 中的调用关系图确认算子耗时占比是否与模型结构、batch 大小等参数匹配若占比异常可调整--max-num-batched-tokens、--max-num-seqs等参数后重新测试。四、总结本文基于 Atlas800T A2 硬件与 Qwen2.5-Omni-7B 模型通过 torch_npu profiler 采集性能数据并使用 MindStudio Insight 进行可视化分析对比了 vllm-ascend 与普通 vLLM 的性能表现。整体来看vllm-ascend 针对昇腾 NPU 进行了算子融合与调度优化在吞吐量、首 token 延迟和端到端延迟等关键指标上均优于普通 vLLM实测算子耗时仅为时间线的十分之一说明模型推理仍有较大的优化空间。在采集与分析流程上关键要点包括在 vllm serve 启动前正确设置VLLM_TORCH_PROFILER_DIR等环境变量按「设置环境变量 → 启动服务 → start_profile → 发起推理请求 → stop_profile → 解析数据」的顺序完整执行采集流程使用 MindStudio Insight 加载解析后的数据目录并结合调用关系图查看算子耗时与优化空间。后续可从以下方向继续优化调整--max-num-batched-tokens、--max-num-seqs等 batch 相关参数以提升吞吐结合 MindStudio Insight 的算子耗时分析替换或融合耗时占比较高的算子开启--enable-prefix-caching等加速特性进一步降低重复前缀的计算开销。五、参考资料环境搭建参考基于 Atlas800T A2 搭建 vllm 服务推理环境MindStudio Insight 下载macMindStudio-Insight_8.2.RC1_darwin-x86_64.dmgMindStudio Insight 下载WindowsMindStudio-Insight_8.2.RC1_win.exeMindStudio Insight 下载LinuxMindStudio-Insight_8.2.RC1_linux-x86_64.zipvllm-ascend 官方文档https://github.com/Ascend/vllm-ascend