-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Gradient Check Is Required for Op Test
Tao Luo edited this page Dec 24, 2019
·
1 revision
Gradient Check Is Required for Op Test (English Version)
规范概要:
- 第1节,背景
- 第2节,本规范检查内容
- 第3节,CI检查方法
- 第4节,未通过检查的修改建议
补充说明:
此规范在执行过程中,可能存在未考虑周全的地方。请大家积极反馈意见,在实施过程中不断补充与完善。
目前,OP单测中存在未做梯度检查或者禁用梯度检查的问题。为了保证所有反向Op实现的正确性,提出了本条规范,并在CI中添加了相应的检查。除特殊情况外,所有Op单测都需要调用check_grad方法。
检查范围: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监控的原因。
除特殊情况外,其他的单测均被要求进行梯度检查。
当单测被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类型时
当单测未通过check_grad的监控,可以参考以下建议进行修改:
- 如果是非Op单测,例如:Python API测试,相应单测需继承unittest.TestCase
- 如果有特殊原因不需要进行梯度检查,需使用skip_check_grad_ci装饰器,并描述原因。使用该装饰器需要特定人员审核。
若遇到其他问题,请联系 @zhangting2020