文档
注册

溢出检测使用指南

  1. 在训练脚本中导入精度工具包,使能精度工具溢出定位。
    from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
  2. 在模型定义后,训练循环开始前,添加溢出检测函数。
    • 全量溢出检测。
      from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
      seed_all()
      ...
      
      set_dump_path("./data/dump/npu.pkl", dump_tag='npu_overflow')    # 设置dump路径,最终数据保存在此路径下
      register_hook(model, overflow_check, overflow_nums=jump_out_num)    # 使能溢出检测
      
      ...
    • dump指定API的ACL级别溢出数据。
      from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
      seed_all()
      ...
      # dump指定API的ACL级别溢出数据
      register_hook(model, overflow_check, dump_mode='acl', dump_config='./dump.json') 
      
      # 在期望溢出检测的step位置开始前打开溢出检测开关
      set_overflow_check_switch("ON") 
      ... 
      
      # 在step结束的位置关闭溢出检测开关
      set_overflow_check_switch("OFF") 
      ...
    • dump指定反向API的ACL级别的溢出数据。
      from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
      seed_all()...
      
      # dump指定反向API的ACL级别溢出数据
      register_hook(model, acc_cmp_dump, dump_mode='acl', dump_config='./dump.json')
      set_dump_switch("ON", mode="acl", scope=["Functional_conv2d_1_backward"])
      set_backward_input(["acl_dump_xxx//Functional_conv2d_1_backward_input.0.npy"])
  3. 执行训练,dump溢出数据。若有溢出,则会抛出异常并结束训练。样例异常信息如下图。
    图1 溢出异常
  4. 参考解析dump文件,将dump文件转换为numpy格式文件。
    再通过如下脚本将numpy文件转换为tensor并打印。
    import numpy as np
    path = 'path_to_numpy_file'    # 文件路径请根据实际情况设置
    tensor = np.load(path)
    print(tensor)
  5. 逐个检视打印的tensor中是否有inf、nan的元素。若有,则说明该算子出现了溢出问题,可以联系华为工程师解决。若没有,则说明该算子的溢出不影响精度,非问题,需要进一步找别的溢出算子进行分析、或进行dump分析定位问题。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词