【CANN文档速递12期】带你解锁精度比对工具
若您在昇腾平台上进行推理或训练过程中对精度结果不满意,可以使用精度比对工具找出存在精度差异的算子,进行针对性优化。
精度比对工具通过从整网和单算子两个维度将昇腾设备上的运算结果与业界标准算子的运算结果进行比对,并给出比对结果,帮助开发人员快速解决算子精度问题。
我们可以通过安装昇腾Ascend-cann-toolkit开发套件包后,在安装toolkit包系统下即可使用精度比对工具。精度比对工具使用流程如下:
精度比对结果是以表格文件形式按网络结构依次罗列整网算子的比对精度差,一目了然;更可以输出具体算子差异明细。快速定位算子精度问题。
请访问https://www.hiascend.com/software/cann获取并安装Ascend-cann-toolkit开发套件包。
精度比对之前,需要准备基准数据和待比对数据。需准备数据主要分为以下三种:
推理场景下支持Caffe/TensorFlow/ONNX标准模型推理生成的numpy格式原始数据文件作为基准数据文件与标准模型转换成的离线模型在昇腾AI处理器上推理生成的dump数据文件进行比对。
训练场景下支持TensorFlow模型训练生成的numpy格式原始数据文件作为基准数据文件与模型迁移到昇腾AI处理器上训练生成的dump数据文件进行比对。
训练场景下支持PyTorch模型训练生成的*.h5数据文件作为基准数据文件与基准数据文件导入昇腾AI处理器后训练生成的*.h5数据文件进行比对。
下面以TensorFlow推理模型npy数据文件为例介绍获取基准数据文件。
TensorFlow推理模型需要通过修改推理脚本,在脚本中添加TensorFlow官方提供的debug工具tfdbg调试程序,从而在推理过程中生成npy数据文件。通过以下两种方式修改脚本:
执行run命令完成后,在命令行交互界面,可以通过lt查询已存储的张量,通过pt可以查看已存储的张量内容,可以保存数据为numpy格式文件。由于tfdbg一次命令只能dump一个tensor,为了自动生成收集所有数据,可以按以下几个步骤操作:
下面以ACL接口方式获取TensorFlow模型转换成的离线模型dump数据文件为例介绍获取待比对数据文件。
离线模型推理的应用工程文件中,ACL接口aclInit()或aclmdlSetDump()调用的acl.json文件代码中可以添加dump配置,从而在推理过程中生成dump数据文件。
精度比对工具主要通过命令行Compare以及相关参数执行比对操作。在系统路径下准备好比对数据文件作为命令的输入后,即可开始执行比对。
通过以上数据准备操作获取到TensorFlow模型推理过程中生成的npy数据文件,以及推理过程中算子的输出数据的dump数据文件,进行精度比对。
精度比对操作流程如下:
将准备好的npy数据文件和dump数据文件作为输入,执行对整个网络模型所有算子的数据比对并输出结果。
命令行如下:
其中-m参数指定dump数据文件也就是待比对数据文件的保存路径;-g参数指定npy数据文件也就是基准数据文件的保存路径。
还可以通过-alg参数指定比对算法,不指定情况下,则会针对以下六种算法依次输出比对结果。当前支持算法包括:
0:CosineSimilarity,余弦相似度算法。
1:MaxAbsoluteError,最大绝对误差算法。
2:AccumulatedRelativeError,累积相对误差算法。
3:RelativeEuclideanDistance,欧氏相对距离算法。
4:KullbackLeiblerDivergence,KLD散度算法。
5:StandardDeviation,标准差算法。
更多比对参数介绍,请参见昇腾社区的《精度比对工具使用过指南》。
比对结果如下:
比对结果以csv文件格式列出每个算子在不同算法维度下与标准算子的精度差。
上图结果中LeftOp表示待比对的算子名,RightOp表示基准算子名,比对结果主要由后面的各种算法维度呈现,比如CosineSimilarity列的res2a_branch2ares2a_branch2a_relu算子比对结果为0.949999,表示该算子与基准算子的余弦相似度达到0.949999,与其他算子的精度差相比差距较大,可以判断res2a_branch2ares2a_branch2a_relu算子存在精度问题。
其中-m参数指定dump数据文件也就是待比对数据文件的保存路径;-g参数指定npy数据文件也就是基准数据文件的保存路径;-op参数指定比对的算子 。
更多比对参数介绍,请参见昇腾社区的《精度比对工具使用过指南》。
比对结果如下:
比对结果以csv文件格式列出比对算子与标准算子之间的绝对误差和相对误差。上图结果中,N C H W表示数据的坐标点,Left表示待比对算子的dump值,Right表示基准算子的dump值,比对结果为两个算子之间的绝对误差和相对误差(AbsoluteError和RelativeError)。一般可以在进行完整网比对后定位到精度差较大的算子再对该算子进行单算子比对。
以上仅对精度比对的部分的关键功能进行了简要介绍,更多精度比对的细节及技巧可登录昇腾社区,阅读相关文档:https://www.hiascend.com。
昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。
- 点赞
- 收藏
- 关注作者
评论(0)