configure_hook
功能说明
设置dump范围。
建议在PrecisionDebugger模块与模型初始化之间的任意位置添加,不添加此函数时默认使用mode="api_stack" dump整网数据。
原型
- dump:
debugger.configure_hook(mode="api_stack", scope=[], api_list=[], filter_switch="OFF", acl_config=None, backward_input=[], input_output_mode=["all"], summary_only=False)
- 溢出检测:
debugger.configure_hook(mode=None, acl_config=None, overflow_nums=1, need_replicate=False)
参数名 |
说明 |
是否必选 |
---|---|---|
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="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次溢出,训练停止,配置为-1时,表示持续检测溢出直到训练结束。 |
否 |
need_replicate |
过程dump数据生成开关,执行溢出检测时,dump目录下会生成forward_real_data和backward_real_data的过程dump数据目录,可取值True(生成)或False(不生成),默认不生成。 |
否 |
函数示例
configure_hook可配置多种dump模式,示例如下:
- 示例1:dump指定API列表
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="list", scope=["Tensor_permute_1_forward", "Tensor_transpose_2_forward", "Torch_relu_3_backward"])
- 示例2:dump指定范围
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="range", scope=["Tensor_abs_1_forward", "Tensor_transpose_3_forward"])
- 示例3:STACK模式,只dump堆栈信息
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="stack", scope=["Tensor_abs_1_forward", "Tensor_transpose_3_forward"])
- 示例4:dump指定前向API的ACL级别数据
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="acl", scope=["Tensor_permute_1_forward"], acl_config="./dump.json")
- 示例5:dump指定反向API的ACL级别数据
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="acl", scope=["Functional_conv2d_1_backward"], acl_config="./dump.json", backward_input=["./npu_dump/ptdbg_dump_v4.0/setp0/rank0/api_stack_dump/Functional_conv2d_1_backward_input.0.npy"])
- 示例6:dump指定某一类API的API级别输入输出数据
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="api_list", api_list=["relu"])
mode="api_list"时不配置scope。
- 示例7:dump全部API级别输入输出数据以及相应堆栈信息
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(mode="api_stack")
mode="api_stack"时不配置scope。
- 示例8: dump全部API级别输入输出数据并包含bool和整型的tensor以及浮点、bool和整型的标量,配置为OFF,会dump bool和整型数据
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(filter_switch="OFF")
配置filter_switch="OFF"同时也可以配置mode、scope和api_list,除dump ACL级别数据。
- 示例9:仅保存dump的数据文件名包含“backward”的反向.npy文件
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(input_output_mode=["backward"])
- 示例10:仅dump pkl文件
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="dump", step=[0]) debugger.configure_hook(summary_only=True)
- 示例11:溢出检测dump
debugger = PrecisionDebugger(dump_path="./dump_path", hook_name="overflow_check", step=[0]) debugger.configure_hook(overflow_nums=1)
仅支持NPU环境。