Skip to content

It's recommend to set no_grad_set to be None

Tao Luo edited this page Aug 15, 2020 · 4 revisions

OP单测规范:check_grad的no_grad_set建议为空

It's recommend to set no_grad_set to be None (English Version)

规范概要:

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

补充说明:

  1. 规范在执行过程中,可能会发现现有规范未考虑到的方面,需要在实施过程中不断补充与完善,也请大家积极反馈意见。

1. 本规范说明

如果在跑单测的时候,发现有个变量的反向出错了,且把这个变量加到no_grad_set里面,则单测就不会做检查,也就不会发现此错误。

因此,为了规范no_grad_set值的使用,提出了no_grad_set值建议为None的规范,在OpTest中添加了相应检测方法,在CI中添加了对本规范白名单的检查。

2. 本规范检查内容

OP单测中需要满足条件:

   * 单测的测试用例中的no_grad_set原则上为None
   * 将所有输入赋值给no_grad_set,这是绝对不行的

3. CI检查方法

  • 背景:对于待修复的OP,加入本规范的待修复白名单,跳过检查。白名单路径: python/paddle/fluid/tests/unittests/white_list/no_grad_set_white_list.py

  • CI中增加对白名单的检查,如果需要修改,请联系特定人员审核。

  • 错误示例: python/paddle/fluid/tests/unittests/sequence/test_sequence_conv.py中,将所有输入赋值XFilter都给no_grad_set,这是不可取的(详见PR22571)。


self.inputs = {
        'X': (x, self.lod),
        'Filter': w,
    } 
 
 def test_check_grad_padding_data(self):
    if self.padding_trainable:
        self.check_grad(
            ['PaddingData'], 'Out', no_grad_set=set(['X', 'Filter'])) 

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

  • 请将no_grad_set设置为None。
  • 必须设置no_grad_set值,请联系特定人员审核。如果同意,可以该单测放入NO_CHECK_LIST中,跳过no_grad_set检查。
  • 若遇到其他问题,请联系@chenjiaoAngel
Clone this wiki locally