网络参数对比
网络参数(这里指网络权重)是网络的基础,如果网络参数与标杆网络不一致,后续的对比将没有意义。
- 排查参数个数是否一致;
- 排查参数shape是否一致;
- 排查参数是否有冻结;
如果排查网络参数一致后,可以使用权重迁移工具,将两个的网络参数都初始化相同的值,便于进行下述对比。
网络输出对比
控制相同网络权重和输入,对比网络的输出结果(包含正向网络输出和loss)是否一致。如果一致,说明网络基本没有问题,可以优先进行其他对比。如果不一致,可以用下面的逐层对比找出差异产生的具体位置。
注意:对比时需要去除网络中的随机元素。
逐层对比
静态图
如果MindSpore网络运行在静态图模式下,可以使用Dump工具进行对比。
Dump对比:可以导出所有算子的输入输出,与标干网络对应算子的输入输出进行对比。
工具链接:Dump功能调试
动态图
如果网络运行在动态图模式下,可以使用Debug、USEFUL_TOOLS或Hook功能进行对比。
- Debug对比:使用pycharm、vscode等工具的Debug功能,在指定位置打断点,查看算子的输入输出。
- 使用USEFUL_TOOLS工具对比:如果MindSpore网络与目标网络完全一致,包括节点的名称,个数等。此时,可以使用USEFUL_TOOLS工具自动对比pytorch或mindspore网络中的同名节点的正向与反向的输入与输出。工具链接:USEFUL_TOOLS
- 使用Hook功能对比:Hook功能可以捕获中间层算子的输入、输出数据以及反向梯度。工具链接:Hook功能