获取模型推理的Profiling数据
PyTorch Profiler 是 PyTorch 官方提供的性能分析工具,用于深度剖析模型训练/推理过程中的性能瓶颈,帮助开发者优化计算效率、内存占用和硬件利用率。
Ascend PyTorch Profiler 完全对标 PyTorch-GPU场景下的使用方式,支持采集PyTorch层算子信息、CANN层算子信息、底层NPU算子信息、以及算子内存占用信息等,可以全方位分析昇腾 PyTorch AI任务的性能状态。
然而使用PyTorch Profiler 会存在数据量大,采集接口耗时较长,性能膨胀可能导致数据不准确,结果失真等问题,为此引入轻量级性能分析工具 Service Profiler,用于分析服务请求级别的性能问题。目前 Service Profiler 通过在服务框架内部进行预埋点,可以采集到用户关注的 profile 数据。当前支持观测的能力包括服务内部请求组 batch大小、sequence length 大小以及单次 batch 迭代执行耗时等信息。
约束限制
使用Service Profiler之前先确保推理服务能正常拉起和处理请求。当前 Service profiler 已经以 python 三方库方式集成到昇腾云版本对应的镜像中。
检查Service Profiler工具是否安装
昇腾云6.5.906及以后版本的配套镜像中默认已经安装acs_service_profiler-1.0.1-py3-none-any.whl工具包,无需单独安装。存放目录AscendCloud-LLM-xxx.zip > llm_tools。
可以通过如下命令查看是否已经安装acs-service-profiler工具。
$ pip show acs-service-profiler
如未安装,参考安装acs-bench工具方式安装。安装命令如下。
$ pip install llm_tools/acs_service_profiler-*-py3-none-any.whl
注意:Ascend Pytorch Profiler 和 Service profiler均为开发态性能调优阶段使能的特性,在生产服务状态下不建议开启。使用 Ascend Pytorch Profiler 一般采集少量请求数据(一到两条请求)即可分析,Service Profiler 采集一段请求周期内(数百条或者数千条)进行分析。 下边针对在线服务场景说明如何采集 Ascend Pytorch Profiler/Service Profiler。
在线服务通过 start_profile 和 stop_profile 访问方式采集
- 推理服务启动之前设置环境变量
export VLLM_TORCH_PROFILER_DIR=/home/ma-user/profiler_dir # 开启 Ascend PyTorch Profiler # export VLLM_SERVICE_PROFILER_DIR =/home/ma-user/profiler_dir # 开启 Service Profiler
这里通过 VLLM_TORCH_PROFILER_DIR/VLLM_SERVICE_PROFILER_DIR 开启 Ascend PyTorch Profiler 或是 Service Profiler。注意两者不能同时开启
- 在设置完环境变量之后,拉起推理服务。
启动推理服务详细请参考启动推理服务(大语言模型)。
- 发送start profile的POST请求
curl -X POST http://${IP}:${PORT}/start_profile
参数说明
- IP: 服务部署的IP地址
- PORT:服务部署的端口
- 发送实际 Request
请求发送方式可参考语言模型性能测试小节。
- 发送stop profile的POST请求
curl -X POST http://${IP}:${PORT}/stop_profile
参数说明同 start_profile POST 请求
- 后处理及可视化
Ascend PyTorch Profiler 采集数据建议使用昇腾开源的 MindStudio Insight 工具可视化,可视化效果如下图:
更多 MindStudio Insight 功能请参考 昇腾MindStudio Insight 工具。
Service Profiler 采集数据通过 asprof 工具后处理之后可在支持 google tracing 格式的在线网页中做可视化,具体步骤如下:
后处理生成可视化文件acsprof export -i ${input_path}
参数说明如下表所示。
参数名称
类型
参数功能
是否必选
-i / --input_path
String
指定Service Profiler采集文件夹路径,支持父文件夹和子文件夹。
是
-o / --output_path
String
指定后处理解析文件的输出路径,默认为输入文件夹路径。
否
-f / --force_reparse
Bool
针对已经解析的文件夹是否需要强制重新解析,默认为False,表示不做强制重新解析。多批次做数据采集的场景,首次做数据采集会自动解析,后边批次的数据不会自动解析需要设置为 True 做重新解析
否
例如:
acsprof export -i /home/ma-user/profiler_dir
正常回显日志如下:
后处理操作会对profiler data 进行解析二次处理,支持导出服务框架的TTFT、TPOT、吞吐量等指标,同时会在文件夹目录下生成可视化文件 trace_view.json。也支持多实例下 merge 各个实例的 timeline 数据生成总体的overview_trace_view.json。生成的 trace_view.json/overview_trace_view.json 可拖拽到网页 chrome://tracing/ 或者 https://ui.perfetto.dev/ 网页中可视化分析。