更新时间:2025-09-17 GMT+08:00
分享

获取模型推理的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 访问方式采集

  1. 推理服务启动之前设置环境变量
    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。注意两者不能同时开启

  2. 在设置完环境变量之后,拉起推理服务

    启动推理服务详细请参考启动推理服务(大语言模型)

  3. 发送start profile的POST请求
    curl -X POST http://${IP}:${PORT}/start_profile

    参数说明

    1. IP: 服务部署的IP地址
    2. PORT:服务部署的端口
  4. 发送实际 Request

    请求发送方式可参考语言模型性能测试小节。

  5. 发送stop profile的POST请求
    curl -X POST http://${IP}:${PORT}/stop_profile

    参数说明同 start_profile POST 请求

  6. 后处理及可视化

    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/ 网页中可视化分析。

    可视化结果
    1. 请求到达或结束时间

    2. 服务过程组batch详情。

      包含单次组batch过程的执行耗时、请求id、batch size、sequence length、请求处于prompt或是decode阶段的统计。

相关文档