文档
注册

概述与原理

概述

因为在同一模型或算子调试过程中,用户定位算子相关的计算精度问题时费时费力,所以推出了精度比对工具ptdbg_ascend。精度比对工具通过在PyTorch模型中注入hook,跟踪计算图中算子的前向传播与反向传播时的输入与输出,排查存在的计算精度误差,进行问题的精准定位。

本章节提供了ptdbg_ascend工具的说明信息供用户使用时参考。工具使用指南可参考溢出检测使用指南数据dump比对使用指南

使用场景

  • 同一模型从GPU(或CPU)移植到NPU中存在精度下降问题,对比NPU芯片中的算子计算数值与GPU(CPU)芯片中的算子计算数值,进行问题定位。
  • 同一模型进行迭代(模型、算子或设备迭代)时存在精度下降问题,对比相同模型在迭代前后版本的算子计算数值,进行问题定位。

当前ptdbg_ascend精度工具不支持集群场景。

基本原理

普遍适用的比对方法是以模型为单位,采用hook机制挂在模型上。当模型在CPU(或GPU)上进行正向传播时跟踪并dump每一层的数值输入与输出,在反向传播时跟踪并dump每一层的梯度输入值与输出值;同样的当模型在NPU中进行计算时采用相同的方式记录下相应的数据,通过对比dump出的数值,计算余弦相似度和均方根误差的方式,定位和排查NPU算子存在的计算精度问题。

图1 精度比对逻辑参考图

图1即为精度对比的基本逻辑,以下要点需要注意:

  1. 需要对大量的变量进行控制,要确保模型结构参数等相同。
  2. 相同的模型在不同的硬件设备上进行运算时,可能会出现相同的计算会调用不同的底层算子,造成NPU算子可能出现不匹配情形。
  3. NPU与CPU/GPU的计算结果误差可能会随着模型的执行不断累积,最终会出现同一个算子因为输入的数据差异较大而无法匹配对比计算精度的情况。

其中问题2表现如下图2

图2 运行流程对比图

由于可能会出现融合算子,所以在算子的逐一匹配时可能会出现错误匹配或无法匹配的问题,例如图2中NPU算子npu_op_1与npu_op_2无法和cpu_op_k进行匹配,会跳过当前算子的匹配,直到到npu_op_3和cpu_op_3才重新对齐开始匹配。

算子匹配条件

判断运行在CPU和NPU上的两个算子是否相同的条件如下:

  1. 两个算子的名字是否相同。
  2. 两个算子的输入输出tensor数量和各个tensor的shape是否相同。

通常满足以上的两个条件,就认为是同一个算子,可以成功进行算子的匹配,后续进行相应的计算精度比对。

搜索结果
找到“0”个结果

当前产品无相关内容

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