溢出检测场景
若用户在训练过程中怀疑网络存在溢出问题,常见现象为loss scale不更新,用户可以使用溢出检测。具体操作步骤如下。
- 参考工具安装,完成ptdbg_ascend组件包安装。在训练脚本中导入精度工具包,使能精度工具溢出定位。
from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump
- 在模型定义后,训练循环开始前,添加溢出检测函数。
- 进行全量溢出检测。
from ptdbg_ascend import register_hook, overflow_check, seed_all, set_dump_path, set_dump_switch, acc_cmp_dump seed_all() ... # 设置dump路径,最终数据保存在此路径下 set_dump_path("./data/dump", dump_tag='npu_overflow') # 使能溢出检测 register_hook(model, overflow_check, overflow_nums=1) ...
- 进行全量溢出检测。
- 执行训练,dump溢出数据。若有溢出,则会抛出异常并结束训练。溢出相关回显信息如图图1和图2所示。
溢出检测dump场景下,若检测到API溢出,此时不需要配置set_dump_path,dump执行时会在当前目录自动生成ptdbg_dump_{version}目录,dump结果如下:
- Overflow_info_{timestamp}.pkl。
- Overflow_info_{timestamp}目录。
- 此时溢出结果可能过程溢出,需参见数据dump比对场景对比此API在NPU和GPU上的精度是否一致,若不一致则表示存在精度溢出问题,需联系华为工程师解决,可进入昇腾开源社区使用issue进行沟通。若精度数据一致,表示此溢出不影响整网精度。
父主题: 精度调测