diff --git a/profiler/msprof_analyze/README.md b/profiler/msprof_analyze/README.md index ecaa04395c9fa4aa6175734bb58edf816fb2c44f..dd48e60c26d6b58a92f11c17f5a29e14fe60090f 100644 --- a/profiler/msprof_analyze/README.md +++ b/profiler/msprof_analyze/README.md @@ -174,25 +174,25 @@ msprof-analyze cluster -m [feature_option] -d [global_option] [ #### 计算类特性 -| 分析能力 | 介绍 | 介绍链接 | -|---------|----------------------------------------|-----| -| compute_op_sum | device侧运行的计算类算子汇总。 | - | -| freq_analysis | 识别是否aicore存在空闲(频率为800MHz)、异常(频率不为1800MHz或800MHz)的情况并给出分析结果。 | - | -| ep_load_balance | moe负载信息汇总分析。 | - | +| 分析能力 | 介绍 | 介绍链接 | +|---------|-------------------------------------------------------------|-----| +| compute_op_sum | device侧运行的计算类算子汇总。 | - | +| freq_analysis | 识别aicore是否存在空闲(频率为800MHz)、异常(频率不为1800MHz或800MHz)的情况并给出分析结果。 | - | +| ep_load_balance | moe负载信息汇总分析。 | - | #### 通信类特性 -| 分析能力 | 介绍 | 介绍链接 | -|---------|----------------------------------------|-----| -| communication_matrix | 通信矩阵分析。 | - | -| communication_time| 通信耗时分析。 | - | +| 分析能力 | 介绍 | 介绍链接 | +|---------|-------------------------------------------------------------------------------------------|-----| +| communication_matrix | 通信矩阵分析。 | - | +| communication_time| 通信耗时分析。 | - | | all | 默认值,会执行communication_matrix通信矩阵和communication_time通信耗时分析能力,并导出cluster_step_trace_time交付件。 | - | -| communication_group_map | 集群场景通信域与并行策略呈现。 | - | -| communication_time_sum | 集群场景通信时间和带宽汇总分析。 | - | -| communication_matrix_sum | 集群场景通信时间和带宽汇总分析。 | - | -| hccl_sum | 通信类算子信息汇总。 | - | -| pp_chart | pp流水图,针对pp并行下各个阶段的耗时分析与可视化能力。| [link](./docs/features/pp_chart.md) | -| slow_rank | 根据当前的快慢卡统计算法,展示各个rank得出的快慢卡影响次数,识别慢卡出现的原因。 | - | +| communication_group_map | 集群场景通信域与并行策略呈现。 | - | +| communication_time_sum | 集群场景通信时间和带宽汇总分析。 | - | +| communication_matrix_sum | 集群场景通信矩阵汇总分析。 | - | +| hccl_sum | 通信类算子信息汇总。 | - | +| pp_chart | pp流水图,针对pp并行下各个阶段的耗时分析与可视化能力。 | [link](./docs/features/pp_chart.md) | +| slow_rank | 根据当前的快慢卡统计算法,展示各个rank得出的快慢卡影响次数,识别慢卡出现的原因。 | - | #### Host下发类特性 @@ -212,13 +212,13 @@ msprof-analyze cluster -m [feature_option] -d [global_option] [ ### 使用样例 #### 最简使用 ```bash -# 只传入cluster_data性能数据文件夹,输入cluster_time_summary分析能力,在cluster_data输入文件夹下生成cluster_文件夹,保存分析结果信息 +# 只传入cluster_data性能数据文件夹,输入cluster_time_summary分析能力,在cluster_data输入文件夹下生成cluster_analysis_output文件夹,保存分析结果信息 msprof-analyze -m cluster_time_summary -d ./cluster_data ``` #### 分析能力为all设置下使用 ```bash -# 可以输入-m参数=all 当前输出step_trace_time/通信矩阵/通信耗时交付件 +# 可以输入-m参数为all,当前输出step_trace_time/通信矩阵/通信耗时交付件 msprof-analyze -m all -d ./cluster_data ``` diff --git a/profiler/msprof_analyze/advisor/README.md b/profiler/msprof_analyze/advisor/README.md index 18f0618566d937f18a205085e456947bc80ddc5a..31bc6c2fff41f952127d96432e9d866614fe697e 100644 --- a/profiler/msprof_analyze/advisor/README.md +++ b/profiler/msprof_analyze/advisor/README.md @@ -2,9 +2,9 @@ msprof-analyze的advisor功能是将Ascend PyTorch Profiler或者MindSpore Profiler采集的性能数据进行分析,并输出性能调优建议。 -Ascend PyTorch Profilerf采集方法请参见《[性能调优工具](https://www.hiascend.com/document/detail/zh/mindstudio/81RC1/T&ITools/Profiling/atlasprofiling_16_0090.html)》,MindSpore Profiler采集方法请参见《[性能调试](https://www.mindspore.cn/mindinsight/docs/zh-CN/r2.3/performance_profiling_ascend.html)》。 +Ascend PyTorch Profiler采集方法请参见《[性能调优工具](https://www.hiascend.com/document/detail/zh/mindstudio/81RC1/T&ITools/Profiling/atlasprofiling_16_0090.html)》,MindSpore Profiler采集方法请参见《[性能调试](https://www.mindspore.cn/mindinsight/docs/zh-CN/r2.3/performance_profiling_ascend.html)》。 -## 工具使用(命令行方式方式) +## 工具使用(命令行方式) ### 约束 @@ -12,7 +12,7 @@ CANN软件版本8.0RC1之前仅支持对text格式文件分析,8.0RC1及之后 ### 操作步骤 -1. 参见《[性能工具](../README.md)》完成工具安装。建议安装最新版本。 +1. 参见《[性能工具](./../README.md)》完成工具安装。建议安装最新版本。 2. 执行分析。 @@ -34,7 +34,7 @@ CANN软件版本8.0RC1之前仅支持对text格式文件分析,8.0RC1及之后 msprof-analyze advisor schedule -d $HOME/profiling_data/ ``` - 以上命令更多参数介绍请参见“**命令详解**”。 + 以上命令更多参数介绍请参见[命令详解](#命令详解)。 单卡场景需要指定到性能数据文件`*_ascend_pt`或`*_ascend_ms`目录;多卡或集群场景需要指定到`*_ascend_pt`或`*_ascend_ms`目录的父目录层级。 @@ -44,7 +44,7 @@ CANN软件版本8.0RC1之前仅支持对text格式文件分析,8.0RC1及之后 `mstt_advisor_{timestamp}.xlsx`文件内容与执行终端输出一致。 - `mstt_advisor_{timestamp}.html`文件分析详见“**报告解析**”。 + `mstt_advisor_{timestamp}.html`文件分析详见[报告解析](#报告解析无标杆)。 执行终端输出示例如下: @@ -74,41 +74,41 @@ msprof-analyze advisor命令行包含如下三个参数: - computation - 计算瓶颈:包含下表中computing和Kernel compare功能。 + 计算瓶颈:包含下表中computation和Kernel compare功能。 - schedule - 调度瓶颈:包含下表中scheduling和API compare功能。 + 调度瓶颈:包含下表中schedule和API compare功能。 下表中字段为advisor的完整功能点,由all、computation和schedule控制启动。 -| dimension | mode | 参数释义 | 支持场景 | -| ---------- |---------------------------------------| ------------------------------------ | ------------------------------------ | -| overall | Overall Summary | 计算、通信、空闲等维度对性能数据进行拆解 | PyTorch、MindSpore | -| | Environment Variable Issues | 环境变量设置推荐 | PyTorch | -| | slow rank | 慢卡识别 | PyTorch、MindSpore | -| | slow link | 慢链路识别 | PyTorch、MindSpore | -| computation | AICPU Issues | AI CPU调优 | PyTorch、MindSpore | -| | Operator Dynamic Shape Issues | 识别动态Shape算子 | PyTorch | -| | AI Core Performance Analysis | MatMul、FlashAttentionScore、AI_VECTOR_CORE和MIX_AIV类算子的性能分析 | PyTorch | -| | Block Dim Issues | Block Dim算子调优 | PyTorch、MindSpore | -| | Operator No Bound Issues | 算子瓶颈分析 | PyTorch、MindSpore | -| | Fusion Issues | 融合算子图调优 | PyTorch、MindSpore | -| | AI Core Frequency Issues | AI Core算子降频分析 | PyTorch、MindSpore | -|communication| Packet Analysis |通信小包检测 |PyTorch、MindSpore | -|| Bandwidth Contention Analysis |通信计算带宽抢占检测 |PyTorch、MindSpore | -|| Communication Retransmission Analysis |通信重传检测 |PyTorch、MindSpore | -|| Byte Alignment Analysis |通信算子字节对齐检测,传输类型为SDMA的通信算子,数据量需要被512字节整除,保证传输带宽不会下降 |PyTorch、MindSpore | -| schedule | Affinity API Issues | 亲和API替换调优 | PyTorch、MindSpore | -| | Operator Dispatch Issues | 识别算子下发问题(路径3/路径5) | PyTorch | -| | SyncBatchNorm Issues | BatchNorm同步检测 | PyTorch、MindSpore | -| | Synchronize Stream Issues | 流同步检测 | PyTorch、MindSpore | -| | GC Analysis | 识别异常垃圾回收事件。需要Ascend PyTorch Profiler采集时开启experimental_config下的gc_delect_threshold功能 | PyTorch | -| | Fusible Operator Analysis | 检测具有Host瓶颈或者MTE瓶颈的算子序列,可用于代码优化或开发可融合算子 | PyTorch、MindSpore | -| dataloader | Slow Dataloader Issues | 异常dataloader检测 | PyTorch、MindSpore | -| memory | Memory Operator Issues | 识别异常的内存申请释放操作 | PyTorch、MindSpore | -| comparison | Kernel compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的Kernel数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | PyTorch、MindSpore | -| | Api compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的API数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | PyTorch | +| dimension | mode | 参数释义 | 支持场景 | +| ---------- |---------------------------------------|-------------------------------------------------------------------------------------| ------------------------------------ | +| overall | Overall Summary | 计算、通信、空闲等维度对性能数据进行拆解 | PyTorch、MindSpore | +| | Environment Variable Issues | 环境变量设置推荐 | PyTorch | +| | slow rank | 慢卡识别 | PyTorch、MindSpore | +| | slow link | 慢链路识别 | PyTorch、MindSpore | +| computation | AICPU Issues | AI CPU调优 | PyTorch、MindSpore | +| | Operator Dynamic Shape Issues | 识别动态Shape算子 | PyTorch | +| | AI Core Performance Analysis | MatMul、FlashAttentionScore、AI_VECTOR_CORE和MIX_AIV类算子的性能分析 | PyTorch | +| | Block Dim Issues | Block Dim算子调优 | PyTorch、MindSpore | +| | Operator No Bound Issues | 算子瓶颈分析 | PyTorch、MindSpore | +| | Fusion Issues | 融合算子图调优 | PyTorch、MindSpore | +| | AI Core Frequency Issues | AI Core算子降频分析 | PyTorch、MindSpore | +|communication| Packet Analysis | 通信小包检测 |PyTorch、MindSpore | +|| Bandwidth Contention Analysis | 通信计算带宽抢占检测 |PyTorch、MindSpore | +|| Communication Retransmission Analysis | 通信重传检测 |PyTorch、MindSpore | +|| Byte Alignment Analysis | 通信算子字节对齐检测,传输类型为SDMA的通信算子,数据量需要被512字节整除,保证传输带宽不会下降 |PyTorch、MindSpore | +| schedule | Affinity API Issues | 亲和API替换调优 | PyTorch、MindSpore | +| | Operator Dispatch Issues | 识别算子下发问题(路径3/路径5) | PyTorch | +| | SyncBatchNorm Issues | BatchNorm同步检测 | PyTorch、MindSpore | +| | Synchronize Stream Issues | 流同步检测 | PyTorch、MindSpore | +| | GC Analysis | 识别异常垃圾回收事件。需要Ascend PyTorch Profiler采集时开启experimental_config下的gc_detect_threshold功能 | PyTorch | +| | Fusible Operator Analysis | 检测具有Host瓶颈或者MTE瓶颈的算子序列,可用于代码优化或开发可融合算子 | PyTorch、MindSpore | +| dataloader | Slow Dataloader Issues | 异常dataloader检测 | PyTorch、MindSpore | +| memory | Memory Operator Issues | 识别异常的内存申请释放操作 | PyTorch、MindSpore | +| comparison | Kernel compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的Kernel数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | PyTorch、MindSpore | +| | Api compare of Rank\* Step\* and Rank\* Step\* | 识别标杆和待比对性能数据的API数据(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比) | PyTorch | 集群场景时自动进行cluster和overall的environment_variable_analysis解析,单卡时自动进行overall解析。 @@ -117,35 +117,35 @@ msprof-analyze advisor命令行包含如下三个参数: - 总体性能瓶颈 ```bash - msprof-analyze advisor all -d {profiling_path} [-bp benchmark_profiling_path] [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [--language language] [--debug] [-h] + msprof-analyze advisor all -d {profiling_path} [-bp benchmark_profiling_path] [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [-l language] [--debug] [-h] ``` - 计算瓶颈 ```bash - msprof-analyze advisor computation -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [--language language] [--debug] [-h] + msprof-analyze advisor computation -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [-pt profiling_type] [--force] [-l language] [--debug] [-h] ``` - 调度瓶颈 ```bash - msprof-analyze advisor schedule -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [--force] [--language language] [--debug] [-h] + msprof-analyze advisor schedule -d {profiling_path} [-o output_path] [-cv cann_version] [-tv torch_version] [--force] [-l language] [--debug] [-h] ``` #### 参数介绍 -| 参数 | 说明 | 是否必选 | -| ---------------------------------- | ------------------------------------------------------------ | -------- | -| -d
--profiling_path | 性能数据文件或目录所在路径,Ascend PyTorch Profiler采集场景指定为`*_ascend_pt`性能数据结果目录,MindSpore Profiler采集场景指定为`*_ascend_ms`性能数据结果目录。集群数据需要指定到`*_ascend_pt`或`*_ascend_ms`的父目录。 | 是 | -| -bp
--benchmark_profiling_path | 基准性能数据所在目录,用于性能比对。性能数据通过Profiling工具采集获取。
**computation和schedule不支持该参数。** | 否 | -| -o
--output_path | 分析结果输出路径,完成advisor分析操作后会在该目录下保存分析结果数据。默认未配置,为当前目录。 | 否 | -| -cv
--cann_version | 使用Profiling工具采集时对应的CANN软件版本。目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”、“7.0.0”、“8.0.RC1”,此字段不填默认按“8.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题。可通过在环境中执行如下命令获取其version字段:`cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info` | 否 | -| -tv
--torch_version | 运行环境的torch版本,默认为1.11.0,支持torch1.11.0和torch2.1.0,当运行环境torch版本为其他版本如torch1.11.3时,可以忽略小版本号差异选择相近的torch版本如1.11.0。 | 否 | -| -pt
--profiling_type | 配置性能数据采集使用的Profiling工具类型。可取值:
pytorch:使用Ascend PyThon Profiler接口方式采集的性能数据时配置,默认值。
mindspore:使用MindSpore Profiler接口方式采集的性能数据时配置。
mslite:使用[Benchmark](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_bench)工具采集的性能数据时配置。不建议使用。
**schedule不支持该参数。** | 否 | -| --force | 强制执行advisor。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | -| -l
--language | 设置分析结果输出的语言,可取值:
cn:输出中文,默认值。
en:输出英文。 | 否 | -| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。配置该参数表示开启Debug,默认未配置表示关闭。 | 否 | -| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | +| 参数 | 说明 | 是否必选 | +| ---------------------------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- | +| -d
--profiling_path | 性能数据文件或目录所在路径,Ascend PyTorch Profiler采集场景指定为`*_ascend_pt`性能数据结果目录,MindSpore Profiler采集场景指定为`*_ascend_ms`性能数据结果目录。集群数据需要指定到`*_ascend_pt`或`*_ascend_ms`的父目录。 | 是 | +| -bp
--benchmark_profiling_path | 基准性能数据所在目录,用于性能比对。性能数据通过Profiling工具采集获取。
**computation和schedule不支持该参数。** | 否 | +| -o
--output_path | 分析结果输出路径,完成advisor分析操作后会在该目录下保存分析结果数据。默认未配置,为当前目录。 | 否 | +| -cv
--cann_version | 使用Profiling工具采集时对应的CANN软件版本。目前配套的兼容版本为“6.3.RC2”,“7.0.RC1”、“7.0.0”、“8.0.RC1”,此字段不填默认按“8.0.RC1”版本数据进行处理,其余版本采集的Profiling数据在分析时可能会导致不可知问题。可通过在环境中执行如下命令获取其version字段:`cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info` | 否 | +| -tv
--torch_version | 运行环境的torch版本,默认为1.11.0,支持torch1.11.0和torch2.1.0,当运行环境torch版本为其他版本如torch1.11.3时,可以忽略小版本号差异选择相近的torch版本如1.11.0。 | 否 | +| -pt
--profiling_type | 配置性能数据采集使用的Profiling工具类型。可取值:
pytorch:使用Ascend Pytorch Profiler接口方式采集的性能数据时配置,默认值。
mindspore:使用MindSpore Profiler接口方式采集的性能数据时配置。
mslite:使用[Benchmark](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_bench)工具采集的性能数据时配置。不建议使用。
**schedule不支持该参数。** | 否 | +| --force | 强制执行advisor。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | +| -l
--language | 设置分析结果输出的语言,可取值:
cn:输出中文,默认值。
en:输出英文。 | 否 | +| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。配置该参数表示开启Debug,默认未配置表示关闭。 | 否 | +| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | ### 报告解析(无标杆) @@ -245,7 +245,7 @@ computation模块从device计算性能维度进行分析,能够识别AI CPU、 ![AI_Core_Performance_Analysis](./img/AI_Core_Performance_analysis.png) -上图中torch_npu.npu.set_compile_mode接口介绍请参见[torch_npu.npu.set_compile_mode](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/apiref/apilist/ptaoplist_000880.html);AICPU算子替换样例可参考《[Samples of AI CPU Operator Replacement](https://gitee.com/ascend/mstt/blob/master/profiler/msprof_analyze/advisor/doc/Samples%20of%20AI%20CPU%20Operator%20Replacement.md)》。 +上图中torch_npu.npu.set_compile_mode接口介绍请参见[torch_npu.npu.set_compile_mode](https://www.hiascend.com/document/detail/zh/Pytorch/710/apiref/torchnpuCustomsapi/context/%EF%BC%88beta%EF%BC%89torch_npu-npu-set_compile_mode.md);AICPU算子替换样例可参考《[Samples of AI CPU Operator Replacement](https://gitee.com/ascend/mstt/blob/master/profiler/msprof_analyze/advisor/doc/Samples%20of%20AI%20CPU%20Operator%20Replacement.md)》。 当存在pp stage(流水线并行)时,computation会按stage分析,每个stage就是一个流水线切分,比如0\~7卡为stage-0、8\~15卡为stage-1。 @@ -255,7 +255,7 @@ dataloader模块包含Slow Dataloader Issues,主要检测异常高耗时的dat ![dataloader](./img/dataloader.png) -上图中的`pin_memory`(内存锁定)和`num_workers`(数据加载是子流程数量)参数为[数据加载优化](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/ptmoddevg/trainingmigrguide/performance_tuning_0019.html)使用。 +上图中的`pin_memory`(内存锁定)和`num_workers`(数据加载是子流程数量)参数为[数据加载优化](https://www.hiascend.com/document/detail/zh/Pytorch/710/ptmoddevg/trainingmigrguide/performance_tuning_0026.html)使用。 schedule模块包含GC Analysis、亲和API、aclOpCompile、SyncBatchNorm、SynchronizeStream和Fusible Operator Analysis等多项检测。 @@ -293,7 +293,7 @@ schedule模块包含GC Analysis、亲和API、aclOpCompile、SyncBatchNorm、Syn ![schedule_2](./img/schedule_2.png) -上图中的ASCEND_LAUNCH_BLOCKING环境变量介绍请参见[ASCEND_LAUNCH_BLOCKING](https://www.hiascend.com/document/detail/zh/canncommercial/80RC22/apiref/envvar/envref_07_0050.html)。 +上图中的ASCEND_LAUNCH_BLOCKING环境变量介绍请参见[ASCEND_LAUNCH_BLOCKING](https://www.hiascend.com/document/detail/zh/Pytorch/710/comref/Envvariables/Envir_006.html)。 如下图示例,Operator Dispatch Issues提示需要在运行脚本的最开头添加如下代码用于消除aclOpCompile: @@ -302,11 +302,11 @@ torch_npu.npu.set_compile_mode(jit_compile=False); torch_npu.npu.config.allow_internal_format = False ``` -以上接口介绍请参见[torch_npu.npu.set_compile_mode](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/apiref/apilist/ptaoplist_000880.html)和[torch_npu.npu.config.allow_internal_format](https://www.hiascend.com/document/detail/zh/Pytorch/60RC2/apiref/apilist/ptaoplist_000216.html)。 +以上接口介绍请参见[torch_npu.npu.set_compile_mode](https://www.hiascend.com/document/detail/zh/Pytorch/710/apiref/torchnpuCustomsapi/context/%EF%BC%88beta%EF%BC%89torch_npu-npu-set_compile_mode.md)和[torch_npu.npu.config.allow_internal_format](https://www.hiascend.com/document/detail/zh/Pytorch/710/apiref/torchnpuCustomsapi/context/%EF%BC%88beta%EF%BC%89torch_npu-npu-config-allow_internal_format.md)。 ![输入图片说明](./img/schedule_1.png) -上图中aclopCompileAndExecute接口介绍请参见[aclopCompileAndExecute](https://www.hiascend.com/document/detail/zh/canncommercial/80RC22/apiref/appdevgapi/aclcppdevg_03_0243.html)。 +上图中aclopCompileAndExecute接口介绍请参见[aclopCompileAndExecute](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/API/appdevgapi/aclcppdevg_03_0251.html)。 ### 报告解析(有标杆) @@ -316,8 +316,8 @@ torch_npu.npu.config.allow_internal_format = False 有标杆集群场景: -- overall模块进行快慢卡和快慢链路分析,与无标杆集群场景一致,请参见“**报告解析(无标杆)** > **overall模块的分析**”。 -- 提供Environment Variable Issues,与无标杆单卡场景一致,请参见“**报告解析(无标杆)** > **overall模块的分析**”。 +- overall模块进行快慢卡和快慢链路分析,与无标杆集群场景一致,请参见“**报告解析(无标杆)** > [**overall模块的分析**](#overall模块的分析)”。 +- 提供Environment Variable Issues,与无标杆单卡场景一致,请参见“**报告解析(无标杆)** > [**overall模块的分析**](#overall模块的分析)”。 - 有标杆集群场景同样提供comparison模块(无标杆场景是集群内部快慢卡的性能数据对比,有标杆场景是两个集群之间存在明显耗时差异的相同卡之间的性能数据对比)。 comparison模块内容如下图示例,识别标杆和待比对性能数据的Kernel和API数据,包括: diff --git a/profiler/msprof_analyze/advisor/doc/Samples of AI CPU Operator Replacement.md b/profiler/msprof_analyze/advisor/doc/Samples of AI CPU Operator Replacement.md index 6a72ecee2e099b723b05681fb1ed54b2e4198155..2347d153134ad7b794a1ec8fb1899ca82008310c 100644 --- a/profiler/msprof_analyze/advisor/doc/Samples of AI CPU Operator Replacement.md +++ b/profiler/msprof_analyze/advisor/doc/Samples of AI CPU Operator Replacement.md @@ -121,7 +121,7 @@ masked_input[input_mask] = 0 masked_input *= ~input_mask ``` -此处是将IndexPut的masked_input是float类型的tensor数据,input_mask是和masked_input shape 一致的bool类型tensor或者01矩阵。由于是赋0操作,所以先对input_mask 取反后再进行乘法操作。 +此处masked_input是float类型的tensor数据,input_mask是和masked_input shape 一致的bool类型tensor或者01矩阵。由于是赋0操作,所以先对input_mask 取反后再进行乘法操作。 以赋0操作为例,在shape = (512, 32, 64) 类型float32 数据上测试,替换前耗时: 9.639978408813477 ms,替换之后耗时为 0.1747608184814453 ms,如下图,替换前,总体耗时在9.902ms,Host下发到device侧执行5个算子,其中aclnnIndexPutImpl_IndexPut_IndexPut是执行在 AICPU上。 diff --git a/profiler/msprof_analyze/advisor/doc/Samples of Fused Operator API Replacement.md b/profiler/msprof_analyze/advisor/doc/Samples of Fused Operator API Replacement.md index 9e88b0d94ac0c47dd2b181c00155e9bf3243cf79..12fdc7046eb721ec14edc46330b30423cb235b0f 100644 --- a/profiler/msprof_analyze/advisor/doc/Samples of Fused Operator API Replacement.md +++ b/profiler/msprof_analyze/advisor/doc/Samples of Fused Operator API Replacement.md @@ -6,7 +6,7 @@ torch_npu API的功能和参数描述见[API列表](https://www.hiascend.com/doc ## 优化器替换 -替换优化器一般都能有较大的性能受益,可以优先考虑将torch原生的优化器替换为[昇腾提供的亲和优化器](https://www.hiascend.com/document/detail/zh/canncommercial/63RC2/modeldevpt/ptmigr/ptmigr_0080.html)。下文以AdamW优化器为例,其他优化器的替换方式一致。 +替换优化器一般都能有较大的性能受益,可以优先考虑将torch原生的优化器替换为[昇腾提供的亲和优化器](https://www.hiascend.com/document/detail/zh/canncommercial/700/modeldevpt/ptmigr/AImpug_000062.html)。下文以AdamW优化器为例,其他优化器的替换方式一致。 ### torch_npu.optim.NpuFusedAdamW diff --git a/profiler/msprof_analyze/compare_tools/README.md b/profiler/msprof_analyze/compare_tools/README.md index 0e6d8765472e5972bb7cf813831f61e33e120d25..61231a4c13225934a43f067b612bc88e7dffd466 100644 --- a/profiler/msprof_analyze/compare_tools/README.md +++ b/profiler/msprof_analyze/compare_tools/README.md @@ -69,7 +69,7 @@ PyTorch Profiler采集结果数据目录结构如下: #### NPU性能数据采集 -通过Ascend PyTorch Profiler工具采集NPU的性能数据,采集参数配置与GPU基本一致,只需将GPU的性能数据采集代码中torch.profiler替换成torch_npu.profiler,参考链接:[NPU性能数据采集](https://gitee.com/ascend/mstt/tree/master/profiler/msprof_analyze#npu性能数据采集)。 +通过Ascend PyTorch Profiler工具采集NPU的性能数据,采集参数配置与GPU基本一致,只需将GPU的性能数据采集代码中torch.profiler替换成torch_npu.profiler,参考链接:[采集profiling性能数据指导](https://gitee.com/ascend/mstt/tree/master/profiler/msprof_analyze#采集profiling性能数据指导)。 Ascend PyTorch Profiler采集结果数据目录结构如下: @@ -133,13 +133,13 @@ MindSpore性能调试工具采集结果数据目录结构如下: ### 性能数据比对 -性能比对工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子(包括算子和nn.Module)、通信、调度三个维度,以打屏的形式输出总体指标,帮助用户定界劣化的方向。与此同时,工具还会生成performance_comparison_result_{timestamp}.xlsx,展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。详细介绍请参见“**比对结果说明**”。 +性能比对工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子(包括算子和nn.Module)、通信、调度三个维度,以打屏的形式输出总体指标,帮助用户定界劣化的方向。与此同时,工具还会生成performance_comparison_result_{timestamp}.xlsx,展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。详细介绍请参见[**比对结果说明**](#比对结果说明)。 性能比对工具支持使用**命令行**和**脚本**两种方式执行性能数据比对操作,这两种方式均支持**通用参数**和**算子性能比对特有参数**。 #### 命令行方式 -1. 参见《[性能工具](../README.md)》完成工具安装。 +1. 参见《[性能工具](./../README.md)》完成工具安装。 2. 执行如下命令进行性能数据比对: @@ -168,20 +168,20 @@ python performance_compare.py [基准性能数据文件所在路径] [比对性 #### 通用参数说明 -| 参数名 | 说明 | 是否必选 | torch_npu支持 | MindSpore支持 | -| ------------------------------ | ------------------------------------------------------------ | -------- | ------------- | ------------- | -| --enable_profiling_compare | 开启总体性能比对。 | 否 | 是 | 是 | -| --enable_operator_compare | 开启算子性能比对。该开关较耗时,建议只采集一个step的性能数据。支持扩展参数请参见“**算子性能比对特有参数说明**”。 | 否 | 是 | 否 | -| --enable_communication_compare | 开启通信性能比对。 | 否 | 是 | 是 | -| --enable_memory_compare | 开启算子内存比对。该开关较耗时,建议只采集一个step的性能数据。 | 否 | 是 | 否 | -| --enable_kernel_compare | 开启kernel性能比对。仅针对NPU与NPU比对的场景。支持扩展参数请参见“**kernel性能比对特有参数说明**”。 | 否 | 是 | 是 | -| --enable_api_compare | 开启API性能比对。需要使用性能数据中的trace_view.csv文件。 | 否 | 是 | 否 | -| --disable_details | 隐藏明细比对,只进行统计级比对。 | 否 | 是 | 是 | -| --base_step | 基准性能数据step ID,配置后使用基准性能数据对应step的数据进行比对。为整数,需配置实际数据存在的step ID,默认未配置,比对所有性能数据,需要与--comparison_step同时配置。配置示例:--base_step=1。
**仅--enable_profiling_compare(仅Db数据)、--enable_operator_compare、--enable_communication_compare、--enable_memory_compare、--enable_kernel_compare或--enable_api_compare开启时,该参数配置生效。** | 否 | 是 | 是 | +| 参数名 | 说明 | 是否必选 | torch_npu支持 | MindSpore支持 | +| ------------------------------ |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -------- | ------------- | ------------- | +| --enable_profiling_compare | 开启总体性能比对。 | 否 | 是 | 是 | +| --enable_operator_compare | 开启算子性能比对。该开关较耗时,建议只采集一个step的性能数据。支持扩展参数请参见[算子性能比对特有参数说明](#算子性能比对特有参数说明)。 | 否 | 是 | 否 | +| --enable_communication_compare | 开启通信性能比对。 | 否 | 是 | 是 | +| --enable_memory_compare | 开启算子内存比对。该开关较耗时,建议只采集一个step的性能数据。 | 否 | 是 | 否 | +| --enable_kernel_compare | 开启kernel性能比对。仅针对NPU与NPU比对的场景。支持扩展参数请参见[kernel性能比对特有参数说明](#kernel性能比对特有参数说明)。 | 否 | 是 | 是 | +| --enable_api_compare | 开启API性能比对。需要使用性能数据中的trace_view.json文件。 | 否 | 是 | 否 | +| --disable_details | 隐藏明细比对,只进行统计级比对。 | 否 | 是 | 是 | +| --base_step | 基准性能数据step ID,配置后使用基准性能数据对应step的数据进行比对。为整数,需配置实际数据存在的step ID,默认未配置,比对所有性能数据,需要与--comparison_step同时配置。配置示例:--base_step=1。
**仅--enable_profiling_compare(仅Db数据)、--enable_operator_compare、--enable_communication_compare、--enable_memory_compare、--enable_kernel_compare或--enable_api_compare开启时,该参数配置生效。** | 否 | 是 | 是 | | --comparison_step | 比对性能数据step ID,配置后使用比对性能数据对应step的数据进行比对。为整数,需配置实际数据存在的step ID,默认未配置,比对所有性能数据,需要与--base_step同时配置。配置示例:--comparison_step=1。
**仅--enable_profiling_compare(仅Db数据)、--enable_operator_compare、--enable_communication_compare、--enable_memory_compare、--enable_kernel_compare或--enable_api_compare开启时,该参数配置生效。** | 否 | 是 | 是 | -| --force | 强制执行compare。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | 是 | 是 | -| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。配置该参数表示开启Debug,默认未配置表示关闭。 | 否 | 是 | 是 | -| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | 是 | 是 | +| --force | 强制执行compare。配置后可强制跳过如下情况:
指定的目录、文件的用户属主不属于当前用户,忽略属主判断直接执行。
csv文件大于5G、json文件大于10G、db文件大于8G,忽略文件过大判断直接执行。
配置该参数表示开启强制执行,默认未配置表示关闭。 | 否 | 是 | 是 | +| --debug | 工具执行报错时可打开此开关,将会展示详细保存堆栈信息。配置该参数表示开启Debug,默认未配置表示关闭。 | 否 | 是 | 是 | +| -h,-H
--help | 在需要查询当前命令附属子命令或相关参数时,给出帮助建议。 | 否 | 是 | 是 | 说明:以上开关均不设置的情况下,**工具默认开启所有的性能比对**,当用户设置了以上开关,则按照用户设置的开关进行性能比对,示例如下: diff --git a/profiler/msprof_analyze/docs/custom_analysis_guide.md b/profiler/msprof_analyze/docs/custom_analysis_guide.md index 893892441144caeb5a608be16f686a8d2d2760d1..08479f938e0982c76a91b466e33c91532af78f1e 100644 --- a/profiler/msprof_analyze/docs/custom_analysis_guide.md +++ b/profiler/msprof_analyze/docs/custom_analysis_guide.md @@ -63,7 +63,7 @@ ```Python service = DatabaseService(profiler_db_path) service.add_table_for_query("ENUM_HCCL_DATA_TYPE", ["id", "name"]) # 第一个参数:表名;第二个参数:字段列表,默认为None,当不填写时表明select * - service.add_table_for_query("STRING_IDS", ["id", "value"]) #可 以添加多个表 + service.add_table_for_query("STRING_IDS", ["id", "value"]) #可以添加多个表 df_dict = service.query_data() # 将配置的所有表按序查询,以dict形式返回,key为表名,value为数据库查询结果dataframe数据类型 ``` @@ -125,31 +125,3 @@ msprof-analyze cluster -d {cluster profiling data path} --mode xxx --top_num 10 ``` -## 开发和上库流程规范 - -开发要遵守以下流程规范。 - -1. **需求澄清和串讲** - - 确定要做该需求后,首先要明确该需求的**迭代时间**,开发流程需要严格遵守我们的迭代时间,参加该需求的需求澄清以及串讲(我们会安排相应会议)。需求澄清可由DE完成(对齐输入输入以及流程图),需求串讲需要开发者来完成,串讲时需要准备**设计文档和测试用例**(有文档模版,可以跟SE或者DE联系拿到)。 - -2. **UT** - - 为了保证后面的开发者修改你的代码时不会影响你的功能,或者能够感知这次修改的影响,比如算法实现、字段变更等,需要在上库的同时添加UT。 - UT的编写可以参考已经上库的其他用例,建议四段式命名:test_{目标方法名}_should_{预期结果}_when_{分支条件}_given_{输入参数},可以灵活使用mock方式构造虚拟返回。 - -3. **资料编写** - - 目前,如果新增一个分析能力,需要在[操作步骤](#操作步骤)的第2小节的“--mode参数说明”中添加对应参数的说明,简洁说明该分析能力的作用以及输入输出。 - 另外,需要在[recipe结果和cluster_analysis.db交付件表结构说明](#recipe结果和cluster_analysisdb交付件表结构说明)中添加表结构说明,明确输入输出。可以详细说明你的分析能力的**主要场景、用途甚至是算法原理**,保证用户知道这个分析能力的能做什么,对调优有什么帮助。(参考[freq_analysis](#freq_analysis)的说明) - -4. **CI** - - 正常商发需求合入master分支;预研需求合入pre-research分支;poc需求合入poc分支。 - 提了PR之后,可以评论**compile**,触发线上CI,会跑cleancode和冒烟,只有全绿,才可以发起代码检视。PR合入需要lgtm标签和approve标签(群里有相应的committer可以加标签)。 - -5. **代码检视** - - 代码上库,需要经过检视,可以将链接发到**msprof-analyze代码检视群**,说明该PR的标题,然后@相关人进行检视。修改完检视意见后再次@commiter,合代码。 - 为了让结果可信以及方便其他开发或者测试使用这个分析能力,需要编写测试用例并提供**自验报告**作为凭证。 - 注:cluster_analysis.db里面的表格,统一遵守表名大驼峰,列名小驼峰的命名规则。 \ No newline at end of file diff --git a/profiler/msprof_analyze/docs/development_workflow.md b/profiler/msprof_analyze/docs/development_workflow.md new file mode 100644 index 0000000000000000000000000000000000000000..e67f82b33c9eb3a3e09478a1c17620aed3905015 --- /dev/null +++ b/profiler/msprof_analyze/docs/development_workflow.md @@ -0,0 +1,28 @@ +# 开发和上库流程规范 + +开发要遵守以下流程规范。 + +1. **需求澄清和串讲** + + 确定要做该需求后,首先要明确该需求的**迭代时间**,开发流程需要严格遵守我们的迭代时间,参加该需求的需求澄清以及串讲(我们会安排相应会议)。需求澄清可由DE完成(对齐输入输入以及流程图),需求串讲需要开发者来完成,串讲时需要准备**设计文档和测试用例**(有文档模版,可以跟SE或者DE联系拿到)。 + +2. **UT** + + 为了保证后面的开发者修改你的代码时不会影响你的功能,或者能够感知这次修改的影响,比如算法实现、字段变更等,需要在上库的同时添加UT。 + UT的编写可以参考已经上库的其他用例,建议四段式命名:test_{目标方法名}_should_{预期结果}_when_{分支条件}_given_{输入参数},可以灵活使用mock方式构造虚拟返回。 + +3. **资料编写** + + 目前,如果新增一个分析能力,需要在[操作步骤](#操作步骤)的第2小节的“--mode参数说明”中添加对应参数的说明,简洁说明该分析能力的作用以及输入输出。 + 另外,需要在[recipe结果和cluster_analysis.db交付件表结构说明](#recipe结果和cluster_analysisdb交付件表结构说明)中添加表结构说明,明确输入输出。可以详细说明你的分析能力的**主要场景、用途甚至是算法原理**,保证用户知道这个分析能力的能做什么,对调优有什么帮助。(参考[freq_analysis](#freq_analysis)的说明) + +4. **CI** + + 正常商发需求合入master分支;预研需求合入pre-research分支;poc需求合入poc分支。 + 提了PR之后,可以评论**compile**,触发线上CI,会跑cleancode和冒烟,只有全绿,才可以发起代码检视。PR合入需要lgtm标签和approve标签(群里有相应的committer可以加标签)。 + +5. **代码检视** + + 代码上库,需要经过检视,可以将链接发到**msprof-analyze代码检视群**,说明该PR的标题,然后@相关人进行检视。修改完检视意见后再次@commiter,合代码。 + 为了让结果可信以及方便其他开发或者测试使用这个分析能力,需要编写测试用例并提供**自验报告**作为凭证。 + 注:cluster_analysis.db里面的表格,统一遵守表名大驼峰,列名小驼峰的命名规则。 \ No newline at end of file diff --git a/profiler/msprof_analyze/docs/recipe_output_format.md b/profiler/msprof_analyze/docs/recipe_output_format.md index 4497228223f3e0cc128dafe711bc30249a9d8145..626486340191a3b4129ae476eb3a8d439e597b0e 100644 --- a/profiler/msprof_analyze/docs/recipe_output_format.md +++ b/profiler/msprof_analyze/docs/recipe_output_format.md @@ -49,7 +49,7 @@ O列:TP Index,指集群数据按照并行策略切分后所属TP组的索引 * 根据Communication(Not Overlapped and Exclude Receive)时间判断是否通信耗时占比过大。 -* 根据Bubble时间的占比和理论计算公式判断bubble设置是否合理,是否stage间有不均衡现象。 +* 根据Bubble时间的占比和理论计算公式判断bubble设置是否合理,stage间是否有不均衡现象。 以上时间理论上都应该处于持平状态,即最大值小于最小值5%,否则就可能出现慢卡。 @@ -57,7 +57,7 @@ O列:TP Index,指集群数据按照并行策略切分后所属TP组的索引 数据解析模式为communication_matrix或all时生成。 -直接打开json(vscode或json查看器), 搜索"Total", 会有多个搜索结果,一般来说链路带宽信息的结构: +直接打开json(vscode或json查看器),搜索"Total",会有多个搜索结果,一般来说链路带宽信息的结构: ```bash {src_rank}-{dst_rank}: { @@ -469,7 +469,7 @@ O列:TP Index,指集群数据按照并行策略切分后所属TP组的索引 说明: -对应第二种情况。 +对应第二种情况:当npu空闲时间较长时,设备会自动降频,会掉到800MHz。 格式: @@ -482,7 +482,7 @@ O列:TP Index,指集群数据按照并行策略切分后所属TP组的索引 说明: -对应第三种情况。 +对应第三种情况:当npu因为各种原因,出现降频现象时,除了1800MHz,800MHz,还有出现其他异常频率。 格式: @@ -527,32 +527,6 @@ O列:TP Index,指集群数据按照并行策略切分后所属TP组的索引 | tokensDiff | INTEGER | 同一个ep内最大值与最小值之间的差值 | -### filter_db - -设置-m filter_db时,不会生成cluster_analysis.db,会将原始db进行过滤,使得集群数据变小,有时候甚至能减少90%,将TB级数据过滤至GB级。过滤后的数据依旧可以在MindStudio Insight中呈现。 - -**说明:最好指定-o 参数,指定提取后的集群数据的目录。** - -示例:msprof-analyze cluster -d {cluster_profiling_data_path} -m filter_db -o {output_dir} - -结果示例: -``` -output_dir -├── cluster_analysis_output -├── ├── filter_db -├── ├── ├── xxx_ascend_pt -├── ├── ├── ├── ASCEND_PROFILER_OUTPUT -├── ├── ├── ├── ├── ascend_pytorch_profiler_x.db -├── ├── ├── xxx_ascend_pt -├── ├── ├── …… -``` - -过滤逻辑: - -1. 删除COMMUNICATION_TASK_INFO和TASK_PMU_INFO -2. 获取所有的COMMUNICATION_OP全保留,获取全部的connectionId集合 -3. 根据opType(TOP算子FA、MatMul、GroupedMatmul)筛选COMPUTE_TASK_INFO和TASK(通过globalTaskId进行关联)数据,同时获取筛选出来的connectionId集合。 -4. 逻辑2和逻辑3的connectionId集合取并集,CANN_API、Pytorch_API的connectionId相同的数据保留,其他去掉。 ### mstx2commop