昇腾社区首页
中文
注册

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)
表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="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模式,示例如下:

  • 以下均以dump部分API数据为例,API名可以从首次dump整网数据的结果csv文件中的NPU Name或Bench Name列获取。
  • 以下仅为该函数配置示例,完整代码请参见数据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环境。