Skip to content

Gradient Check Is Required for Op Test

Tao Luo edited this page Dec 24, 2019 · 1 revision

单测规范:反向Op必须调用check_grad


Gradient Check Is Required for Op Test (English Version)


规范概要:

  • 第1节,背景
  • 第2节,本规范检查内容
  • 第3节,CI检查方法
  • 第4节,未通过检查的修改建议

补充说明:

此规范在执行过程中,可能存在未考虑周全的地方。请大家积极反馈意见,在实施过程中不断补充与完善。

1. 背景

目前,OP单测中存在未做梯度检查或者禁用梯度检查的问题。为了保证所有反向Op实现的正确性,提出了本条规范,并在CI中添加了相应的检查。除特殊情况外,所有Op单测都需要调用check_grad方法。

2. 本规范检查内容

检查范围:Op的单测脚本中,所有继承了OpTest的测试样例,都需要调用check_grad方法进行梯度检查。

特殊情况

序号 类别 原因
1 未注册Grad Op 无需进行梯度检查
2 Python API的单测 不要求进行梯度检查
3 其他特殊的单测 因特定原因,无需进行梯度检查
  • 对于情况1:监控机制会通过白名单EMPTY_GRAD_OP_LIST将其豁免
  • 对于情况2:单测需继承unittest.TestCase
  • 对于情况3:使用skip_check_grad_ci装饰器,描述需跳过check_grad监控的原因。

除特殊情况外,其他的单测均被要求进行梯度检查。

3. CI检查方法

当单测被skip_check_grad_ci装饰时,会为测试样例增加no_need_check_grad成员变量。当单测调用check_grad或check_grad_with_place方法时,会为测试样例增加成员变量exist_check_grad。在单测执行结束后,以下情况,check_grad的监控会被豁免:

  • 如果单测有成员变量no_need_check_grad,或者op_type在EMPTY_GRAD_OP_LIST白名单中
  • 输入为int8、bool类型时

4. 未通过检查的修改建议

当单测未通过check_grad的监控,可以参考以下建议进行修改:

  • 如果是非Op单测,例如:Python API测试,相应单测需继承unittest.TestCase
  • 如果有特殊原因不需要进行梯度检查,需使用skip_check_grad_ci装饰器,并描述原因。使用该装饰器需要特定人员审核。

若遇到其他问题,请联系 @zhangting2020

Clone this wiki locally