服务性能分析指南#
在推理服务过程中,有时需要监控推理服务框架的内部执行流程以识别性能问题。通过采集关键流程的起止时间戳、识别关键函数或迭代、记录关键事件并收集各类信息,可以快速定位性能瓶颈。
本指南将引导您完成从 vLLM-Ascend 服务框架及算子中采集性能数据的过程。它涵盖了从准备、采集、分析到可视化的完整工作流程,帮助您快速上手性能采集工具。
下文提供了两种性能采集解决方案:Ascend PyTorch Profiler 和 MS Service Profiler。您可以根据实际需求选择合适的工具进行性能分析和问题排查。
解决方案对比#
特性 |
Ascend PyTorch Profiler |
MS Service Profiler |
|---|---|---|
安装方式 |
内置,无需额外安装 |
需要从源码构建 msserviceprofiler |
采集粒度 |
PyTorch 算子级别 |
服务框架函数级别 |
控制方式 |
API 请求控制 |
配置文件控制 |
适用场景 |
模型算子性能分析 |
服务框架工作流分析 |
数据格式 |
ascend_pt 格式 |
Chrome Tracing + CSV |
主要优势 |
算子级性能分析 |
服务框架工作流可视化 |
支持的采集能力 |
PyTorch 算子级别 |
PyTorch 算子级别和服务框架函数级别 |
快速选择指南#
Ascend PyTorch Profiler#
0. Installation and Configuration#
无需安装额外包;可通过命令行配置启用。目前,vLLM 默认启用了 python 调用栈,这会显著增加采集的性能数据量。如果您不希望采集 python 调用栈,可以使用 torch_profiler_with_stack=false 来禁用它。
1.采集准备#
启动在线服务,并设置 --profiler-config 参数来控制性能文件的保存路径。参数设置后,采集功能即被启用。
VLLM_PROMPT_SEQ_BUCKET_MAX=128
VLLM_PROMPT_SEQ_BUCKET_MIN=128
python3 -m vllm.entrypoints.openai.api_server \
--port 8080 \
--model "facebook/opt-125m" \
--tensor-parallel-size 1 \
--max-num-seqs 128 \
--profiler-config '{"profiler": "torch", "torch_profiler_dir": "./vllm_profile", "torch_profiler_with_stack": false}' \
--dtype bfloat16 \
--max-model-len 256
注意:2026年1月19日:vLLM 主线已弃用 VLLM_TORCH_PROFILER_DIR 环境变量。相关 PR 使用 vLLM Ascend 主线代码采集性能分析器数据时,请记得使用
--profiler-config(在线)参数或profiler_config(离线)参数。
2.开始采集#
性能采集通过发送 API 请求来控制。您可以在实际业务数据稳定后开始采集,采集几秒后停止;或者可以先开始采集,然后发送业务请求,最后停止。
发送以下请求以启动性能分析服务:
curl -X POST http://localhost:8080/start_profile
发送以下请求以停止性能分析服务:
curl -X POST http://localhost:8080/stop_profile
3.发送请求#
根据您的实际业务数据发送请求。发送请求后,停止性能分析服务,数据将自动保存到先前配置的路径:
curl http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "facebook/opt-125m",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
curl -X POST http://localhost:8080/stop_profile
4.分析数据#
导航到 ./vllm_profile 目录并找到生成的 *ascend_pt 文件夹。在检查性能分析数据之前,需要先分析此文件夹。
from torch_npu.profiler.profiler import analyse
analyse("./vllm_profile/localhost.localdomain_*_ascend_pt/")
5.查看结果#
分析后,*ascend_pt 目录将包含许多文件,主要分析重点是 ASCEND_PROFILER_OUTPUT 文件夹。此目录将包含以下文件:
analysis.db:数据库格式的性能数据api_statistic.csv:API 调用统计ascend_pytorch_profiler_0.db:数据库格式的性能数据kernel_details.csv:内核级相关数据operator_details.csv:算子级相关数据op_statistic.csv:算子利用率数据step_trace_time.csv:调度数据trace_view.json:Chrome 追踪格式数据,可在 MindStudio Insight 中打开
MS Service Profiler#
0.从源码构建与升级#
msserviceprofiler 工具已随 CANN Toolkit 包预安装。使用以下命令从源码安装或升级。
git clone https://gitcode.com/Ascend/msserviceprofiler.git
cd msserviceprofiler
bash scripts/build_and_upgrade.sh
1.准备#
在启动服务前,设置环境变量 SERVICE_PROF_CONFIG_PATH 指向性能分析配置文件,并设置环境变量 PROFILING_SYMBOLS_PATH 来指定需要导入的符号 YAML 配置文件。之后,根据您的部署方式启动 vLLM 服务。
cd ${path_to_store_profiling_files}
# Set environment variable
export SERVICE_PROF_CONFIG_PATH=ms_service_profiler_config.json
export PROFILING_SYMBOLS_PATH=service_profiling_symbols.yaml
# Start vLLM service
vllm serve Qwen/Qwen2.5-0.5B-Instruct &
ms_service_profiler_config.json 文件是性能分析配置文件。如果指定路径下不存在该文件,系统将自动生成一份默认配置。如有需要,您可以根据下文性能分析配置文件章节的说明提前进行自定义配置。
service_profiling_symbols.yaml 是需要导入的性能分析点配置文件。您也可以选择不设置环境变量 PROFILING_SYMBOLS_PATH,此时将使用默认配置文件;如果您指定的路径下不存在该文件,系统同样会在该路径生成一份配置文件以便后续修改。您可以参考下文符号配置文件章节进行自定义配置。
2.启用性能分析#
要启用性能数据采集开关,请将配置文件 ms_service_profiler_config.json 中的 enable 字段从 0 修改为 1。可以通过执行以下 sed 命令实现:
sed -i 's/"enable":\s*0/"enable": 1/' ./ms_service_profiler_config.json
3.发送请求#
根据实际性能分析需求选择合适的请求发送方式:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-0.5B-Instruct",
"prompt": "Beijing is a",
"max_tokens": 5,
"temperature": 0
}' | python3 -m json.tool
4.解析数据#
# xxxx-xxxx is the directory automatically created based on vLLM startup time
cd /root/.ms_server_profiler/xxxx-xxxx
# parse data
msserviceprofiler parse --input-path=./ --output-path output
5.查看结果#
解析完成后,output 目录下将包含以下文件:
chrome_tracing.json:Chrome 追踪格式数据,可在 MindStudio Insight 中打开。profiler.db:数据库格式的性能数据。request.csv:请求相关数据。kvcache.csv:KV Cache 相关数据。batch.csv:批次调度相关数据。