Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Module单测重构任务和分工 #5352

Closed
3 tasks done
BBuf opened this issue Jun 30, 2021 · 0 comments
Closed
3 tasks done

Module单测重构任务和分工 #5352

BBuf opened this issue Jun 30, 2021 · 0 comments

Comments

@BBuf
Copy link
Contributor

BBuf commented Jun 30, 2021

背景

目前单测没有依赖Pytorch,一些Module不好自动求导,导致单测写起来比较困难。然后通过讨论决定我们的单测可以依赖Pytorch,然后大老师基于Pytorch写了一个自动测试框架 ,有如下特点:

  • 自动测后向
  • 支持带默认值的参数(1/3 的概率不显式传参)
  • 支持 Union、Tuple(例如可以对 Union[int, Tuple[int, int]] 生成 2、(1, 3) 等数据)

根据 pytorch api 的 type annotations 自动生成测试数据并测试和 pytorch 的一致性,如 nn.Conv2d 的 kernel_size 参数的类型是 _size_2_t = Union[int, Tuple[int, int]],用户只需要用 random(1, 4) 指定数据的范围在 [1, 4) 之间,就可以自动生成 2、(1, 3) 等这样的测试数据。

nn.Conv2d 的完整写法:

        test_module_against_pytorch(
            test_case,
            "nn.Conv2d",
            extra_generators={
                "input": random_4d_tensor(channels=4),
                "in_channels": constant(4),
                "out_channels": random(1, 129),
                "kernel_size": random(1, 4),
                "stride": random(1, 4),
                "padding": random(1, 5),
                "dilation": random(1, 5),
                "groups": random(1, 5),
                "padding_mode": constant("zeros"),
            },
            n=10,
        )

自动生成的一些 attr:

attr = {'dilation': 1, 'stride': (2, 1), 'out_channels': 122, 'kernel_size': 2, 'in_channels': 4, 'bias': True, 'padding_mode': 'zeros'}
attr = {'groups': 3, 'out_channels': 11, 'kernel_size': 1, 'in_channels': 4, 'bias': False, 'padding': 2, 'padding_mode': 'zeros'}
attr = {'groups': 1, 'dilation': 4, 'stride': (2, 3), 'out_channels': 17, 'kernel_size': 3, 'in_channels': 4, 'bias': False, 'padding': (4, 3), 'padding_mode': 'zeros'}
attr = {'dilation': 4, 'stride': (1, 2), 'out_channels': 70, 'kernel_size': 1, 'in_channels': 4, 'padding': 1}
attr = {'dilation': (3, 1), 'stride': (1, 3), 'out_channels': 110, 'kernel_size': (3, 2), 'in_channels': 4, 'bias': False, 'padding': (3, 1)}
attr = {'stride': 3, 'out_channels': 34, 'kernel_size': 2, 'in_channels': 4, 'bias': True, 'padding_mode': 'zeros'}
attr = {'groups': 1, 'stride': (2, 1), 'out_channels': 101, 'kernel_size': (2, 1), 'in_channels': 4, 'bias': False, 'padding_mode': 'zeros'}
attr = {'groups': 3, 'dilation': (3, 2), 'out_channels': 116, 'kernel_size': (1, 1), 'in_channels': 4, 'padding_mode': 'zeros'}
attr = {'groups': 3, 'dilation': 2, 'stride': 1, 'out_channels': 67, 'kernel_size': 3, 'in_channels': 4}
attr = {'groups': 2, 'stride': 2, 'out_channels': 123, 'kernel_size': (2, 1), 'in_channels': 4, 'bias': True, 'padding': 3, 'padding_mode': 'zeros'}
attr = {'stride': (2, 1), 'out_channels': 91, 'kernel_size': (3, 2), 'in_channels': 4, 'padding': 1, 'padding_mode': 'zeros'}
attr = {'groups': 1, 'dilation': (2, 1), 'stride': 1, 'out_channels': 12, 'kernel_size': 3, 'in_channels': 4, 'bias': True, 'padding': (1, 1), 'padding_mode': 'zeros'}
attr = {'groups': 1, 'out_channels': 73, 'kernel_size': 1, 'in_channels': 4, 'padding': (4, 1), 'padding_mode': 'zeros'}
attr = {'groups': 4, 'dilation': 4, 'out_channels': 108, 'kernel_size': (2, 2), 'in_channels': 4, 'bias': True, 'padding': (2, 2), 'padding_mode': 'zeros'}

注,最新支持了持测试flow.xxx 和 Tensor.xxx方法的测试,同时也支持C++导出的Python接口的测试,见 PR 5386

