diff --git a/debug/accuracy_tools/api_accuracy_checker/README.md b/debug/accuracy_tools/api_accuracy_checker/README.md index 41ae3ff9f5f27f449168cce67ce2c0ed54186e42..614763ce5d09c076c631fcf5ad05a17024a313b3 100644 --- a/debug/accuracy_tools/api_accuracy_checker/README.md +++ b/debug/accuracy_tools/api_accuracy_checker/README.md @@ -54,15 +54,12 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 msCheckerConfig.update_config(dump_path="my/dump/path", real_data=True, enable_dataloader=True, target_iter=1) ``` - - dump_path:设置dump路径,须为已存在目录。 - - - real_data:真实数据模式,可取值True或False,配置为True后开启真实数据模式,dump信息增加forward_real_data和backward_real_data目录,目录下保存每个API输入的具体数值。 - - 注意:开启真实数据模式目前仅支持单卡,且会存盘较多数据,可能对磁盘空间有较大冲击。 - - - enable_dataloader:自动控制开关,可取值True或False,配置为True后自动识别dump target_iter参数指定的迭代数据,并在该迭代执行完成后退出训练。 - - - target_iter:指定dump某个step的数据,仅支持dump1个step,须指定为训练脚本中存在的step。 + | 参数名称 | 说明 | 是否必选 | + | ----------------- | ------------------------------------------------------------ | -------- | + | dump_path | 设置dump路径,须为已存在目录,默认为当前目录。 | 否 | + | real_data | 真实数据模式,可取值True或False,默认为False,配置为True后开启真实数据模式,dump信息增加forward_real_data和backward_real_data目录,目录下保存每个API输入的具体数值。开启真实数据模式目前仅支持单卡,且会存盘较多数据,可能对磁盘空间有较大冲击。 | 否 | + | enable_dataloader | 自动控制开关,可取值True或False,默认为False,配置为True后自动识别dump target_iter参数指定的迭代数据,并在该迭代执行完成后退出训练。 | 否 | + | target_iter | 指定dump某个step的数据,默认为1,仅支持dump1个step,须指定为训练脚本中存在的step。 | 否 | 3. 将API信息输入给run_ut模块运行精度检测并比对,运行如下命令: @@ -71,14 +68,16 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 python run_ut.py -forward ./forward_info_0.json -backward ./backward_info_0.json ``` - - -forward:指定前向API信息文件forward_info_{pid}.json,必选。 - - -backward:指定反向API信息文件backward_info_{pid}.json,必选。 - - -save_error_data:保存精度未达标的API输入输出数据,可选。 - - --out_path:指定run_ut执行结果存盘路径,默认“./”(相对于run_ut的路径),可选。 + | 参数名称 | 说明 | 是否必选 | + | ---------------- | ------------------------------------------------------------ | -------- | + | -forward | 指定前向API信息文件forward_info_{pid}.json。 | 是 | + | -backward | 指定反向API信息文件backward_info_{pid}.json。 | 是 | + | -save_error_data | 保存精度未达标的API输入输出数据。 | 否 | + | --out_path | 指指定run_ut执行结果存盘路径,默认“./”(相对于run_ut的路径)。 | 否 | - run_ut执行结果包括pretest_result.csv和pretest_details.csv两个文件。pretest_result.csv是API粒度的,标明每个API是否通过测试。建议用户先查看pretest_result.csv文件,对于其中没有通过测试的或者特定感兴趣的API,根据其API name字段在pretest_details.csv中查询其各个输出的达标情况以及比较指标。 + run_ut执行结果包括accuracy_checking_result.csv和accuracy_checking_details.csv两个文件。accuracy_checking_result.csv是API粒度的,标明每个API是否通过测试。建议用户先查看accuracy_checking_result.csv文件,对于其中没有通过测试的或者特定感兴趣的API,根据其API name字段在accuracy_checking_details.csv中查询其各个输出的达标情况以及比较指标。 - 注意:目前API通过测试的标准是每个输出与标杆比对的余弦相似度大于0.99,并且float16和bfloat16数据要通过双千分之一标准,float32数据要通过双万分之一标准,pretest_details.csv中的相对误差供用户分析时使用。 + 注意:目前API通过测试的标准是每个输出与标杆比对的余弦相似度大于0.99,并且float16和bfloat16数据要通过双千分之一标准,float32数据要通过双万分之一标准,accuracy_checking_details.csv中的相对误差供用户分析时使用。 4. 如果需要保存比对不达标的输入和输出数据,可以在run_ut执行命令结尾添加-save_error_data,例如: @@ -89,15 +88,15 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 ## FAQ -1. 多卡训练dump结果只有一组json,是否为正常现象? - 答:正常来说,多卡训练应该能dump下来与卡数相当的数组json文件,每组都包含forward backward和stack信息。目前在部分流水并行、张量并行场景下,工具的开关无法在每张卡上自动打开,用户需要在训练代码中添加打开工具开关的调用: +多卡训练dump结果只有一组json,是否为正常现象? +答:正常来说,多卡训练应该能dump下来与卡数相当的数组json文件,每组都包含forward backward和stack信息。目前在部分流水并行、张量并行场景下,工具的开关无法在每张卡上自动打开,用户需要在训练代码中添加打开工具开关的调用: ```Python import api_accuracy_checker.dump as DP DP.dump.set_dump_switch("ON") ``` - 上述代码要添加在迭代前向的代码段中,或者说是遍历数据集循环的代码段中。如对于GPT-3可以添加在pretrain_gpt.py 的forward_step函数中。之后工具会适配这个场景开关的自动打开。 + 上述代码要添加在迭代前向的代码段中,或者说是遍历数据集循环的代码段中。如对于GPT-3可以添加在pretrain_gpt.py 的forward_step函数中。之后工具会适配这个场景开关的自动打开。 # 溢出API解析工具 diff --git a/profiler/cluster_analyse/cluster_kernels_analysis/README.md b/profiler/cluster_analyse/cluster_kernels_analysis/README.md index 15b051d5c100280a01e631716785005b9e696af0..46bdf67fa2a703365aa0dbced56892de8795fd23 100644 --- a/profiler/cluster_analyse/cluster_kernels_analysis/README.md +++ b/profiler/cluster_analyse/cluster_kernels_analysis/README.md @@ -6,56 +6,60 @@ cluster_op_summary_analysis.py脚本基于多卡性能数据的op_summary信息 ### 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)字段。 +主要是各个特性(time和ratio)的html文件,以html方式展示top_n算子的箱线图。 + +time和ratio表示AI Core和AI Vector Core算子性能指标中的耗时和占比字段。 + 以html文件展示TopN算子执行耗时和占比的箱线图。 + 有TopN个算子就会有TopN个坐标系,每个坐标系表示一个算子的特性,以total_time的平均值从左向右依次向下排序。 -横坐标:node_device表示第几个node的第几张卡,从小到大排序。 -纵坐标:时间。 -坐标名:在坐标下方,以op_name-input_shape拼接展示。 +- 横坐标:node_device表示第几个node的第几张卡,从小到大排序。 +- 纵坐标:时间。 +- 坐标名:在坐标下方,以op_name-input_shape拼接展示。 + # 操作指导 -- 1、准备性能数据 -拷贝所有node上的性能数据到一个环境里,性能数据必须包含在node*目录下,例如当前集群场景为2机16卡,那么就是两个node分别有八个device,拷贝性能数据目录如下: +1. 准备性能数据 + 拷贝所有node上的性能数据到一个环境里,性能数据必须包含在node*目录下,例如当前集群场景为2机16卡,那么就是两个node分别有八个device,拷贝性能数据目录如下: - ├── node0 // 可以是node0或nodeo_xxx,表示某个节点 - - │ ├── PROF_XXXXX // 单个device的性能数据,须完成msprof性能数据解析 - + ```bash + ├── node0 # 可以是node0或nodeo_xxx,表示某个节点 + │ ├── PROF_XXXXX # 单个device的性能数据,须完成msprof性能数据解析 │ ├── SUMMARY - │ ├── op_summary_XX.csv - - | ...... // 一共八张卡的性能数据 - - ├── node1 // 可以是node1 或者node1_xxx表示某个节点 - - │ ├── PROF_XXXXX // 单个device的profiling数据 - + | ...... # 一共八张卡的性能数据 + ├── node1 # 可以是node1 或者node1_xxx表示某个节点 + │ ├── PROF_XXXXX # 单个device的profiling数据 │ ├── SUMMARY - - │ ├── op_summary_XX.csv // 用来做解析的op_summary表格 - + │ ├── op_summary_XX.csv # 用来做解析的op_summary表格 | ...... + ``` + +2. 拷贝脚本准备环境 -- 2、拷贝脚本准备环境 -将cluster_prof_Info_analysis.py脚本拷贝到一个文件夹里,并安装对应的Python库: + 将cluster_prof_Info_analysis.py脚本拷贝到一个文件夹里,并安装对应的Python库。 -> pip install pandas + ```bash + pip install pandas + pip install ploty + ``` -> pip install ploty +3. 运行脚本 -- 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时需要一定时间。 + ```bash + 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时需要一定时间。 异常情况处理: --n参数必须大于0,如果输入<=0, 默认只导出一个算子的数据。 -配置-n参数值大于算子总数时,按等于算子数处理。 -部分没有op_summary的,不显示也不报错。 -目录下不存在op_summary时,执行报错无法找到数据文件。 -op_summary列数据错误或读不到数据时,提示具体出错文件。 --t参数配置错误时,提示输入错误,并提示正确的配置。 + +- -n参数必须大于0,如果输入<=0, 默认只导出一个算子的数据。 +- 配置-n参数值大于算子总数时,按等于算子数处理。 +- 部分没有op_summary的,不显示也不报错。 +- 目录下不存在op_summary时,执行报错无法找到数据文件。 +- op_summary列数据错误或读不到数据时,提示具体出错文件。 +- -t参数配置错误时,提示输入错误,并提示正确的配置。 diff --git a/profiler/merge_profiling_timeline/README.md b/profiler/merge_profiling_timeline/README.md index 21e8ca5e26ad465f20be96cd8913158fc1e770b4..4aee121ef341e7a8d1a9e1c4da8006b98fbc9ba9 100644 --- a/profiler/merge_profiling_timeline/README.md +++ b/profiler/merge_profiling_timeline/README.md @@ -1,17 +1,17 @@ # Profiling merge timeline tool -## 介绍 +## 简介 -本工具支持合并profiling的timeline数据,支持合并指定rank的timline、合并指定timeline中的item +本工具支持合并Profiling的timeline数据,支持合并指定rank的timline、合并指定timeline中的item。 -## 1 多timeline融合 +## 多timeline融合 -### 1.1 数据采集 +### 数据采集 -使用msprof采集数据,将采集到的所有节点的profiling数据拷贝到当前机器同一目录下,以下假设数据在/home/test/cann_profiling下 +使用msprof采集数据,将采集到的所有节点的Profiling数据拷贝到当前环境同一目录下,以下假设数据在/home/test/cann_profiling下。 -e2e profiling数据目录结构如下: +E2E Profiling数据目录结构示例如下: ``` |- cann_profiling @@ -25,7 +25,7 @@ e2e profiling数据目录结构如下: ... ``` -ascend pytorch profiler数据目录结构如下: +Ascend PyTorch Profiler数据目录结构示例如下: ``` |- ascend_pytorch_profiling @@ -37,85 +37,79 @@ ascend pytorch profiler数据目录结构如下: |- **_ascend_pt ``` +### 参数说明 -### 1.2 合并timeline +| 参数名称 | 说明 | 是否必选 | +| -------- | ------------------------------------------------------------ | -------- | +| -i | 指定Profiling数据目录路径。 | 是 | +| --type | 指定需要合并timeline场景,可选取值:`pytorch`(通过Ascend PyTorch Profiler方式采集profiling数据,合并所有卡的trace_view.json)、`e2e`(通过E2E Profiling方式采集Profiling数据,优先合并总timeline,没有生成则选择合并device目录下的msprof_*.json)、`custom` (自定义需要合并的timeline数据,具体参考**使用示例**)。 | 是 | +| -o | 指定合并后的timeline文件输出的路径(路径末尾可以设置文件名,具体用法参考**使用示例**),不设置该参数的情况下默认文件输出的路径为当前目录(默认文件名为merged.json)。 | 否 | +| --rank | 指定需要合并timeline的Rank ID,默认全部合并。 | 否 | +| --items | 指定需要合并的Profiling数据项(python,Ascend_Hardware,CANN,HCCL,PTA,Overlap_Analysis),默认全部合并。 | 否 | -可选参数: +### 使用示例 -- -i: **必选参数**,profiling数据文件或文件夹路径 -- --type: **必选参数**,指定需要合并timeline场景,可选参数有:`pytorch`, `e2e`, `custom` - - `pytorch`:通过ascend pytorch方式采集profiling数据,合并所有卡的trace_view.json - - `e2e`:通过e2e方式采集profiling数据,优先合并总timeline,没有生成则选择合并device目录下的msprof_*.json - - `custom` :自定义需要合并的timeline数据,具体参考示例 -- -o: 可选参数,指定合并后的timeline文件输出的路径(路径末尾可以设置文件名,具体用法参考示例),不设置该参数的情况下默认文件输出的路径为当前目录(默认文件名为merged.json) -- --rank:可选参数,指定需要合并timeline的卡号,默认全部合并 -- --items:可选参数,指定需要合并的profiling数据项(python,Ascend_Hardware,CANN,HCCL,PTA,Overlap_Analysis),默认全部合并(item直接使用Ascend Hardware作为参数会被误认为是两个参数,因此作为一个参数时使用'_'连接) +1. 合并单机多卡timeline,默认合并所有卡、所有数据项,生成first.json在path/to/cann_profiling/output/目录下 + ```bash + python3 main.py -i path/to/cann_profiling/ -o path/to/cann_profiling/output/first --type pytorch + ``` -**使用示例**: -1、合并单机多卡timeline,默认合并所有卡、所有数据项,生成first.json在path/to/cann_profiling/output/目录下: +2. 合并单机多卡timeline,默认合并所有卡、所有数据项,不设置-o参数时默认生成merge.json在当前目录下 -``` -python3 main.py -i path/to/cann_profiling/ -o path/to/cann_profiling/output/first --type pytorch -``` -2、合并单机多卡timeline,默认合并所有卡、所有数据项,不设置-o参数时默认生成merge.json在当前目录下: - -``` -python3 main.py -i path/to/cann_profiling/ --type pytorch -``` + ```bash + python3 main.py -i path/to/cann_profiling/ --type pytorch + ``` -3、合并单机多卡timeline,只合并0卡和1卡: +3. 合并单机多卡timeline,只合并0卡和1卡 -``` -python3 main.py -i path/to/cann_profiling/ -o path/to/cann_profiling/output/2p --type pytorch --rank 0,1 -``` + ```bash + python3 main.py -i path/to/cann_profiling/ -o path/to/cann_profiling/output/2p --type pytorch --rank 0,1 + ``` -4、合并单机多卡timeline,合并所有卡的CANN层和Ascend_Hardware层数据 +4. 合并单机多卡timeline,合并所有卡的CANN层和Ascend_Hardware层数据 -``` -python3 main.py -i path/to/cann_profiling/ --type pytorch --items CANN,Ascend_Hardware -``` + ```bash + python3 main.py -i path/to/cann_profiling/ --type pytorch --items CANN,Ascend_Hardware + ``` -5、合并多timeline(自定义) +5. 合并多timeline(自定义) -以上场景不支持的情况下,可以使用自定义的合并方式,将需要合并的timeline文件放在同一目录下(附:该场景比较特殊,与正常合并不同,无法直接读取info.json中的rank_id, 因此该场景下的rank_id为默认分配的序号,用于区分不同文件的相同层,不代表实际rank_id) -数据目录结构示意如下: + 以上场景不支持的情况下,可以使用自定义的合并方式,将需要合并的timeline文件放在同一目录下(附:该场景比较特殊,与正常合并不同,无法直接读取info.json中的rank_id,因此该场景下的rank_id为默认分配的序号,用于区分不同文件的相同层,不代表实际rank_id) + 数据目录结构示意如下: -``` -|- timeline - |- msprof_0.json - |- msprof_1.json - |- msprof_2.json - |- hccl_3.json - |- hccl_4.json - ... -``` + ```bash + |- timeline + |- msprof_0.json + |- msprof_1.json + |- msprof_2.json + |- hccl_3.json + |- hccl_4.json + ... + ``` -**使用示例**: + 通过下面的命令合并所有timeline,同样支持-o、--rank、--items等参数。 -通过下面的命令合并所有timeline,同样支持-o、--rank、--items等参数: + ```bash + python3 main.py -i path/to/timeline/ -o path/to/timeline/xxx --type custom + ``` -``` -python3 main.py -i path/to/timeline/ -o path/to/timeline/xxx --type custom -``` + 合并timeline查看:在 -o 指定的目录(不设置-o时默认在当前目录下的merged.json)的xxx.json为合并后的文件。 -合并timeline查看: -> 在 -o 指定的目录(不设置-o时默认在当前目录下的merged.json)的xxx.json为合并后的文件 +## 超大timeline文件查看 -## 2 超大timeline文件查看 +[下载whl](https://gitee.com/aerfaliang/trace_processor/releases/download/trace_processor_37.0/trace_processor-37.0-py3-none-any.whl)包并执行如下命令安装(windows): -下载whl包并安装(windows): -https://gitee.com/aerfaliang/trace_processor/releases/download/trace_processor_37.0/trace_processor-37.0-py3-none-any.whl -``` +```bash pip3 install trace_processor-37.0-py3-none-any.whl ``` -安装完成后直接使用以下命令 +安装完成后直接执行如下命令: -``` +```bash python -m trace_processor --httpd path/to/xxx_merged.json ``` -等待加载完毕,刷新[perfetto](https://ui.perfetto.dev/)界面,点击Use old version regardless,再点击`YES, use loaded trace`即可展示timeline +等待加载完毕,刷新[perfetto](https://ui.perfetto.dev/)界面,单击Use old version regardless,再单击`YES, use loaded trace`即可展示timeline。