更新时间:2026-03-24 GMT+08:00
分享

获取模型推理的Profiler数据

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 三方库方式集成到昇腾云版本对应的镜像中。

Ascend Pytorch Profiler 和 Service profiler均为开发态性能调优阶段使能的特性,在生产服务状态下不建议开启。使用 Ascend Pytorch Profiler 一般采集少量请求数据(一到两条请求)即可分析,Service Profiler 采集一段请求周期内(数百条或者数千条)进行分析。

检查Service Profiler工具是否安装(可选)

可以通过如下命令查看是否已经安装acs-service-profiler工具。

pip show acs-service-profiler

如果未安装,请参考以下步骤执行。

  1. 获取acs-service-profiler工具的whl包。

    whl包存放在软件包AscendCloud-LLM-xxx.zip/AscendCloud-LLM-xxx的llm_tools目录中。软件包获取路径:Support-E,在此路径中查找下载ModelArts 6.5.908 版本。

  2. 配置pip源,按实际需要配置pip源。(可选)
    mkdir -p ~/.pip
    vim ~/.pip/pip.conf

    配置文件填入如下内容,下述命令以华为源为例:

    [global]
    index-url = https://mirrors.huaweicloud.com/repository/pypi/simple
    trusted-host = mirrors.huaweicloud.com
    timeout = 120
  3. 在whl包所在文件夹下,执行如下命令安装acs-bench工具。
    pip install acs_service_profiler-*-py3-none-any.whl

使用上述命令安装时,acs_service_profiler-*-py3-none-any.whl 中的 `*` 需替换为实际版本号,如:pip install acs_service_profiler-1.2.0-py3-none-any.whl

RestApi启停方式采集Ascend Pytorch Profiler

  1. 推理服务启动之前设置环境变量
    export VLLM_TORCH_PROFILER_DIR=/home/ma-user/AscendCloud/profiler_dir # 开启 Ascend PyTorch Profiler 

    其中 VLLM_TORCH_PROFILER_DIR 指定 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. 后处理离线解析。在当前容器环境下创建 python 脚本并执行 (如 parse.py) , 脚本内容参考如下:
    from torch_npu.profiler.profiler import analyse
    if __name__ == "__main__":
        analyse(profiler_path="/home/ma-user/AscendCloud/profiler_dir")

    其中 profiler_path 参数表示profiler 数据的采集目录,和步骤1中VLLM_TORCH_PROFILER_DIR 环境变量指定目录为同一路径。更多离线解析能力请参考昇腾 Ascend PyTorch Profiler 离线解析

  7. 后处理及可视化

    Ascend PyTorch Profiler 采集数据建议使用昇腾开源的 MindStudio Insight 工具可视化,可视化效果如下图:

    更多 MindStudio Insight 功能请参考 昇腾MindStudio Insight 工具

Service Profiler 采集

  1. 推理服务启动之前设置环境变量。
    export VLLM_SERVICE_PROFILER_DIR =/home/ma-user/profiler_dir # 开启 Service Profiler

    VLLM_SERVICE_PROFILER_DIR指定Service Profiler数据采集目录,注意不能和Ascend Pytorch 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. 后处理离线解析。

    后处理操作会对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/网页中可视化分析。

    执行如下cli命令
    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

    正常回显日志如下:

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

    2. 服务过程组batch详情。

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

相关文档