From e3a625697be0fd4e4bcc5c42a431931ee8332a7b Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Tue, 31 Oct 2023 19:26:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[ptdbg=5Fascend]=E4=BD=BF=E7=94=A8=E6=89=8B?= =?UTF-8?q?=E5=86=8C=E6=9B=B4=E6=96=B0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\203\275\350\257\264\346\230\216_v4.1.md" | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) 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_v4.1.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_v4.1.md" index 393b6c241d..c7a6863555 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_v4.1.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_v4.1.md" @@ -459,13 +459,13 @@ PrecisionDebugger(dump_path=None, hook_name=None, rank=None, step=[], enable_dat dump: ```python -debugger.configure_hook(mode="api_stack", scope=[], api_list=[], filter_switch="ON", acl_config=None, backward_input=[], input_output_mode=["all"], summary_only=False) +debugger.configure_hook(mode="api_stack", scope=[], api_list=[], filter_switch="OFF", acl_config=None, backward_input=[], input_output_mode=["all"], summary_only=False) ``` 溢出检测: ```python -debugger.configure_hook(mode=None, acl_config=None, overflow_nums=1) +debugger.configure_hook(mode=None, acl_config=None, overflow_nums=1, need_replicate=False) ``` **参数说明** @@ -474,12 +474,13 @@ debugger.configure_hook(mode=None, acl_config=None, overflow_nums=1) | ----------------- | ------------------------------------------------------------ | -------- | | mode | dump模式。可取值"all"、"list"、"range"、"stack"、"acl"、"api_list"、"api_stack",各参数含义请参见本节的“**函数示例**”。参数示例:mode="list"。默认为api_stack。该参数配置值将作为dump数据文件名的前缀,详情请参见“**dump数据存盘说明**”。 | 否 | | scope或api_list | dump范围。根据model配置的模式选择dump的API范围,mode="api_list"时,需要配置api_list=[],其他模式有需要时配置scope=[]。参数示例:scope=["Tensor_permute_1_forward", "Tensor_transpose_2_forward"]、api_list=["relu"]。默认为空。 | 否 | -| filter_switch | dump bool和整型的tensor以及浮点、bool和整型的标量的过滤开关。可取值"ON"(表示开启过滤,即不dump)或"OFF"(表示关闭过滤)。参数示例:filter_switch="OFF"。PrecisionDebugger模块hook_name=dump时,默认不配置,即filter_switch="ON",表示过滤上述数据;PrecisionDebugger模块hook_name=overflow_check时,默认不配置,即filter_switch="OFF",表示dump上述数据。 | 否 | +| filter_switch | dump bool和整型的tensor以及浮点、bool和整型的标量的过滤开关。可取值"ON"(表示开启过滤,即不dump)或"OFF"(表示关闭过滤)。参数示例:filter_switch="ON"。默认不配置,即filter_switch="OFF",表示dump上述数据。 | 否 | | acl_config | acl dump的配置文件。mode="acl"时,该参数必选;mode为其他值时,该参数不选。参数示例:acl_config='./dump.json'。dump.json配置文件详细介绍请参见“**dump.json配置文件说明**”。 | 否 | | backward_input | 该输入文件为首次运行训练dump得到反向API输入的.npy文件。例如若需要dump Functional_conv2d_1 API的反向过程的输入输出,则需要在dump目录下查找命名包含Functional_conv2d_1、backward和input字段的.npy文件。 | 否 | | input_output_mode | dump数据过滤。可取值"all"、"forward"、"backward"、"input"和"output",表示仅保存dump的数据中文件名包含"forward"、"backward"、"input"和"output"的前向、反向、输入或输出的.npy文件。参数示例input_output_mode=["backward"]或input_output_mode=["forward", "backward"]。默认为all,即保存所有dump的数据。除了all参数只能单独配置外,其他参数可以自由组合。 | 否 | | summary_only | dump npy文件过滤,可取值True或False,配置为True后仅dump保存API统计信息的pkl文件,参数示例:summary_only=False,默认为False。 | 否 | | overflow_nums | 控制溢出次数,表示第N次溢出时,停止训练,过程中检测到溢出API对应ACL数据均dump。参数示例:overflow_nums=3。配置overflow_check时可配置,默认不配置,即检测到1次溢出,训练停止。 | 否 | +| need_replicate | 过程dump数据生成开关,执行溢出检测时,dump目录下会生成forward_real_data和backward_real_data的过程dump数据目录,可取值True(生成)或False(不生成),默认不生成。 | 否 | **函数示例** @@ -878,7 +879,7 @@ dump操作必选。 **函数原型** ```python -def set_dump_switch(switch, mode="all", scope=[], api_list=[], filter_switch="ON", dump_mode=["all"], summary_only=False): +def set_dump_switch(switch, mode="all", scope=[], api_list=[], filter_switch="OFF", dump_mode=["all"], summary_only=False): ``` **参数说明** @@ -888,7 +889,7 @@ def set_dump_switch(switch, mode="all", scope=[], api_list=[], filter_switch="ON | switch | dump开关。可取值"ON"或"OFF"。须在选定dump开始的位置配置set_dump_switch("ON");dump结束的位置设置set_dump_switch("OFF")。 | 是 | | mode | dump模式。可取值"all"、"list"、"range"、"stack"、"acl"、"api_list"、"api_stack",各参数含义请参见本节的“**函数示例**”。参数示例:mode="list"。默认为all。该参数配置值将作为dump数据文件名的前缀,详情请参见“**dump数据存盘说明**”。 | 否 | | scope或api_list | dump范围。根据model配置的模式选择dump的API范围。参数示例:scope=["Tensor_permute_1_forward", "Tensor_transpose_2_forward"]、api_list=["relu"]。默认为空。 | 否 | -| filter_switch | dump bool和整型的tensor以及浮点、bool和整型的标量的过滤开关。可取值"ON"或"OFF"。参数示例:filter_switch="OFF"。默认不配置,即filter_switch="ON",表示过滤上述数据。 | 否 | +| filter_switch | dump bool和整型的tensor以及浮点、bool和整型的标量的过滤开关。可取值"ON"或"OFF"。参数示例:filter_switch="ON"。默认不配置,即filter_switch="OFF",表示dump上述数据。 | 否 | | dump_mode | dump数据过滤。可取值"all"、"forward"、"backward"、"input"和"output",表示仅保存dump的数据中文件名包含"forward"、"backward"、"input"和"output"的前向、反向、输入或输出的.npy文件。参数示例dump_mode=["backward"]或dump_mode=["forward", "backward"]。默认为all,即保存所有dump的数据。除了all参数只能单独配置外,其他参数可以自由组合。 | 否 | | summary_only | dump npy文件过滤,可取值True或False,配置为True后仅dump保存API统计信息的pkl文件,参数示例:summary_only=False,默认为False。 | 否 | @@ -1208,14 +1209,10 @@ dump结果目录结构示例如下: **溢出检测dump场景** -register_hook设置了overflow_check时,检测API溢出,dump结果的文件名形式为{api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数},dump结果如下: +register_hook设置了overflow_check时,检测API溢出,dump结果的文件名格式为:`{api_type}___{api_name}___{API调用次数}_{前向反向}_{当前溢出次数}`,dump结果示例如下: -* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}.pkl -* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}目录 - -例如: -* Tensor___add___1_forward_1.pkl -* Tensor___add___1_forward_1目录 +* `Tensor___add___1_forward_1.pkl` +* `Tensor___add___1_forward_1`目录 ## CPU或GPU与NPU精度数据比对 -- Gitee From d9f8e6333af4078b685a7aa15b05ab57c0017c80 Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Tue, 7 Nov 2023 16:02:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[api=5Faccuracy=5Fchecker]=E7=B2=BE?= =?UTF-8?q?=E5=BA=A6=E9=A2=84=E6=A3=80=E5=B7=A5=E5=85=B7=E8=B5=84=E6=96=99?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=8F=8C=E7=99=BE=E7=B2=BE=E5=BA=A6=E6=8C=87?= =?UTF-8?q?=E6=A0=87=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api_accuracy_checker/README.md | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/debug/accuracy_tools/api_accuracy_checker/README.md b/debug/accuracy_tools/api_accuracy_checker/README.md index 784be73c21..0dc6b5526d 100644 --- a/debug/accuracy_tools/api_accuracy_checker/README.md +++ b/debug/accuracy_tools/api_accuracy_checker/README.md @@ -91,9 +91,7 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 | -j或--jit_compile | 开启jit编译。 | 否 | | -d或--device | 指定Device ID,选择UT代码运行所在的卡,默认值为0。 | 否 | - 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数据要通过双万分之一标准,accuracy_checking_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达标情况介绍请参考“**API预检指标**”。 4. 如果需要保存比对不达标的输入和输出数据,可以在run_ut执行命令结尾添加-save_error_data,例如: @@ -102,7 +100,21 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 ``` 数据默认会存盘到'./ut_error_data'路径下(相对于启动run_ut的路径),有需要的话,用户可以通过msCheckerConfig.update_config来配置保存路径,参数为error_data_path -# 溢出API解析工具 +## API预检指标 + +API预检通过测试,则在accuracy_checking_details.csv文件中的“pass”列标记“pass”,否则标记“error”或“warning”,详细规则如下: + +1. 余弦相似度 > 0.99:≤ 0.99为不达标,标记“error”,> 0.9达标,进行下一步; +2. 最大绝对误差 < 0.001:< 0.001达标,标记“pass”,≥ 0.001为不达标,进行下一步; +3. 双百、双千、双万精度指标: + - 对于float16和bfloat16数据:双百指标不通过,标记“error”;双百指标通过,双千指标不通过,标记“warning”;双百、双千指标均通过,标记“pass”。 + - 对于float32和float64数据:双千指标不通过,标记“error”;双千指标通过,双万指标不通过,标记“warning”;双千、双万指标均通过,标记“pass”。 + +4. 在accuracy_checking_result.csv中以“Forward Test Success”和“Backward Test Success”字段统计该算子前向反向输出的测试结果,对于标记“pass”的算子,则在accuracy_checking_result.csv中标记“TRUE”表示测试通过,对于标记“error”或“warning”的算子,则在accuracy_checking_result.csv中标记“FALSE”表示测试不通过。由于一个算子可能有多个前向或反向的输入或输出,那么该类算子的输入或输出中必须全为“pass”,才能在accuracy_checking_result.csv中标记“TRUE”,只要有一个输入或输出标记“error”或“warning”,那么在accuracy_checking_result.csv中标记“FALSE”。 + +双百、双千、双万精度指标是指NPU的Tensor中的元素逐个与对应的标杆数据对比,相对误差小于百分之一、千分之一、万分之一的比例占总元素个数的比例小于百分之一、千分之一、万分之一。 + +# 解析工具 针对训练过程中的溢出检测场景,对于输入正常但输出存在溢出的API,会在训练执行目录下将溢出的API信息按照前向和反向分类,dump并保存为`forward_info_{pid}.json`和`backward_info_{pid}.json`,前向过程溢出的API可通过该工具对`forward_info_{pid}.json`进行解析,输出溢出API为正常溢出还是非正常溢出,从而帮助用户快速判断。 -- Gitee