概述与原理
概述
因为在同一模型或算子调试过程中,用户定位算子相关的计算精度问题时费时费力,所以推出了精度比对工具ptdbg_ascend。精度比对工具通过在PyTorch模型中注入hook,跟踪计算图中算子的前向传播与反向传播时的输入与输出,排查存在的计算精度误差,进行问题的精准定位。
使用场景
- 同一模型从GPU(或CPU)移植到NPU中存在精度下降问题,对比NPU芯片中的算子计算数值与GPU(CPU)芯片中的算子计算数值,进行问题定位。
- 同一模型进行迭代(模型、算子或设备迭代)时存在精度下降问题,对比相同模型在迭代前后版本的算子计算数值,进行问题定位。
基本原理
普遍适用的比对方法是以模型为单位,采用hook机制挂在模型上。当模型在CPU(或GPU)上进行正向传播时跟踪并dump每一层的数值输入与输出,在反向传播时跟踪并dump每一层的梯度输入值与输出值;同样的当模型在NPU中进行计算时采用相同的方式记录下相应的数据,通过对比dump出的数值,计算两者的余弦相似度、均方根误差和最大绝对误差,定位和排查NPU算子存在的计算精度问题。
图1即为精度对比的基本逻辑,以下要点需要注意:
算子匹配条件
判断运行在CPU和NPU上的两个算子是否相同的条件如下:
- 两个算子的名字是否相同。
- 两个算子的输入输出tensor数量和各个tensor的shape是否相同。
通常满足以上的两个条件,就认为是同一个算子,可以成功进行算子的匹配,后续进行相应的计算精度比对。如果比对结果中产生大量名字或者shape不匹配的情况,建议优先检查NPU与CPU/GPU运行的模型超参数是否一致。
父主题: 精度比对工具说明