Paddle icon indicating copy to clipboard operation
Paddle copied to clipboard

API Improvement for paddle.nn.functional.group_norm and paddle.nn.GroupNorm

Open NKNaN opened this issue 10 months ago • 4 comments

PR Category

User Experience

PR Types

Improvements

Description

添加支持 NCL, NLC, NCDHW, NDHWC 的 data_format https://github.com/PaddlePaddle/Paddle/pull/34773 的修改中应该已将 kernel 增添支持3-D和5-D输入 https://github.com/PaddlePaddle/Paddle/pull/55399 的修改仅针对 NHWC 格式的fp16和bfp16输入做了 kernel 的优化,不支持3-D和5-D输入 因此本pr主要修改的地方是 https://github.com/PaddlePaddle/Paddle/pull/55399 中优化的部分

NKNaN avatar Apr 25 '24 15:04 NKNaN

你的PR提交成功,感谢你对开源项目的贡献! 请关注后续CI自动化测试结果,详情请参考Paddle-CI手册。 Your PR has been submitted. Thanks for your contribution! Please wait for the result of CI firstly. See Paddle CI Manual for details.

paddle-bot[bot] avatar Apr 25 '24 15:04 paddle-bot[bot]

image

从这里看GroupNormGeneralCaseKernel应该是已经支持3D/5D了,通道C在前或者在后都支持,因为这里算imsize的时候,如果数据格式是 [N, C, *],imsize是C之后所有维度的乘积,如果数据格式是 [N, *, C],imsize是N到C之间所有维度的乘积,相当于imsize是除了N和C以外维度的乘积。cuda 的 GroupNormGeneralCaseKernel 和 cpu 的 kernel 都有这一步。后续计算会用到这里的imsize,所以应该除了这个pr修改的地方其他应该都是支持3D/5D的。

这个修改方法是 https://github.com/PaddlePaddle/Paddle/pull/34773 提出的 image 看记录当时应该是,想支持 [N, C, *]格式的数据,所以做了这个修改,但是同时也支持了 [N, *, C]

现在的文档的数据形状说明这里也是当时修改之后的版本 image

在现有的 test_group_norm_op_v2.py 中也已经测试了维度>=2 的 [N, C, *] 形状的数据 image

NKNaN avatar Apr 28 '24 13:04 NKNaN

@NKNaN 好 那就把fp16、bf16下的case支持全吧

zhwesky2010 avatar Apr 29 '24 03:04 zhwesky2010

@NKNaN 好 那就把fp16、bf16下的case支持全吧

fp16、bf16 在 data_layout 是 [N, C, *] 时是通过 GroupNormGeneralCaseKernel 进行计算的,本身是支持3D/5D的。所以应该已经支持全了。

在 test_group_norm_op_v2.py 中增加了 NLC, NHWC, NDHWC (包括fp16数据类型)的测试case,更清楚一些。

bf16的测试在 test_group_norm_op.py 中。

NKNaN avatar Apr 29 '24 08:04 NKNaN