From 01f40bf64602b70f7dfffbc17bbaabfcf8c4af14 Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Mon, 6 Nov 2023 16:25:40 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[att=5Fptdbg]6.0=E7=89=88=E6=9C=ACatt=5Fptd?= =?UTF-8?q?bg=E5=B7=A5=E5=85=B7=E4=BD=BF=E7=94=A8=E6=89=8B=E5=86=8C?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8E=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api_accuracy_checker/README.md | 35 +++++++++++++------ ...0\203\275\350\257\264\346\230\216_v4.1.md" | 21 +++++------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/debug/accuracy_tools/api_accuracy_checker/README.md b/debug/accuracy_tools/api_accuracy_checker/README.md index 2ec0bd9792..784be73c21 100644 --- a/debug/accuracy_tools/api_accuracy_checker/README.md +++ b/debug/accuracy_tools/api_accuracy_checker/README.md @@ -21,10 +21,10 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 export PYTHONPATH=$PYTHONPATH:$ATT_HOME/debug/accuracy_tools/ ``` - 安装依赖tqdm、prettytable、pyyaml + 安装依赖tqdm、rich、pyyaml ```bash - pip3 install tqdm prettytable pyyaml + pip3 install tqdm rich pyyaml ``` 2. 在训练脚本(如main.py)中加入以下代码导入工具dump模块,启动训练即可自动抓取网络所有API信息 @@ -38,8 +38,14 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 ```Python import api_accuracy_checker.dump as DP DP.dump.set_dump_switch("ON") + + ... + + DP.dump.set_dump_switch("OFF") # 可选,未配置"OFF"参数时表示dump从DP.dump.set_dump_switch("ON")开始的所有数据 ``` + DP.dump.set_dump_switch:开启工具dump模块,该接口取值为"ON"和"OFF"。 + 上述代码要添加在迭代前向的代码段中,或者说是遍历数据集循环的代码段中。如对于GPT-3可以添加在pretrain_gpt.py 的forward_step函数中。之后工具会适配这个场景开关的自动打开。 工具默认抓取训练的**第二个迭代**并且在第二个迭代后会报错退出训练进程,可通过target_iter参数配置。报错信息如下,这个报错仅用于停止训练,属于正常现象: @@ -76,12 +82,14 @@ 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或--forward_input_file | 指定前向API信息文件forward_info_{pid}.json。 | 是 | + | -backward或--backward_input_file | 指定反向API信息文件backward_info_{pid}.json。 | 是 | + | -save_error_data | 保存精度未达标的API输入输出数据。 | 否 | + | -o或--out_path | 指指定run_ut执行结果存盘路径,默认“./”(相对于run_ut的路径)。 | 否 | + | -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中查询其各个输出的达标情况以及比较指标。 @@ -112,10 +120,10 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 export PYTHONPATH=$PYTHONPATH:$ATT_HOME/debug/accuracy_tools/ ``` - 安装依赖tqdm、prettytable、pyyaml + 安装依赖tqdm、rich、pyyaml ```bash - pip3 install tqdm prettytable pyyaml + pip3 install tqdm rich pyyaml ``` 2. 执行溢出API解析操作 @@ -125,6 +133,13 @@ Ascend模型精度预检工具能在昇腾NPU上扫描用户训练模型中所 python run_overflow_check.py -forward ./forward_info_0.json ``` + | 参数名称 | 说明 | 是否必选 | + | -------------------------------- | -------------------------------------------------- | -------- | + | -forward或--forward_input_file | 指定前向API信息文件forward_info_{pid}.json。 | 是 | + | -backward或--backward_input_file | 指定反向API信息文件backward_info_{pid}.json。 | 是 | + | -j或--jit_compile | 开启jit编译。 | 否 | + | -d或--device | 指定Device ID,选择UT代码运行所在的卡,默认值为0。 | 否 | + 反向过程溢出的API暂不支持该功能。 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 4a8ce75df4..28c0cbfe94 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" @@ -816,19 +816,17 @@ dump操作必选。 **函数原型** ```python -register_hook(model, hook, overflow_nums=overflow_nums, dump_mode=dump_mode, dump_config=dump_config_file, rank=0) +register_hook(model, hook, overflow_nums=overflow_nums, dump_mode=dump_mode, dump_config=dump_config_file) ``` **参数说明** | 参数名 | 说明 | 是否必选 | | ------------- | ------------------------------------------------------------ | -------- | -| model | model对象。 | 是 | -| hook | 注册工具的dump和溢出检测钩子。可取值overflow_check和acc_cmp_dump,二选一。 | 是 | +| hook | 注册工具的dump和溢出检测钩子。可取值overflow_check(表示溢出检测)和acc_cmp_dump(表示dump数据),二选一。 | 是 | | overflow_nums | 控制溢出次数,表示第N次溢出时,停止训练,过程中检测到溢出API对应ACL数据均dump。参数示例:overflow_nums=3。配置overflow_check时可配置,默认不配置,即检测到1次溢出,训练停止。 | 否 | | dump_mode | 控制针对溢出API的dump模式。可取值"api"或"acl",配置acl时表示dump ACL级别的溢出数据,此时set_dump_path参数不生效,dump数据目录由dump_config的.json文件配置,参数示例:dump_mode="acl"。默认不配置,即dump API级别的溢出数据。 | 否 | | dump_config | acl dump的配置文件。dump_mode="acl"时,该参数必选;dump_mode="api"时,该参数不选。参数示例:dump_config='./dump.json'。 | 否 | -| rank | 控制dump数据保存的rank目录名称。参数示例:rank=1。默认不配置,即自动读取dump数据所属的卡并保存在该卡对应的rank目录下。目录结构参见“**dump数据存盘说明**”。
多卡情况下,可能出现工具识别rank出错,导致dump数据保存到错误的rank目录下,此时需要根据“**[rank_id获取方法](https://gitee.com/ascend/att/blob/master/debug/accuracy_tools/ptdbg_ascend/doc/rank_id获取方法.md)**”配置该参数,以获取正确的rank_id;工具可正确识别rank_id时无须配置该参数。 | 否 | **函数示例** @@ -1170,7 +1168,7 @@ dump结果目录结构示例如下: | └── rank7 ``` -其中ptdbg_dump_{version}为未设置set_dump_path的dump_tag参数时的默认命名;rank为设备上各卡的ID,每张卡上dump的数据会生成对应dump目录,可由register_hook函数的rank参数控制rank目录名称。 +其中ptdbg_dump_{version}为未设置set_dump_path的dump_tag参数时的默认命名;rank为设备上各卡的ID,每张卡上dump的数据会生成对应dump目录。 当使用debugger方式dump数据时,配置了PrecisionDebugger模块的step=[]参数,dump结果目录则以step为父目录,例如配置step=[0,1,2]时,dump结果目录为: @@ -1211,10 +1209,14 @@ dump结果目录结构示例如下: **溢出检测dump场景** -register_hook设置了overflow_check时,检测API溢出,dump结果的文件名固定为Overflow_info_{timestamp},dump结果如下: +register_hook设置了overflow_check时,检测API溢出,dump结果的文件名形式为{api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数},dump结果如下: -* Overflow_info_{timestamp}.pkl -* Overflow_info_{timestamp}目录 +* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}.pkl +* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}目录 + +例如: +* Tensor___add___1_forward_1.pkl +* Tensor___add___1_forward_1目录 ## CPU或GPU与NPU精度数据比对 @@ -1276,7 +1278,7 @@ compare_distributed('./npu_dump/ptdbg_dump_v2.0', './gpu_dump/ptdbg_dump_v2.0', **函数原型** ```python -compare(input_param, output_path, stack_mode=False, auto_analyze=True, suffix='', fuzzy_match=False) +compare(input_param, output_path, stack_mode=False, auto_analyze=True, fuzzy_match=False) ``` **参数说明** @@ -1287,7 +1289,6 @@ compare(input_param, output_path, stack_mode=False, auto_analyze=True, suffix='' | output_path | 配置比对结果csv文件存盘目录。参数示例:'./output'。文件名称基于时间戳自动生成,格式为:`compare_result_{timestamp}.csv`。 | 是 | | stack_mode | 配置stack_mode的开关。仅当dump数据时配置set_dump_switch的mode="api_stack"时需要开启。参数示例:stack_mode=True,默认为False。 | 否 | | auto_analyze | 自动精度分析,开启后工具自动针对比对结果进行分析,识别到第一个精度不达标节点(在比对结果文件中的“Accuracy Reached or Not”列显示为No),并给出问题可能产生的原因(打屏展示并生成advisor_{timestamp}.txt文件)。可取值True或False,参数示例:auto_analyze=False,默认为True。 | 否 | -| suffix | 标识比对结果的文件名。配置的suffix值在比对结果文件名的compare_result和{timestamp}中间插入,例如:`compare_result_{suffix}_{timestamp}`。默认为空。 | 否 | | fuzzy_match | 模糊匹配。开启后,对于网络中同一层级且命名仅调用次数不同的API,可匹配并进行比对。可取值True或False,参数示例:fuzzy_match=True,默认为False。 | 否 | **函数示例** -- Gitee From bf668e89b609b71f5401174bc44fbe5078b633dc Mon Sep 17 00:00:00 2001 From: user_10012209 <734267852@qq.com> Date: Mon, 6 Nov 2023 16:34:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[att=5Fptdbg]6.0=E7=89=88=E6=9C=ACatt=5Fptd?= =?UTF-8?q?bg=E5=B7=A5=E5=85=B7=E4=BD=BF=E7=94=A8=E6=89=8B=E5=86=8C?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=8E=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...12\237\350\203\275\350\257\264\346\230\216_v4.1.md" | 10 +++------- 1 file changed, 3 insertions(+), 7 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 28c0cbfe94..3b457e4650 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" @@ -1209,14 +1209,10 @@ dump结果目录结构示例如下: **溢出检测dump场景** -register_hook设置了overflow_check时,检测API溢出,dump结果的文件名形式为{api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数},dump结果如下: +register_hook设置了overflow_check时,检测API溢出,dump结果的文件名固定为Overflow_info_{timestamp},dump结果如下: -* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}.pkl -* {api_type}_{api_name}_{api调用次数}_{正反向}_{当前溢出次数}目录 - -例如: -* Tensor___add___1_forward_1.pkl -* Tensor___add___1_forward_1目录 +- Overflow_info_{timestamp}.pkl +- Overflow_info_{timestamp}目录 ## CPU或GPU与NPU精度数据比对 -- Gitee