这样就可以大大降低我们写单测的复杂度并且测试的参数可以更加全面,并且也可以同时测试接口的一致性。现在我们需要基于这个自动测试框架重构Module的单测。

优先级

中。暂定7月1-7月15日重构完。

项目负责人

张晓雨,梁德澎,姚迟,赵露阳,郑泽康,任天和,李春游,刘沛宏,张申,也欢迎之江小伙伴们认领

特别注意,硬编码的单测可以直接去掉,但numpy模拟的测试不需要去掉,直接在原始文件后面增加这次的自动测试方法即可。

可以参考这个PR来写:#5436

Pytorch版本不能用1.9.1

任务分工表

  • 领任务的时候Module如果有Tensor方法需要一起领取。
  • 有几个Loss相关的单测,建议谁开发的谁来修改,应该Loss的测试比较复杂,如果测出了BUG也好自行解决。
  • gt, le, ne 等比较运算符Module没有加广播参数测试,注意加上。

重构Module 认领人 reviewer PR 备注
oneflow.experimental.nn.ReLU 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.nn.ReLU6 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.nn.LeakyReLU 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.nn.Tanh 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.tanh 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.Tensor.tanh 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.asin 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.Tensor.asin 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.arcsin 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.Tensor.arcsin 张晓雨 Ldpe2G PR 5436 已完成
oneflow.experimental.asinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.Tensor.asinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.sinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.Tensor.sinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.atan2 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.Tensor.atan2 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.softplus 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.arcsinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.Tensor.arcsinh 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.nn.ELU 张晓雨 露阳 PR 5467 已完成
oneflow.experimental.nn.GELU 郑泽康 [PR 5489] 已完成
oneflow.experimental.gelu 郑泽康 [PR 5489] torch没有这个方法
oneflow.experimental.Tensor.gelu 郑泽康 [PR 5489] torch没有这个方法
oneflow.experimental.nn.Sigmoid 郑泽康 [PR 5489] 已完成
oneflow.experimental.sigmoid 郑泽康 [PR 5489] 已完成
oneflow.experimental.Tensor.sigmoid 郑泽康 [PR 5489] 已完成
oneflow.experimental.nn.Hardsigmoid 郑泽康 [PR 5489] 已完成
oneflow.experimental.softmax 郑泽康 [PR 5489] softmax暂时没对齐,跳过
oneflow.experimental.Tensor.softmax 郑泽康 [PR 5489] softmax暂时没对齐,跳过
oneflow.experimental.nn.LogSigmoid 郑泽康 [PR 5489] 已完成
oneflow.experimental.nn.Softplus 郑泽康 [PR 5489] torch1.8.1版本有错误
oneflow.experimental.nn.LogSoftmax 郑泽康 [PR 5489] softmax暂时没对齐,跳过
oneflow.experimental.nn.Mish 郑泽康 [PR 5489] torch1.8.1没有这个Module
oneflow.experimental.mish 郑泽康 [PR 5489] torch没有这个方法
oneflow.experimental.Tensor.mish 郑泽康 [PR 5489] torch没有这个方法
oneflow.experimental.acosh 郑泽康 [PR 5489] 已完成
oneflow.experimental.Tensor.acosh 郑泽康 [PR 5489] 已完成
oneflow.experimental.arccosh 郑泽康 [PR 5489] 已完成
oneflow.experimental.Tensor.arccosh 郑泽康 [PR 5489] 已完成
oneflow.experimental.arange 赵露阳
oneflow.experimental.argwhere 赵露阳
oneflow.experimental.Tensor.argwhere 赵露阳
oneflow.experimental.argmax 赵露阳
oneflow.experimental.Tensor.argmax 赵露阳
oneflow.experimental.nn.BatchNorm1d 赵露阳
oneflow.experimental.nn.BatchNorm2d 赵露阳
oneflow.experimental.nn.ReplicationPad2d 赵露阳
oneflow.experimental.nn.InstanceNorm1d 赵露阳
oneflow.experimental.nn.InstanceNorm2d 赵露阳
oneflow.experimental.nn.InstanceNorm3d 赵露阳
oneflow.experimental.nn.LayerNorm 赵露阳
oneflow.experimental.cast 梁德澎
oneflow.experimental.Tensor.cast 梁德澎
oneflow.experimental.cat 梁德澎 晓雨 PR 5491
oneflow.experimental.ones 梁德澎 晓雨 PR 5491
oneflow.experimental.zeros 梁德澎 晓雨 PR 5491
oneflow.experimental.zeros_like 梁德澎 晓雨 PR 5491
oneflow.experimental.ones_like 梁德澎 晓雨 PR 5491
oneflow.experimental.nn.Module -
oneflow.experimental.nn.Parameter -
oneflow.experimental.nn.Sequential -
oneflow.experimental.nn.ParameterList -
oneflow.experimental.nn.ParameterDict -
oneflow.experimental.nn.ModuleList -
oneflow.experimental.nn.ModuleDict -
oneflow.experimental.nn.Conv2d 梁德澎 晓雨 PR 5491
oneflow.experimental.nn.ConstantPad2d 梁德澎
oneflow.experimental.nn.ConvTranspose2d 梁德澎 晓雨 PR 5491
oneflow.experimental.nn.Dropout 梁德澎
oneflow.experimental.eq 任天和 PR 5504 no grad报错
oneflow.experimental.to 任天和 暂时不测
oneflow.experimental.Tensor.to 任天和 暂时不测
oneflow.experimental.equal 任天和 PR 5504 底层实现与torch不一致
oneflow.experimental.Tensor.eq 任天和 PR 5504 与flow.eq一致
oneflow.experimental.exp 任天和 PR 5504 已完成
oneflow.experimental.Tensor.exp 任天和 PR 5504 已完成
oneflow.experimental.erf 任天和 PR 5504 已完成
oneflow.experimental.Tensor.erf 任天和 PR 5504 已完成
oneflow.experimental.erfc 任天和 PR 5504 已完成
oneflow.experimental.Tensor.erfc 任天和 PR 5504 已完成
oneflow.experimental.round 任天和 PR 5504 已完成
oneflow.experimental.Tensor.round 任天和 PR 5504 已完成
oneflow.experimental.Tensor.expand 任天和
oneflow.experimental.nn.Flatten 任天和 PR 5504 已完成
oneflow.experimental.flatten 任天和 PR 5504 已完成
oneflow.experimental.Tensor.flatten 赵天宇 oneflow.experimental.flatten冲突
oneflow.experimental.gt 赵天宇 no grad
oneflow.experimental.Tensor.gt 赵天宇 no grad
oneflow.experimental.lt 赵天宇 no grad
oneflow.experimental.Tensor.lt 赵天宇 no grad
oneflow.experimental.nn.Identity 赵天宇 等待框架支持*args, **kwargs签名
oneflow.experimental.nn.PixelShuffle 赵天宇
oneflow.experimental.nn.Linear 赵天宇
oneflow.experimental.nn.CrossEntropyLoss 赵天宇
oneflow.experimental.nn.CTCLoss 黄振华
oneflow.experimental.nn.L1Loss
oneflow.experimental.nn.BCELoss
oneflow.experimental.nn.NLLLoss
oneflow.experimental.nn.KLDivLoss
oneflow.experimental.nn.MSELoss
oneflow.experimental.nn.MarginRankingLoss
oneflow.experimental.nn.BCEWithLogitsLoss
oneflow.experimental.masked_fill 姚迟 #5484 已完成
oneflow.experimental.Tensor.masked_fill 姚迟 #5484 已完成
oneflow.experimental.sum 姚迟 #5484 已完成
oneflow.experimental.Tensor.sum 姚迟 #5484 已完成
oneflow.experimental.min 姚迟 #5484 已完成
oneflow.experimental.Tensor.min 姚迟 #5484 已完成
oneflow.experimental.max 姚迟 #5484 已完成
oneflow.experimental.Tensor.max 姚迟 #5484 已完成
oneflow.experimental.mul 姚迟 #5484 已完成
oneflow.experimental.Tensor.mul 姚迟 #5484 已完成
oneflow.experimental.mean 姚迟 #5484 已完成
oneflow.experimental.Tensor.mean 姚迟 #5484 已完成
oneflow.experimental.sub 姚迟 #5484 已完成
oneflow.experimental.Tensor.sub 姚迟 #5484 已完成
oneflow.experimental.div 姚迟 #5484 已完成
oneflow.experimental.Tensor.div 姚迟 #5484 已完成
oneflow.experimental.var 姚迟 测试发现bug,需要fix后重构测试
oneflow.experimental.Tensor.var 姚迟 测试发现bug,需要fix后重构测试
oneflow.experimental.reciprocal 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.reciprocal 李春游 姚迟 #5511 已完成
oneflow.experimental.add 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.add 李春游 姚迟 #5511 已完成
oneflow.experimental.sign 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.sign 李春游 姚迟 #5511 已完成
oneflow.experimental.sin 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.sin 李春游 姚迟 #5511 已完成
oneflow.experimental.atan 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.atan 李春游 姚迟 #5511 已完成
oneflow.experimental.arctan 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.arctan 李春游 姚迟 #5511 已完成
oneflow.experimental.cos 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.cos 李春游 姚迟 #5511 已完成
oneflow.experimental.log 李春游 姚迟 #5511 已完成
oneflow.experimental.Tensor.log 李春游 姚迟 #5511 已完成
oneflow.experimental.sqrt 刘沛宏 #5515 已完成
oneflow.experimental.Tensor.sqrt 刘沛宏 #5515 已完成
oneflow.experimental.square 刘沛宏 #5515 已完成
oneflow.experimental.Tensor.square 刘沛宏 #5515 已完成
oneflow.experimental.std 刘沛宏 #5515
oneflow.experimental.Tensor.std 刘沛宏 #5515
oneflow.experimental.pow 刘沛宏 #5515 已完成
oneflow.experimental.Tensor.pow 刘沛宏 #5515 已完成
oneflow.experimental.cosh 刘沛宏 #5515 已完成
oneflow.experimental.Tensor.cosh 刘沛宏 #5515 已完成
oneflow.experimental.acos 刘沛宏 #5515 已完成
oneflow.experimental.Tensor.acos 刘沛宏 #5515 已完成
oneflow.experimental.matmul 张申
oneflow.experimental.Tensor.matmul 张申
oneflow.experimental.negative 张申
oneflow.experimental.neg 张申
oneflow.experimental.Tensor.negative 张申
oneflow.experimental.nn.AvgPool1d 张申
oneflow.experimental.nn.AvgPool2d 张申
oneflow.experimental.nn.AvgPool3d 张申
oneflow.experimental.nn.AdaptiveAvgPool2d 张申
oneflow.experimental.nn.MaxPool1d 张申
oneflow.experimental.nn.MaxPool2d 张申
oneflow.experimental.nn.MaxPool3d 张申
oneflow.experimental.repeat 张申
oneflow.experimental.Tensor.repeat 张申
oneflow.experimental.tile 张申
oneflow.experimental.Tensor.tile 张申
oneflow.experimental.reshape
oneflow.experimental.Tensor.reshape
oneflow.experimental.squeeze
oneflow.experimental.Tensor.squeeze
oneflow.experimental.transpose
oneflow.experimental.Tensor.transpose
oneflow.experimental.unsqueeze
oneflow.experimental.Tensor.unsqueeze
oneflow.experimental.where
oneflow.experimental.Tensor.where
oneflow.experimental.gather
oneflow.experimental.Tensor.gather
oneflow.experimental.nn.Embedding
oneflow.experimental.Tensor.permute
oneflow.experimental.nn.Hardswish
oneflow.experimental.nn.PReLU
oneflow.experimental.nn.Hardtanh
oneflow.experimental.nn.Upsample
oneflow.experimental.nn.UpsamplingNearest2d
oneflow.experimental.nn.UpsamplingBilinear2d
oneflow.experimental.linalg.norm
oneflow.experimental.Tensor.norm
oneflow.experimental.floor 唐娜娜 张晓雨 #5513
oneflow.experimental.Tensor.floor 唐娜娜 张晓雨 #5513
oneflow.experimental.addmm
oneflow.experimental.Tensor.addmm
oneflow.experimental.clamp
oneflow.experimental.Tensor.clamp
oneflow.experimental.clip
oneflow.experimental.Tensor.clip
oneflow.experimental.atanh 唐娜娜 张晓雨 #5513
oneflow.experimental.Tensor.atanh 唐娜娜 张晓雨 #5513
oneflow.experimental.arctanh 唐娜娜 张晓雨 #5513
oneflow.experimental.Tensor.arctanh 唐娜娜 张晓雨 #5513
oneflow.experimental.tan 唐娜娜 张晓雨 #5513
oneflow.experimental.Tensor.tan 唐娜娜 张晓雨 #5513
oneflow.experimental.log1p 黄振华 张晓雨 #5513
oneflow.experimental.Tensor.log1p 黄振华 张晓雨 #5513
oneflow.experimental.ceil
oneflow.experimental.Tensor.ceil
oneflow.experimental.expm1
oneflow.experimental.Tensor.expm1
oneflow.experimental.nn.ReflectionPad2d
oneflow.experimental.meshgrid
oneflow.experimental.topk
oneflow.experimental.Tensor.topk
oneflow.experimental.nn.GroupNorm
oneflow.experimental.nn.ZeroPad2d
oneflow.experimental.tensor_buffer_to_tensor
oneflow.experimental.tensor_to_tensor_buffer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant