PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
21.63k stars 5.44k forks source link

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

Closed NKNaN closed 3 hours ago

NKNaN commented 1 week ago

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 中优化的部分

修复 https://github.com/PaddlePaddle/Paddle/issues/63560

paddle-bot[bot] commented 1 week ago

你的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.

NKNaN commented 1 week ago

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

zhwesky2010 commented 1 week ago

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

NKNaN commented 1 week ago

@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 中。