diff --git "a/debug/accuracy_tools/ptdbg_ascend/doc/ptdbg_ascend\347\262\276\345\272\246\345\267\245\345\205\267\345\212\237\350\203\275\350\257\264\346\230\216_v6.0.T3.md" "b/debug/accuracy_tools/ptdbg_ascend/doc/ptdbg_ascend\347\262\276\345\272\246\345\267\245\345\205\267\345\212\237\350\203\275\350\257\264\346\230\216_v6.0.T3.md"
index fb5ca13eb0ec921c0f9f75f2f5da824d4260dc87..af73a56849588c1a080962f00249700aee9a3630 100644
--- "a/debug/accuracy_tools/ptdbg_ascend/doc/ptdbg_ascend\347\262\276\345\272\246\345\267\245\345\205\267\345\212\237\350\203\275\350\257\264\346\230\216_v6.0.T3.md"
+++ "b/debug/accuracy_tools/ptdbg_ascend/doc/ptdbg_ascend\347\262\276\345\272\246\345\267\245\345\205\267\345\212\237\350\203\275\350\257\264\346\230\216_v6.0.T3.md"
@@ -1414,41 +1414,53 @@ set_dump_switch配置mode为all或api_stack时,结束dump后,在dump目录
```python
from ptdbg_ascend import compare
+from ptdbg_ascend.common.file_check_util import FileChecker
+import argparse
+import os.path
pkl_path = "%s"
dump_data_dir = "%s"
-dump_path_param = {
- "npu_pkl_path": ,
- "bench_pkl_path": ,
- "npu_dump_data_dir": ,
- "bench_dump_data_dir": ,
- "is_print_compare_log": True
-}
+parser = argparse.ArgumentParser(description="compare data")
+parser.add_argument("--npu_pkl_path", type=str, default=pkl_path, help="npu保存数据的pkl路径")
+parser.add_argument("--bench_pkl_path", type=str, default=pkl_path, help="对比数据的pkl路径")
+parser.add_argument("--output_path", type=str, default="./", help="导出对比数据的路径")
-compare(dump_path_param, output_path="", stack_mode="%s")
-```
+args = parser.parse_args()
+npu_pkl_path = args.npu_pkl_path
+bench_pkl_path = args.bench_pkl_path
+output_path = args.output_path
-pkl_path和dump_data_dir字段会自动识别pkl和dump目录的路径,用户需要判断当前dump的环境是NPU、CPU或GPU,并将pkl_path和dump_data_dir字段填入下方dump_path_param函数对应的字段中,例如当前设备为NPU,那么填写方式如下:
+suffix = ".pkl"
+npu_path_checker = FileChecker(npu_pkl_path, "file", "read", suffix)
+npu_path_checker.common_check()
+bench_path_checker = FileChecker(bench_pkl_path, "file", "read", suffix)
+bench_path_checker.common_check()
-```python
-from ptdbg_ascend import compare
-
-pkl_path = "%s"
-dump_data_dir = "%s"
+npu_dump_data_dir = npu_pkl_path[:-len(suffix)]
+bench_dump_data_dir = bench_pkl_path[:-len(suffix)]
+if not os.path.exists(npu_dump_data_dir) or not os.path.exists(bench_dump_data_dir):
+ npu_dump_data_dir = ""
+ bench_dump_data_dir = ""
dump_path_param = {
- "npu_pkl_path": pkl_path,
- "bench_pkl_path": ,
- "npu_dump_data_dir": dump_data_dir,
- "bench_dump_data_dir": ,
- "is_print_compare_log": True
+ "npu_pkl_path": npu_pkl_path,
+ "bench_pkl_path": bench_pkl_path,
+ "npu_dump_data_dir": npu_dump_data_dir,
+ "bench_dump_data_dir": bench_dump_data_dir,
+ "is_print_compare_log": True
}
-compare(dump_path_param, output_path="", stack_mode="%s")
+compare(dump_path_param, output_path=output_path, stack_mode=%s)
+```
+
+compare_data.py比对脚本模板可以直接使用命令行配置比对参数,不需要通过编辑compare_data.py文件来修改,示例如下:
+
+```bash
+python3 compare_data.py --npu_pkl_path "./npu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl" --bench_pkl_path "./gpu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl" --output_path "./output_path"
```
-此时,另一侧数据的路径,需要用户另外识别并填入。
+该命令行支持--npu_pkl_path、--bench_pkl_path和--output三个比对参数,其中pkl_path两个参数配置后,脚本可以自动识别同级目录下的dump_data目录,若同级目录下不存在dump_data目录,则直接执行“**pkl文件比对**”。仅ptdbg_ascend 6.0或更高版本支持比对命令行配置比对参数。更多介绍请参见“**执行比对操作**”。
### set_overflow_check_switch
@@ -1805,7 +1817,7 @@ compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_mat
| 参数名 | 说明 | 是否必选 |
| ------------ | ------------------------------------------------------------ | -------- |
| input_param | 配置dump数据文件及目录。数据类型:dict。配置参数包括:
"npu_pkl_path":指定NPU dump目录下的.pkl文件。参数示例:"npu_pkl_path": "./npu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl"。必选。
"bench_pkl_path":指定CPU、GPU或NPU dump目录下的.pkl文件。参数示例:"bench_pkl_path": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl"。必选。
"npu_dump_data_dir":"指定NPU dump目录下的dump数据目录。参数示例:"npu_dump_data_dir": "./npu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump"。可选,仅比对pkl文件时不选。
"bench_dump_data_dir":"指定CPU、GPU或NPU dump目录下的dump数据目录。参数示例:"npu_dump_data_dir": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump"。可选,仅比对pkl文件时不选。
"is_print_compare_log":配置是否开启日志打屏。可取值True或False。可选。 | 是 |
-| output_path | 配置比对结果csv文件存盘目录。参数示例:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.csv`。数据类型:str。 | 是 |
+| output_path | 配置比对结果csv文件存盘目录。参数示例:"./output_path",默认为"./"。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.csv`。数据类型:str。 | 否 |
| stack_mode | 配置stack_mode的开关。仅当dump数据时配置debugger.configure_hook或set_dump_switch的mode="api_stack"时需要开启。可取值True或False,参数示例:stack_mode=True,默认为False。数据类型:bool。 | 否 |
| auto_analyze | 自动精度分析,开启后工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。可取值True或False,参数示例:auto_analyze=False,默认为True。数据类型:bool。 | 否 |
| fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。可取值True或False,参数示例:fuzzy_match=True,默认为False。数据类型:bool。 | 否 |
@@ -1815,7 +1827,7 @@ compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_mat
单机单卡场景下创建比对脚本,例如compare.py,拷贝如下代码,具体参数请根据实际环境修改。
```python
-from ptdbg_ascend import *
+from ptdbg_ascend import compare
dump_result_param={
"npu_pkl_path": "./npu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl",
"bench_pkl_path": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl",
@@ -1823,7 +1835,7 @@ dump_result_param={
"bench_dump_data_dir": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump",
"is_print_compare_log": True
}
-compare(dump_result_param, output_path="./output", stack_mode=True)
+compare(dump_result_param, output_path="./output_path", stack_mode=True)
```
### pkl文件比对
@@ -1841,7 +1853,7 @@ dump_result_param={
"bench_pkl_path": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl",
"is_print_compare_log": True
}
-compare(dump_result_param, output_path="./output", stack_mode=True)
+compare(dump_result_param, output_path="./output_path", stack_mode=True)
```
**比对结果**
@@ -1878,7 +1890,8 @@ parse(pkl_file, module_name_prefix)
| ------------------ | ------------------------------------------------------------ | -------- |
| pkl_file | 指定dump数据文件中的pkl文件名。参数示例:"./npu_dump/ptdbg_dump_v4.0/step0/rank0/dump.pkl"。数据类型:str。 | 是 |
| module_name_prefix | 指定待提取的API接口前缀。参数示例:"Torch.norm.1.forward"。数据类型:str。 | 是 |
-|**函数示例**|||
+
+**函数示例**
创建堆栈信息及数据统计信息提取脚本,例如parse.py,拷贝如下代码,具体参数请根据实际环境修改。
@@ -1887,6 +1900,93 @@ from ptdbg_ascend import *
parse("./npu_dump/ptdbg_dump_v4.0/step0/rank0/dump.pkl", "Torch.batch.normal.1.forward")
```
+### 执行比对操作
+
+比对操作通过执行比对脚本启动,根据不同的比对脚本分为如下场景:
+
+- dump数据时自动生成比对脚本模板,脚本名为compare_data.py,该脚本模板也可以直接手动创建:
+
+ ```python
+ from ptdbg_ascend import compare
+ from ptdbg_ascend.common.file_check_util import FileChecker
+ import argparse
+ import os.path
+
+ pkl_path = "%s"
+ dump_data_dir = "%s"
+
+ parser = argparse.ArgumentParser(description="compare data")
+ parser.add_argument("--npu_pkl_path", type=str, default=pkl_path, help="npu保存数据的pkl路径")
+ parser.add_argument("--bench_pkl_path", type=str, default=pkl_path, help="对比数据的pkl路径")
+ parser.add_argument("--output_path", type=str, default="./", help="导出对比数据的路径")
+
+ args = parser.parse_args()
+ npu_pkl_path = args.npu_pkl_path
+ bench_pkl_path = args.bench_pkl_path
+ output_path = args.output_path
+
+ suffix = ".pkl"
+ npu_path_checker = FileChecker(npu_pkl_path, "file", "read", suffix)
+ npu_path_checker.common_check()
+ bench_path_checker = FileChecker(bench_pkl_path, "file", "read", suffix)
+ bench_path_checker.common_check()
+
+ npu_dump_data_dir = npu_pkl_path[:-len(suffix)]
+ bench_dump_data_dir = bench_pkl_path[:-len(suffix)]
+ if not os.path.exists(npu_dump_data_dir) or not os.path.exists(bench_dump_data_dir):
+ npu_dump_data_dir = ""
+ bench_dump_data_dir = ""
+
+ dump_path_param = {
+ "npu_pkl_path": npu_pkl_path,
+ "bench_pkl_path": bench_pkl_path,
+ "npu_dump_data_dir": npu_dump_data_dir,
+ "bench_dump_data_dir": bench_dump_data_dir,
+ "is_print_compare_log": True
+ }
+
+ compare(dump_path_param, output_path=output_path, stack_mode=%s)
+ ```
+
+ 执行如下命令启动比对操作:
+
+ ```bash
+ python3 compare_data.py --npu_pkl_path "npu_pkl_path" --bench_pkl_path "bench_pkl_path" --output_path "output_path"
+ ```
+
+ 命令行示例:python3 compare_data.py --npu_pkl_path "./npu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl" --bench_pkl_path "./gpu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl" --output_path "./output"
+
+ - 该命令行支持--npu_pkl_path、--bench_pkl_path和--output三个**命令行比对参数**,其中pkl_path两个参数配置后,脚本可以自动识别同级目录下的dump_data目录,若同级目录下不存在dump_data目录,则直接执行“**pkl文件比对**”。
+ - **命令行比对参数**的优先级高于compare.py比对脚本内的参数,配置命令行比对参数后,不需要通过编辑compare_data.py文件来修改比对参数。
+ - **命令行比对参数**均为可选,但若未配置pkl_path两个参数,则需要在比对脚本中配置。
+ - 仅ptdbg_ascend 6.0或更高版本支持**命令行比对参数**。
+
+ | 参数 | 说明 | 是否必选 |
+ | ---------------- | ------------------------------------------------------------ | -------- |
+ | --npu_pkl_path | 指定NPU dump目录下的.pkl文件。参数示例:--npu_pkl_path "./npu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl"。 | 否 |
+ | --bench_pkl_path | 指定CPU、GPU或NPU dump目录下的.pkl文件。参数示例:--bench_pkl_path "./gpu_dump/ptdbg_dump_v6.0/step0/rank0/api_stack_dump.pkl" | 否 |
+ | --output_path | 配置比对结果csv文件存盘目录。参数示例:--output_path "./output",默认为"./"。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.csv`。 | 否 |
+
+- 手动创建比对脚本,自定义脚本名为compare.py:
+
+ ```python
+ from ptdbg_ascend import compare
+ dump_result_param={
+ "npu_pkl_path": "./npu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl",
+ "bench_pkl_path": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump.pkl",
+ "npu_dump_data_dir": "./npu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump",
+ "bench_dump_data_dir": "./gpu_dump/ptdbg_dump_v4.0/step0/rank0/api_stack_dump",
+ "is_print_compare_log": True
+ }
+ compare(dump_result_param, output_path="./output_path", stack_mode=True)
+ ```
+
+ 执行如下命令启动比对操作:
+
+ ```bash
+ python3 compare.py
+ ```
+
### 计算精度评价指标
PyTorch精度比对是以CPU或GPU的计算结果为标杆,通过计算精度评价指标判断API在运行时是否存在精度问题。