From 8890d18c909c2ccb1600e8f9c50791f8a2931900 Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Mon, 20 Nov 2023 17:06:24 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[att/profiler/cluster=5Fanalyse&distribute?= =?UTF-8?q?=5Ftools]=E5=B7=A5=E5=85=B7=E8=B5=84=E6=96=99=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/cluster_analyse/README.md | 25 +++++++++---------- profiler/distribute_tools/README.md | 38 ++++++++++++----------------- 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/profiler/cluster_analyse/README.md b/profiler/cluster_analyse/README.md index 8981ac4530..4e2350d461 100644 --- a/profiler/cluster_analyse/README.md +++ b/profiler/cluster_analyse/README.md @@ -25,7 +25,7 @@ experimental_config = torch_npu.profiler._ExperimentalConfig( # 数据汇聚与集群解析 -将所有卡的数据汇集到一个目录下,在本目录下运行以下命令即可生 cluster_analysis_output文件夹。 +将所有卡的数据拷贝并汇集到一个目录下,在本目录下运行以下命令即可生成cluster_analysis_output文件夹。 ```shell python3 cluster_analysis.py -d {cluster profiling data path} @@ -34,11 +34,11 @@ python3 cluster_analysis.py -d {cluster profiling data path} | 参数名 | 说明 | | ---------------------- | --------------------------------------- | -| --collection_path (-d) | profiling数据汇集目录,运行分析脚本之后会在该目录下自动创建cluster_analysis_output文件夹,保存分析数据 | +| --collection_path (-d) | profiling数据汇集目录,运行分析脚本之后会在该目录下自动创建cluster_analysis_output文件夹,保存分析数据。 | # 交付件 -### 首先需要看 cluster_step_trace_time.csv +### cluster_step_trace_time.csv A列: Step数,是采集profiling是设置的,一般来说集群profiling采集一个step足够,如果采集多个step,需要先筛选一下。 @@ -48,13 +48,13 @@ C列:Index,与type相关,表示卡号。 D列:Computing, 此列统计计算时间。 -E列:Communication(Not Overlapped): 此列统计未被掩盖的通信耗时。 +E列:Communication(Not Overlapped),此列统计未被掩盖的通信耗时。 -F列:Overlapped: 统计计算与通信重叠的耗时。 +F列:Overlapped,统计计算与通信重叠的耗时。 -G列:Communication: 通信时间的全部耗时。 +G列:Communication,通信时间的全部耗时。 -H列:Free: 空闲时间,只device侧既不在通信也不在计算的耗时,可能在做sdma拷贝或者空等。 +H列:Free,空闲时间,只device侧既不在通信也不在计算的耗时,可能在做sdma拷贝或者空等。 I列:Stage时间,I、J、K列属于pp并行时有效的数值,stage时间代表除recieve算子时间外的时间。 @@ -62,7 +62,7 @@ J列:Bubble时间,指receive时间的总和。 K列:Communication(Not Overlapped and Exclude Receive)指剔除recieve算子外的并且不被掩盖的通信时间。 -**Tips**: +**Tips**: 先筛选B列type为stage, 看stage间是否有问题,再筛选B列type为rank吗,看rank是否有问题,根据以下几点排查。 * 根据Computing的时间差异判断是否有慢卡,或者有负载不均衡的现象。 @@ -75,12 +75,9 @@ K列:Communication(Not Overlapped and Exclude Receive)指剔除recieve算 ### cluster_communication_matrix.json -直接打开json(vscode或json查看器), +直接打开json(vscode或json查看器), 搜索"Total", 会有多个搜索结果,一般来说链路带宽信息的结构: -搜索"Total", 会有多个搜索结果, - -一般来说链路带宽信息的结构: -``` +```bash {src_rank}-{dst_rank}: { "Transport Type": "LOCAL", "Transit Time(ms)": 0.02462, @@ -88,7 +85,7 @@ K列:Communication(Not Overlapped and Exclude Receive)指剔除recieve算 "Bandwidth(GB/s)": 681.4466 } ``` -**Tips**: 可以根据rank互联的带宽以及链路类型,判断是否有慢链路的问题。 +**Tips**:可以根据rank互联的带宽以及链路类型,判断是否有慢链路的问题。 - "LOCAL"是片内拷贝,速率非常快,不需要考虑。 - “HCCS”或“PCIE”是节点内片间拷贝,速度在18GB左右或以上比较正常。 diff --git a/profiler/distribute_tools/README.md b/profiler/distribute_tools/README.md index efc91d94cb..3d4bb5d2e9 100644 --- a/profiler/distribute_tools/README.md +++ b/profiler/distribute_tools/README.md @@ -1,5 +1,5 @@ # 功能介绍 -集群场景下,通过此工具来进行集群数据的拷贝,将多个机器上的profiling数据拷贝到同一台机器上 +集群场景下,通过此工具来进行集群数据的拷贝,将多个节点上的性能数据拷贝到同一个节点上。 # 操作指导 当前拷贝工具支持多台环境的数据拷贝到一台机器上,主要操作步骤如下: @@ -7,39 +7,31 @@ ```json { "cluster": { - "10.xxx.xxx.1": { - "user": "root", - "passwd": "xxx", - "dir": "/home/data/test" + "10.xxx.xxx.1": { // 待拷贝的节点IP + "user": "root", // 访问节点的用户名 + "passwd": "xxx", // 用户密码 + "dir": "/home/data/test" // 指定性能数据所在路径 }, "10.xxx.xxx.2": { "user": "root", "passwd": "xxx", "dir": "/home/data/test" + ... // 有多少个节点就要配置多少个IP } } } ``` -用来配置各个环境的ip地址以及用户名和密码,有多少台机器需要拷贝就配置多少个ip -dir表示profiling所在的路径 ### 调用 cluster_profiling_data_copy.sh 脚本 -```shell -bash cluster_profiling_data_copy.sh config_path target_dir -``` -#### 参数说明 -config_path:配置文件相对于 cluster_profiling_data_copy.sh 的路径,比如: ./config.json -target_dir: 要存储在本机上的路径 -#### 参数说明 -| 参数名 | 说明 | -| ---------------------- | --------------------------------------- | -| config_path | 配置文件相对于 cluster_profiling_data_copy.sh 的路径,比如: ./config.json | -| target_dir | 要存储在本机上的路径 | +```bash +bash cluster_profiling_data_copy.sh config_path target_dir +``` +- 请确保config.json文件配置正确的IP地址、用户名以及性能数据路径信息以及对配置的节点有适当的访问权限。 +- 请确保命令指定的文件和目录下无同名文件,以免造成同名覆盖。 -``` -**Tips**: 注意config的配置 -- shell文件使用的是scp命令,确保在使用该命令时使用正确的用户名、主机名以及路径信息。 -- 确保你有适当的权限来访问远程服务器 -- 注意提供正确的路径和目标地址,以免意外覆盖和删除文件 +| 参数名 | 说明 | +| ----------- | ------------------------------------------------------------ | +| config_path | config.json配置文件相对于cluster_profiling_data_copy.sh的路径,例如:./config.json。 | +| target_dir | 拷贝后的性能数据存储在本节点上的路径。 | -- Gitee From b78bb4e5dbc1b7d6e173a61aa6d9cd44ae973dc9 Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Mon, 20 Nov 2023 17:16:22 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[att/profiler/cluster=5Fanalyse&distribute?= =?UTF-8?q?=5Ftools]=E5=B7=A5=E5=85=B7=E8=B5=84=E6=96=99=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/distribute_tools/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/profiler/distribute_tools/README.md b/profiler/distribute_tools/README.md index 3d4bb5d2e9..f0b640d2d1 100644 --- a/profiler/distribute_tools/README.md +++ b/profiler/distribute_tools/README.md @@ -2,7 +2,7 @@ 集群场景下,通过此工具来进行集群数据的拷贝,将多个节点上的性能数据拷贝到同一个节点上。 # 操作指导 -当前拷贝工具支持多台环境的数据拷贝到一台机器上,主要操作步骤如下: +当前拷贝工具支持多台环境的数据拷贝到同一节点上,主要操作步骤如下: ### 配置config.json文件 ```json { @@ -21,14 +21,14 @@ } } ``` -### 调用 cluster_profiling_data_copy.sh 脚本 +### 调用cluster_profiling_data_copy.sh脚本 ```bash bash cluster_profiling_data_copy.sh config_path target_dir ``` -- 请确保config.json文件配置正确的IP地址、用户名以及性能数据路径信息以及对配置的节点有适当的访问权限。 -- 请确保命令指定的文件和目录下无同名文件,以免造成同名覆盖。 +- 请确保config.json文件配置正确的IP地址、用户名、性能数据路径信息并对配置的节点有适当的访问权限。 +- 请确保命令指定的目录下无同名文件,以免造成同名覆盖。 | 参数名 | 说明 | | ----------- | ------------------------------------------------------------ | -- Gitee From 2f02820f1f2303392497d6e44d7b8b66f39aa80f Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Thu, 23 Nov 2023 16:25:40 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[att\profiler]=E4=BD=BF=E7=94=A8=E6=89=8B?= =?UTF-8?q?=E5=86=8C=E4=BC=98=E5=8C=96=E5=90=8C=E4=B8=80=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/cluster_analyse/README.md | 10 +++++----- profiler/compare_tools/README.md | 3 +-- profiler/distribute_tools/README.md | 6 +++--- profiler/merge_profiling_timeline/README.md | 6 ++---- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/profiler/cluster_analyse/README.md b/profiler/cluster_analyse/README.md index 4e2350d461..f10ecb97d2 100644 --- a/profiler/cluster_analyse/README.md +++ b/profiler/cluster_analyse/README.md @@ -1,7 +1,7 @@ -# 功能介绍 -集群场景下,通过此工具来进行集群数据的分析,当前主要对基于通信域的迭代内耗时分析、通信时间分析以及通信矩阵分析为主, 从而定位慢卡、慢节点以及慢链路问题。 +# 集群分析工具 +cluster_analyse(集群分析工具)是在集群场景下,通过此工具来进行集群数据的分析,当前主要对基于通信域的迭代内耗时分析、通信时间分析以及通信矩阵分析为主, 从而定位慢卡、慢节点以及慢链路问题。 -# 数据采集 +## 性能数据采集 当前集群调优工具主要支持Ascend Pytorch Profiler采集方式下的集群数据。 我们要求至少是L1级别的数据。 @@ -23,7 +23,7 @@ experimental_config = torch_npu.profiler._ExperimentalConfig( 确认这几个文件生成后,继续下面的集群分析。 -# 数据汇聚与集群解析 +## 数据汇聚与集群解析 将所有卡的数据拷贝并汇集到一个目录下,在本目录下运行以下命令即可生成cluster_analysis_output文件夹。 @@ -36,7 +36,7 @@ python3 cluster_analysis.py -d {cluster profiling data path} | ---------------------- | --------------------------------------- | | --collection_path (-d) | profiling数据汇集目录,运行分析脚本之后会在该目录下自动创建cluster_analysis_output文件夹,保存分析数据。 | -# 交付件 +## 交付件 ### cluster_step_trace_time.csv diff --git a/profiler/compare_tools/README.md b/profiler/compare_tools/README.md index df0622da64..ff847297be 100644 --- a/profiler/compare_tools/README.md +++ b/profiler/compare_tools/README.md @@ -1,7 +1,6 @@ # 性能比对工具 -## 简介 -性能比对工具支持比较GPU与NPU之间、NPU与NPU之间的性能差异,通过对训练耗时和内存占用的比对分析,定位到具体劣化的算子,帮助用户提升性能调优的效率。工具将训练耗时拆分为算子、通信、调度三大维度,并针对算子和通信分别进行算子级别的比对;将训练占用的总内存,拆分成算子级别的内存占用进行比对。 +compare_tools(性能比对工具)支持比较GPU与NPU之间、NPU与NPU之间的性能差异,通过对训练耗时和内存占用的比对分析,定位到具体劣化的算子,帮助用户提升性能调优的效率。工具将训练耗时拆分为算子、通信、调度三大维度,并针对算子和通信分别进行算子级别的比对;将训练占用的总内存,拆分成算子级别的内存占用进行比对。 ## 使用场景 场景一:PyTorch训练工程从GPU迁移至NPU后出现性能劣化,通过工具分析出劣化点。 diff --git a/profiler/distribute_tools/README.md b/profiler/distribute_tools/README.md index f0b640d2d1..e8ae6f2a5c 100644 --- a/profiler/distribute_tools/README.md +++ b/profiler/distribute_tools/README.md @@ -1,7 +1,7 @@ -# 功能介绍 -集群场景下,通过此工具来进行集群数据的拷贝,将多个节点上的性能数据拷贝到同一个节点上。 +# 集群场景脚本集合工具 +distribute_tools(集群场景脚本集合工具)是在集群场景下,通过此工具来进行集群数据的拷贝,将多个节点上的性能数据拷贝到同一个节点上。 -# 操作指导 +## 操作指导 当前拷贝工具支持多台环境的数据拷贝到同一节点上,主要操作步骤如下: ### 配置config.json文件 ```json diff --git a/profiler/merge_profiling_timeline/README.md b/profiler/merge_profiling_timeline/README.md index 0a47f18810..054391595f 100644 --- a/profiler/merge_profiling_timeline/README.md +++ b/profiler/merge_profiling_timeline/README.md @@ -1,8 +1,6 @@ -# Profiling merge timeline tool +# 合并大json工具 -## 简介 - -本工具支持合并Profiling的timeline数据,支持合并指定rank的timline、合并指定timeline中的item。 +merge_profiling_timeline(合并大json工具)支持合并Profiling的timeline数据,支持合并指定rank的timline、合并指定timeline中的item。 ## 多timeline融合 -- Gitee From 39d089b0199042bae6c1180f13dc72477e58cbdf Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Thu, 23 Nov 2023 16:34:41 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[att\profiler]=E4=BD=BF=E7=94=A8=E6=89=8B?= =?UTF-8?q?=E5=86=8C=E4=BC=98=E5=8C=96=E5=90=8C=E4=B8=80=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profiler/compare_tools/README.md | 107 +++++++++++--------- profiler/merge_profiling_timeline/README.md | 4 +- 2 files changed, 60 insertions(+), 51 deletions(-) diff --git a/profiler/compare_tools/README.md b/profiler/compare_tools/README.md index ff847297be..0c971842cf 100644 --- a/profiler/compare_tools/README.md +++ b/profiler/compare_tools/README.md @@ -1,8 +1,9 @@ # 性能比对工具 -compare_tools(性能比对工具)支持比较GPU与NPU之间、NPU与NPU之间的性能差异,通过对训练耗时和内存占用的比对分析,定位到具体劣化的算子,帮助用户提升性能调优的效率。工具将训练耗时拆分为算子、通信、调度三大维度,并针对算子和通信分别进行算子级别的比对;将训练占用的总内存,拆分成算子级别的内存占用进行比对。 +compare_tools(性能比对工具)支持比较GPU与NPU之间、NPU与NPU之间的性能差异,通过对训练耗时和内存占用的比对分析,定位到具体劣化的算子,帮助用户提升性能调优的效率。工具将训练耗时拆分为计算、通信、调度三大维度,并针对计算和通信分别进行算子级别的比对;将训练占用的总内存,拆分成算子级别的内存占用进行比对。 ## 使用场景 + 场景一:PyTorch训练工程从GPU迁移至NPU后出现性能劣化,通过工具分析出劣化点。 场景二:PyTorch训练工程在NPU上,不同版本之间存在性能差距,通过工具定位具体差异。 @@ -11,35 +12,42 @@ compare_tools(性能比对工具)支持比较GPU与NPU之间、NPU与NPU之 ### 环境依赖 -使用本工具前需要安装openpyxl: +使用本工具前需要安装的依赖包:prettytable、xlsxwriter、pandas、numpy ```bash -pip3 install openpyxl +pip3 install prettytable +pip3 install xlsxwriter +pip3 install pandas +pip3 install numpy ``` ### 性能数据采集 #### GPU性能数据采集 + 通过PyTorch Profiler工具采集GPU的性能数据,参考链接:https://pytorch.org/docs/stable/profiler.html 采集样例代码参考1: + ```Python with torch.profiler.profile( - profile_memory=True, # 内存数据采集的开关 - record_shapes=True, # 算子input shape信息采集的开关 - schedule=torch.profiler.schedule(wait=10, warmup=0, active=1, repeat=1), - on_trace_ready=torch.profiler.tensorboard_trace_handler("./result_dir") + profile_memory=True, # 内存数据采集的开关 + record_shapes=True, # 算子input shape信息采集的开关 + schedule=torch.profiler.schedule(wait=10, warmup=0, active=1, repeat=1), + on_trace_ready=torch.profiler.tensorboard_trace_handler("./result_dir") ) as prof: for step in ranges(step_number): train_one_step() prof.step() ``` + 采集样例代码参考2: + ```Python prof = torch.profiler.profile( - profile_memory=True, # 内存数据采集的开关 - record_shapes=True, # 算子input shape信息采集的开关 - on_trace_ready=torch.profiler.tensorboard_trace_handler("./result_dir")) + profile_memory=True, # 内存数据采集的开关 + record_shapes=True, # 算子input shape信息采集的开关 + on_trace_ready=torch.profiler.tensorboard_trace_handler("./result_dir")) for step in range(step_number): if step == 11: prof.start() @@ -50,7 +58,7 @@ for step in range(step_number): pytorch profiler数据目录结构如下: -```Python +``` |- pytorch_profiling |- *.pt.trace.json ``` @@ -58,16 +66,18 @@ pytorch profiler数据目录结构如下: #### NPU性能数据采集 通过Ascend PyTorch Profiler工具采集NPU的性能数据,采集参数配置跟GPU一致,参考链接:https://www.hiascend.com/document/detail/zh/canncommercial/63RC2/modeldevpt/ptmigr/ptmigr_0066.html +将GPU的性能数据采集代码中torch.profiler替换成torch_npu.profiler + ascend pytorch profiler数据目录结构如下: -```Python +``` |- ascend_pytorch_profiling - |- *_ascend_pt + |- * _ascend_pt |- ASCEND_PROFILER_OUTPUT |- trace_view.json |- FRAMEWORK |- PROF_XXX - |- *_ascend_pt + |- * _ascend_pt ``` ### 性能数据比对 @@ -80,22 +90,26 @@ cd att/profiler/compare_tools # 执行最简比对命令 python performance_compare.py [基准性能数据文件] [比对性能数据文件] --output_path=./result_dir ``` -- 基准性能数据文件(必选):若以GPU为基准,指定到以".pt.trace"结尾的json文件;若以NPU不同版本为基准,指定文件参考**比对性能数据文件**。 + +- 基准性能数据文件(必选):若以GPU为基准,指定到以".pt.trace"结尾的json文件;若以NPU不同版本为基准,指定文件参考**比对性能数据文件 + **。 - 比对性能数据文件(必选):可以指定以“ascend_pt”结尾的目录、ASCEND_PROFILER_OUTPUT目录或trace_view.json文件,指定trace_view.json无法显示算子的内存占用。 - --output_path(可选):性能比对结果存放的路径,默认保存在当前目录。 -工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子、通信、调度三个维度,以打屏的形式输出总体指标,帮助用户定界劣化的方向。与此同时,工具还会生成performance_comparison_result_*.xlsl,展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。详细介绍请参见“**比对结果说明**”。 +工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子、通信、调度三个维度,以打屏的形式输出总体指标,帮助用户定界劣化的方向。与此同时,工具还会生成performance_comparison_result_* +.xlsl,展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。详细介绍请参见“**比对结果说明**”。 #### 通用参数说明 -| 参数名 | 说明 | 是否必选 | -| ------------------------------ | ------------------ | -------- | -| --enable_profiling_compare | 开启总体性能比对。 | 否 | -| --enable_operator_compare | 开启算子性能比对。 | 否 | -| --enable_communication_compare | 开启通信性能比对。 | 否 | -| --enable_memory_compare | 开启算子内存比对。 | 否 | +| 参数名 | 说明 | 是否必选 | +|--------------------------------|-----------|------| +| --enable_profiling_compare | 开启总体性能比对。 | 否 | +| --enable_operator_compare | 开启算子性能比对。 | 否 | +| --enable_communication_compare | 开启通信性能比对。 | 否 | +| --enable_memory_compare | 开启算子内存比对。 | 否 | 说明:以上4个开关均不设置的情况下,**工具默认开启所有的性能比对**,当用户设置了以上开关,则按照用户设置的开关进行性能比对,示例如下: + ```bash python performance_compare.py [基准性能数据文件] [比对性能数据文件] --output_path=./result_dir --enable_profiling_compare ``` @@ -104,17 +118,18 @@ python performance_compare.py [基准性能数据文件] [比对性能数据文 #### 算子性能比对特有参数说明 -| 参数名 | 说明 | 是否必选 | -| ----------------- | ------------------------------------------------------------ | -------- | -| --gpu_flow_cat | 配置GPU trace中cpu侧算子与device kernel的连线标识,当GPU的kernel均为空时设置。根据timeline的json文件在chrome://tracing上的Flow events的选项配置。使用示例:--gpu_flow_cat=async_gpu | 否 | -| --use_input_shape | 开启算子精准匹配,默认关闭。使用示例:--use_input_shape | 否 | -| --max_kernel_num | 设置CPU侧算子下发的最大kernel数量,当超过设定值时工具会自动往下找子算子,直至满足条件,默认仅比对最上层算子。使用示例:--max_kernel_num=10 | 否 | -| --op_name_map | 设置GPU与NPU等价的算子名称的映射关系,以字典形式存入。使用示例:--op_name_map='{"Optimizer.step#SGD.step":"Optimizer.step#NpuFusedSGD.step"}' | 否 | +| 参数名 | 说明 | 是否必选 | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------|------| +| --gpu_flow_cat | 配置GPU trace中cpu侧算子与device kernel的连线标识,当GPU的kernel均为空时设置。根据timeline的json文件在chrome://tracing上的Flow events的选项配置。使用示例:--gpu_flow_cat=async_gpu | 否 | +| --use_input_shape | 开启算子精准匹配,默认关闭。使用示例:--use_input_shape | 否 | +| --max_kernel_num | 设置CPU侧算子下发的最大kernel数量,当超过设定值时工具会自动往下找子算子,直至满足条件,默认仅比对最上层算子。使用示例:--max_kernel_num=10 | 否 | +| --op_name_map | 设置GPU与NPU等价的算子名称的映射关系,以字典形式存入。使用示例:--op_name_map='{"Optimizer.step#SGD.step":"Optimizer.step#NpuFusedSGD.step"}' | 否 | ## 比对结果说明 + ### 总体性能 -总体性能比对结果以打屏的形式呈现。详细比对信息如下: +总体性能比对结果以打屏的形式呈现。 | 字段 | 说明 | | ------------------------------- | ------------------------------------------------------------ | @@ -147,48 +162,42 @@ activities配置仅采集NPU数据,不配置experimental_config参数以及其 ### 算子性能 -算子性能比对结果在performance_comparison_result_*.xlsl中OperatorCompare的sheet页呈现。 - -- 淡蓝色背景的记录行:算子的summary信息,包括算子名称、算子的Input Shape、算子的Input Type、算子在device上的总耗时(单位:us) - -- 无背景色的记录行:算子的detail信息,包含了这个算子下发到device侧的所有kernel的明细,包括kernel名称、kernel的信息(针对NPU)、device上的耗时(单位:us) - -- DIFF列 = (比较算子在device上执行总耗时 - 基准算子在device上执行总耗时) / 基准算子在device上执行总耗时 +算子性能比对结果在performance_comparison_result_*.xlsl中OperatorCompare和OperatorCompare(TOP)的sheet页呈现。 -- DIFF Filter列:红色代表劣化 +- OperatorCompare(TOP):算子为粒度的统计呈现,按照算子在device上的总耗时与基准算子的差距值(Diff Duration(ms)列)进行逆序 +- OperatorCompare:算子比对的明细展示,可以查看每一个算子对应的kernel详情 +Diff Ratio: 比较算子在device上执行总耗时 / 基准算子在device上执行总耗时,红色代表劣化。 #### Device Duration(us) + ``` 该算子下发到device上执行的所有kernel耗时的总和 ``` + ### 通信性能 通信性能比对结果在performance_comparison_result_*.xlsl中CommunicationCompare的sheet页呈现。 - 淡蓝色背景的记录行:通信算子的summary信息,包括通信算子名称、调用总次数、通信算子总耗时(单位:us)、通信算子平均耗时(单位:us)、通信算子最大耗时(单位:us)、通信算子最小耗时(单位:us) -- 无背景色的记录行:通信算子的detail信息,仅支持NPU,包含了该通信算子下的所有Task信息,包括Task名称、Task调用次数、Task总耗时(单位:us)、Task平均耗时(单位:us)、Task最大耗时(单位:us)、Task最小耗时(单位:us) - -- DIFF列 = (比较通信算子的总耗时 - 基准通信算子的总耗时) / 基准通信算子的总耗时 - -- DIFF Filter列:红色代表劣化 +- +无背景色的记录行:通信算子的detail信息,仅支持NPU,包含了该通信算子下的所有Task信息,包括Task名称、Task调用次数、Task总耗时(单位:us)、Task平均耗时(单位:us)、Task最大耗时(单位:us)、Task最小耗时(单位:us) +- Diff Ratio: 比较通信算子的总耗时 / 基准通信算子的总耗时,红色代表劣化。 ### 算子内存 -算子内存比对结果在performance_comparison_result_**.xlsl中MemoryCompare的sheet页呈现。 - -- 淡蓝色背景的记录行:算子的summary信息,包括算子名称、算子的Input Shape、算子的Input Type、算子占用的总内存(单位:KB) +算子内存比对结果在performance_comparison_result_**.xlsl中MemoryCompare和MemoryCompare(TOP)的sheet页呈现。 -- 无背景色的记录行:算子的detail信息,包含了这个算子下发到device侧执行的所有算子的内存占用,包括算子名称、内存持有时间(单位:us)、内存占用大小(单位:KB) +- MemoryCompare(TOP):算子为粒度的统计呈现,按照算子占用的总内存与基准算子的差距值(Diff Memory(MB))进行逆序 -- DIFF列 = (比较算子占用的总内存 - 基准算子占用的总内存) / 基准算子占用的总内存 +- MemoryCompare:算子内存比对的明细展示,可以查看每一个算子申请内存的详情 -- DIFF Filter列:红色代表劣化 +Diff Ratio: 比较算子占用的总内存 / 基准算子占用的总内存,红色代表劣化 +#### Size(KB) -#### 内存占用大小 ``` 该算子占用的device内存大小,单位KB ``` \ No newline at end of file diff --git a/profiler/merge_profiling_timeline/README.md b/profiler/merge_profiling_timeline/README.md index 054391595f..546e6c55a5 100644 --- a/profiler/merge_profiling_timeline/README.md +++ b/profiler/merge_profiling_timeline/README.md @@ -5,9 +5,9 @@ merge_profiling_timeline(合并大json工具)支持合并Profiling的timelin ## 多timeline融合 -### 数据采集 +### 性能数据采集 -使用msprof采集数据,将采集到的所有节点的Profiling数据拷贝到当前环境同一目录下,以下假设数据在/home/test/cann_profiling下。 +使用msprof采集性能数据,将采集到的所有节点的性能数据拷贝到当前环境同一目录下,以下假设数据在/home/test/cann_profiling下。 E2E Profiling数据目录结构示例如下: -- Gitee