文档
注册

概述与原理

概述

在PyTorch训练网络,对同一模型或API调试过程中,遇到API相关的计算精度问题,定位时费时费力。

ptdbg_ascend为PyTorch精度工具,用来进行PyTorch整网API粒度的数据dump、精度比对和溢出检测,从而定位PyTorch训练场景下的精度问题。

使用场景

主要的使用场景包括:

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

基本原理

精度对比工具,通过在PyTorch模型中注册hook,跟踪计算图中API的前向传播与反向传播时的输入与输出,排查存在计算精度误差,进行问题的精准定位。

精度比对流程:

  1. 当模型在CPU或GPU上进行正向和反向传播时,分别dump每一层的数值输入与输出。
  2. 当模型在NPU中进行计算时,采用相同的方式dump下相应的数据。
  3. 通过对比dump出的数值,计算余弦相似度和最大绝对误差的方式,定位和排查NPU API存在的计算精度问题,如图1所示。
图1 精度比对逻辑参考图

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

  1. 需要控制CPU/GPU侧与NPU侧运行的模型参数和超参数相同,控制两侧模型的原始输入相同,并固定dropout随机性。
  2. 同一个torch API在不同硬件上执行可能会调用不同的API,造成两边API不匹配。表现如下图2
    图2 运行流程对比图

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

  3. 在模型执行过程中,前面的API输出会作为后续API的输入,因此我们要重点关注输出产生误差的第一个API。

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的匹配,后续进行相应的计算精度比对。

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

当前产品无相关内容

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