From 7a4a72e4a4a1314d44dc7343b919620bc5bd3b6d Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Sat, 19 Aug 2023 16:55:41 +0800 Subject: [PATCH 1/5] fix --- profiler/cluster_analyse/cluster_kernels_analysis/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 92333802e..43adb8317 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -38,3 +38,5 @@ html:cluster_op_summary_analysis.html 1、 top_n 必须大于0,如果输入<=0,默认只导出一个算子的数据 2、 所有PROF_XXX里都没有op_summary的,不会显示算子情况 3、 部分没有op_summary的,不显示也不报错 + + -- Gitee From ba85756de2d524cf844299bb1ad18991814fad4c Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Sat, 19 Aug 2023 17:56:10 +0800 Subject: [PATCH 2/5] fix --- .../cluster_kernels_analysis/README.md | 122 ++++++++++++------ 1 file changed, 82 insertions(+), 40 deletions(-) diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 43adb8317..8d40af74d 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -1,42 +1,84 @@ -# att - -#### 介绍 -集群训练的profiling分析工具 -可以根据op_summry*.csv文件分析算子的运行时间分布 - -#### 使用说明 -命令:python3 cluster_prof_Info_analysis.py -–dir XX/XX/XXX --type XX --top_n XX -解释: ---dir -d - 集群的profiling路径信息 格式为 /node0_XXX/PROF_XXX - 比如集群有两台机器16张卡 那么就是 - /node0_XXX 文件夹为第一台机器的,八张卡profiling数据 - /node1_XXX 文件夹为第二台机器的,八张卡profiling数据 ---type -t - 获取什么类型的分析信息(html、csv、all) 如果写了其他的会报错 ---top_n -n - html分析独有,表示需要展示的是task_duration的方差为top_n的算子 - top_n >= 1 - 如果输入的是奇数,会默认加1变成偶数个 - 如果输入小于等于0,那么会默认只输出一个最大算子的信息 - -输出描述: -表格:cluster_op_time_analysis.csv -描述: -1、 统计算子在每个device运行的均值、方差、最大值、最小值和范围 -2、 生成csv表格 -根据 Op name:【"Op Name", "Input Shapes", "Input Data Types", "Output Shapes"】 分类 -展示各个算子在不同卡上的task_duration的方差、均值、最大值、最小值,以及范围 - -html:cluster_op_summary_analysis.html -描述: -1、统计算子在所有device中运行的均值、方差、最大值、最小值和范围,找到task_duration的方差为top_n的算子 -2、画出top_n个算子在每一个device上的箱线图 -3、生成time和ratio的静态html文件 - -提示: -1、 top_n 必须大于0,如果输入<=0,默认只导出一个算子的数据 -2、 所有PROF_XXX里都没有op_summary的,不会显示算子情况 -3、 部分没有op_summary的,不显示也不报错 +# 背景 + 集群中,多卡间的算子情况,只能通过的查看每张卡的profiling数据来了解,不能直观的对多卡之间的算清有一个对比。 + + 基于以上原因,想要知道对卡间的算子情况,进行分析对比。以及对top_n算子的最大最小中位数等展示 +# 功能介绍 +该脚本基于多卡profiling的op_summary信息,统计算子的最快、最慢、均值、方差是多少,基于topk算子维度进行统计和展示。 +## 交附件: +### cluster_op_time_ analysis.csv表格 +将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同node的不同device上,total_time的最大、最小、方差、平均时间以及范围 +### xxx_info.html +主要是各个特性(time\ratio)的html文件,以html方式展示top_n算子的箱线图 +以total_time的平均值为条件。筛选top_n的算子,并展示这些算子的time\ratio的箱线图 +# 操作指导 +## 1、准备profiling数据 +拷贝所有node上的profiling到一个环境里,profiling数据必须包含在nodeXXX这样的文件夹下 + +比如说现在的集群场景是两机16卡,那么就是两个node分别有八个device,我们的拷贝路径如下: + + ├── node0 // 可以是node0 或者nodeo_xxx表示某个节点 + + │ ├── PROF_XXXXX // 单个device的profiling数据,要解析之后的 + + │ ├── SUMMARY + + │ ├── op_summary_XX.csv + + | ...... // 一共八张卡的profiling数据 + + ├── node1 // 可以是node1 或者node1_xxx表示某个节点 + + │ ├── PROF_XXXXX // 单个device的profiling数据 + + │ ├── SUMMARY + + │ ├── op_summary_XX.csv // 用来做解析的op_summary表格 + + | ...... // 一共八张卡的profiling数据 + +## 2、拷贝脚本准备环境 +将cluster_prof_Info_analysis.py脚本拷贝到一个文件夹里,并安装对应的python库 + +> pip install pandas + +> pip install ploty + +## 3、运行脚本 +> python3 cluster_prof_Info_analysis.py –d XX/XX/XXX -t XX -n XX + +### 脚本命令解释: +- -d 集群的profiling路径,输入node的上一级目录 +- -t 获取什么类型的分析信息(html、csv、all)默认是html +- -n html分析独有,表示需要展示的是平均时间top_n的算子 默认是10,建议不要超过30个,耗时会比较久 + +### 异常情况处理: +- 1、 top_n 必须大于0,如果输入<=0, 默认只导出一个算子的数据 +- 2、 top_n>算子总数的,top_n 等于算子数 +- 3、 部分没有op_summary的,不显示也不报错 +- 4、 路径里一份op_summary都没有的,直接报错文件找不到 +- 5、 op_summary列不对读不到数据,提示哪些文件有问题 +- 6、 type输入错误,提示输错,并告诉正确的内容 + +# 结果展示 +> 命令行输入python3 cluster_op_summary_analysis.py -d /XX/XX/XXX -t all -n 10 + +### 1、csv表格展示: +![图片说明](http://image.huawei.com/tiny-lts/v1/images/7f302c36ef7b61ffd60509ad1225ba47_865x337.png@900-0-90-f.png) +### 2、html箱线图展示 +查看时直接将html拖到浏览器里即可 + +![图片说明](http://image.huawei.com/tiny-lts/v1/images/2384a3fa10fbb9615fb16aa5614d0c2c_865x333.png@900-0-90-f.png) + +下面这张图以两机16卡为例,展示每一个算子在每个device上的数据箱线图 +有top_n个算子就会有top_n个坐标系,每个坐标系表示一个算子的特性。以total_time的平均值从左向右依次向下排序 +- 横坐标:node_device 表示第几个node的第几张卡,从小到大排序 +- 纵坐标:时间 +- 坐标名:在坐标下方,以op_name-input_shape 拼接展示 +![图片说明](http://image.huawei.com/tiny-lts/v1/images/52399bdaca96ada2754cdf416a260f4c_1543x1015.png@900-0-90-f.png) +# 结果说明 +### cluster_op_time_ analysis.csv表格 +将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同node的不同device上,total_time的最大、最小、方差、平均时间以及范围 +### xxx_info.html +主要是各个特性(time\ratio)的html文件,以html方式展示top_n算子的箱线图 \ No newline at end of file -- Gitee From b5cb8dce3c54a3f657272f4d32ae8bb571f225ea Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Sat, 19 Aug 2023 18:00:03 +0800 Subject: [PATCH 3/5] fix --- profiler/cluster_analyse/cluster_kernels_analysis/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 8d40af74d..8a7466222 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -65,18 +65,17 @@ > 命令行输入python3 cluster_op_summary_analysis.py -d /XX/XX/XXX -t all -n 10 ### 1、csv表格展示: -![图片说明](http://image.huawei.com/tiny-lts/v1/images/7f302c36ef7b61ffd60509ad1225ba47_865x337.png@900-0-90-f.png) + ### 2、html箱线图展示 查看时直接将html拖到浏览器里即可 -![图片说明](http://image.huawei.com/tiny-lts/v1/images/2384a3fa10fbb9615fb16aa5614d0c2c_865x333.png@900-0-90-f.png) 下面这张图以两机16卡为例,展示每一个算子在每个device上的数据箱线图 有top_n个算子就会有top_n个坐标系,每个坐标系表示一个算子的特性。以total_time的平均值从左向右依次向下排序 - 横坐标:node_device 表示第几个node的第几张卡,从小到大排序 - 纵坐标:时间 - 坐标名:在坐标下方,以op_name-input_shape 拼接展示 -![图片说明](http://image.huawei.com/tiny-lts/v1/images/52399bdaca96ada2754cdf416a260f4c_1543x1015.png@900-0-90-f.png) + # 结果说明 ### cluster_op_time_ analysis.csv表格 将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同node的不同device上,total_time的最大、最小、方差、平均时间以及范围 -- Gitee From e2223a7259ecdcd7041a01627a7ba370415f47b8 Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Wed, 6 Sep 2023 10:02:25 +0800 Subject: [PATCH 4/5] fix bug --- .../cluster_kernels_analysis/README.md | 81 +++++++------------ ...lysis.py => cluster_prof_Info_analysis.py} | 0 2 files changed, 31 insertions(+), 50 deletions(-) rename profiler/cluster_analyse/cluster_kernels_analysis/{cluster_op_summary_analysis.py => cluster_prof_Info_analysis.py} (100%) diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 8a7466222..86dfaa599 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -1,32 +1,35 @@ # 背景 集群中,多卡间的算子情况,只能通过的查看每张卡的profiling数据来了解,不能直观的对多卡之间的算清有一个对比。 - 基于以上原因,想要知道对卡间的算子情况,进行分析对比。以及对top_n算子的最大最小中位数等展示 # 功能介绍 -该脚本基于多卡profiling的op_summary信息,统计算子的最快、最慢、均值、方差是多少,基于topk算子维度进行统计和展示。 +集群场景下,多卡间的算子情况,只能通过查看每张卡各自的性能数据来了解,不能直观的对比各卡之间算子的性能差异。 +cluster_op_summary_analysis.py脚本基于多卡性能数据的op_summary信息,统计并展示各卡中执行最快、最慢、均值和方差的TopN算子。 -## 交附件: -### cluster_op_time_ analysis.csv表格 -将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同node的不同device上,total_time的最大、最小、方差、平均时间以及范围 +## 交附件 +### cluster_op_time_ analysis.csv +将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同节点(node)的不同卡(device)上,执行时间的最大、最小、方差、平均时间以及范围。 ### xxx_info.html 主要是各个特性(time\ratio)的html文件,以html方式展示top_n算子的箱线图 +xxx表示AI Core和AI Vector Core算子性能指标中的耗时(time)和占比(ratio)字段。 +以html文件展示TopN算子执行耗时和占比的箱线图。 +有TopN个算子就会有TopN个坐标系,每个坐标系表示一个算子的特性,以total_time的平均值从左向右依次向下排序。 -以total_time的平均值为条件。筛选top_n的算子,并展示这些算子的time\ratio的箱线图 +横坐标:node_device表示第几个node的第几张卡,从小到大排序。 +纵坐标:时间。 +坐标名:在坐标下方,以op_name-input_shape拼接展示。 # 操作指导 -## 1、准备profiling数据 -拷贝所有node上的profiling到一个环境里,profiling数据必须包含在nodeXXX这样的文件夹下 +- 1、准备性能数据 +拷贝所有node上的性能数据到一个环境里,性能数据必须包含在node*目录下,例如当前集群场景为2机16卡,那么就是两个node分别有八个device,拷贝性能数据目录如下: -比如说现在的集群场景是两机16卡,那么就是两个node分别有八个device,我们的拷贝路径如下: - - ├── node0 // 可以是node0 或者nodeo_xxx表示某个节点 + ├── node0 // 可以是node0或nodeo_xxx,表示某个节点 - │ ├── PROF_XXXXX // 单个device的profiling数据,要解析之后的 + │ ├── PROF_XXXXX // 单个device的性能数据,须完成msprof性能数据解析 │ ├── SUMMARY │ ├── op_summary_XX.csv - | ...... // 一共八张卡的profiling数据 + | ...... // 一共八张卡的性能数据 ├── node1 // 可以是node1 或者node1_xxx表示某个节点 @@ -36,48 +39,26 @@ │ ├── op_summary_XX.csv // 用来做解析的op_summary表格 - | ...... // 一共八张卡的profiling数据 + | ...... -## 2、拷贝脚本准备环境 -将cluster_prof_Info_analysis.py脚本拷贝到一个文件夹里,并安装对应的python库 +- 2、拷贝脚本准备环境 +将cluster_prof_Info_analysis.py脚本拷贝到一个文件夹里,并安装对应的Python库: > pip install pandas > pip install ploty -## 3、运行脚本 -> python3 cluster_prof_Info_analysis.py –d XX/XX/XXX -t XX -n XX - -### 脚本命令解释: -- -d 集群的profiling路径,输入node的上一级目录 -- -t 获取什么类型的分析信息(html、csv、all)默认是html -- -n html分析独有,表示需要展示的是平均时间top_n的算子 默认是10,建议不要超过30个,耗时会比较久 - -### 异常情况处理: -- 1、 top_n 必须大于0,如果输入<=0, 默认只导出一个算子的数据 -- 2、 top_n>算子总数的,top_n 等于算子数 -- 3、 部分没有op_summary的,不显示也不报错 -- 4、 路径里一份op_summary都没有的,直接报错文件找不到 -- 5、 op_summary列不对读不到数据,提示哪些文件有问题 -- 6、 type输入错误,提示输错,并告诉正确的内容 - -# 结果展示 -> 命令行输入python3 cluster_op_summary_analysis.py -d /XX/XX/XXX -t all -n 10 +- 3、运行脚本 +> python3 cluster_prof_Info_analysis.py –d {data_path} -t {type} -n {top_n} +-d 集群场景性能数据目录,输入node的上一级目录。 +-t 获取分析信息结果文件类型,可取值:html、csv、all,默认html。 +-n html分析独有,表示需要展示的是平均时间top_n的算子,默认10,配置超过30时需要一定时间。 -### 1、csv表格展示: +异常情况处理: +-n参数必须大于0,如果输入<=0, 默认只导出一个算子的数据。 +配置-n参数值大于算子总数时,按等于算子数处理。 +部分没有op_summary的,不显示也不报错。 +目录下不存在op_summary时,执行报错无法找到数据文件。 +op_summary列数据错误或读不到数据时,提示具体出错文件。 +-t参数配置错误时,提示输入错误,并提示正确的配置。 -### 2、html箱线图展示 -查看时直接将html拖到浏览器里即可 - - -下面这张图以两机16卡为例,展示每一个算子在每个device上的数据箱线图 -有top_n个算子就会有top_n个坐标系,每个坐标系表示一个算子的特性。以total_time的平均值从左向右依次向下排序 -- 横坐标:node_device 表示第几个node的第几张卡,从小到大排序 -- 纵坐标:时间 -- 坐标名:在坐标下方,以op_name-input_shape 拼接展示 - -# 结果说明 -### cluster_op_time_ analysis.csv表格 -将算子以op_name、input_shape、input_size、output_shape进行分类,统计每一类算子,在不同node的不同device上,total_time的最大、最小、方差、平均时间以及范围 -### xxx_info.html -主要是各个特性(time\ratio)的html文件,以html方式展示top_n算子的箱线图 \ No newline at end of file diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/cluster_op_summary_analysis.py b/profiler/cluster_analyse/cluster_kernels_analysis/cluster_prof_Info_analysis.py similarity index 100% rename from profiler/cluster_analyse/cluster_kernels_analysis/cluster_op_summary_analysis.py rename to profiler/cluster_analyse/cluster_kernels_analysis/cluster_prof_Info_analysis.py -- Gitee From 21536a8f0dcad2cdd0a71bcaa4699a253a9ecbb3 Mon Sep 17 00:00:00 2001 From: fanxiaotong Date: Wed, 6 Sep 2023 11:19:05 +0800 Subject: [PATCH 5/5] fix bug --- profiler/cluster_analyse/cluster_kernels_analysis/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 86dfaa599..15b051d5c 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -1,6 +1,3 @@ -# 背景 - 集群中,多卡间的算子情况,只能通过的查看每张卡的profiling数据来了解,不能直观的对多卡之间的算清有一个对比。 - # 功能介绍 集群场景下,多卡间的算子情况,只能通过查看每张卡各自的性能数据来了解,不能直观的对比各卡之间算子的性能差异。 cluster_op_summary_analysis.py脚本基于多卡性能数据的op_summary信息,统计并展示各卡中执行最快、最慢、均值和方差的TopN算子。 -- Gitee