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在运行时是否存在精度问题。