概述与原理
概述
在PyTorch训练网络,对同一模型或API调试过程中,遇到API相关的计算精度问题,定位时费时费力。
ptdbg_ascend为PyTorch精度工具,用来进行PyTorch整网API粒度的数据dump、精度比对和溢出检测,从而定位PyTorch训练场景下的精度问题。
使用场景
主要的使用场景包括:
- 同一模型,从CPU或GPU移植到NPU中存在精度下降问题,对比NPU芯片中的API计算数值与CPU或GPU芯片中的API计算数值,进行问题定位。
- 同一模型,进行迭代(模型、框架版本升级或设备硬件升级)时存在的精度下降问题,对比相同模型在迭代前后版本的API计算数值,进行问题定位。
基本原理
精度对比工具,通过在PyTorch模型中注册hook,跟踪计算图中API的前向传播与反向传播时的输入与输出,排查存在计算精度误差,进行问题的精准定位。
精度比对流程:
- 当模型在CPU或GPU上进行正向和反向传播时,分别dump每一层的数值输入与输出。
- 当模型在NPU中进行计算时,采用相同的方式dump下相应的数据。
- 通过对比dump出的数值,计算余弦相似度和最大绝对误差的方式,定位和排查NPU API存在的计算精度问题,如图1所示。
图1即为精度对比的基本逻辑,以下要点需要注意:
API匹配条件
进行精度比对时,需要判断CPU或GPU的API与NPU的API是否相同可比对,须满足以下匹配条件:
- 两个API的名称相同,API命名规则:{api_type}_{api_name}_{api调用次数}_{正反向}_{输入输出}.index,如:Functional_conv2d_1_backward_input.0。
- 两个API的输入输出Tensor数量和各个Tensor的Shape相同。
通常满足以上两个条件,ptdbg_ascend就认为是同一个API,成功进行API的匹配,后续进行相应的计算精度比对。
父主题: 精度比对工具说明