
# 获取模型推理的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](https://support.huawei.com/enterprise/zh/cloud-computing/modelarts-pid-23404305/software/)，在此路径中查找下载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
   ```
   
![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
使用上述命令安装时，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. 在设置完环境变量之后，拉起推理服务**。**
   启动推理服务详细请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
   
3. 发送start profile的POST请求
   ```
   curl -X POST http://${IP}:${PORT}/start_profile
   ```
   参数说明
   1. IP: 服务部署的IP地址
   
   2. PORT:服务部署的端口
    
4. 发送实际 Request 请求发送方式可参考[语言模型性能测试](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908027.html)小节。
   
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 离线解析](https://www.hiascend.com/document/detail/zh/canncommercial/83RC1/devaids/Profiling/atlasprofiling_16_0034.html)。
   
7. 后处理及可视化 Ascend PyTorch Profiler 采集数据建议使用昇腾开源的 MindStudio Insight 工具可视化，可视化效果如下图：
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002451298498.png "点击放大")
   更多 MindStudio Insight 功能请参考 [昇腾MindStudio Insight 工具](https://www.hiascend.com/document/detail/zh/mindstudio/70RC2/msinsightug/msascendinsightug/AscendInsight_0002.html)。
   
   
 
#### 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. 启动推理服务详细请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
3. 发送start profile的POST请求
   ```
   curl -X POST http://${IP}:${PORT}/start_profile
   ```
   参数说明
   1. IP: 服务部署的IP地址
   
   2. PORT:服务部署的端口
    
4. 发送实际Request进行处理。请求发送方式可参考[语言模型性能测试](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908027.html)小节。
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
   ```
   正常回显日志如下：
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002562092333.png "点击放大")
   
7. 结果可视化。
   1. 请求到达或结束时间。 ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002562212307.png "点击放大")
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002531292336.png "点击放大")
      
   
   2. 服务过程组batch详情。 包含单次组batch过程的执行耗时、请求id、batch size、sequence length、请求处于prompt或是decode阶段的统计。
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002531212396.png "点击放大")
      
    
 
