Paddle icon indicating copy to clipboard operation
Paddle copied to clipboard

【Hackathon No.56&38】deformable_conv_v1 算子实现 float16 数据类型支持&前向运行加速

Open Rayman96 opened this issue 2 years ago • 10 comments

PR types

New features

PR changes

OPs

Describe

deformable_conv_v1 算子实现 float16 数据类型支持。 通过benchmark中测试用例,float32与float16前向速度~~接近~~更快:

Case No. x_shape offset_shape weight_shape mask_shape data_type Paddle Perf(ms)
1 [6, 512, 19, 34] [6, 18, 19, 34] [256, 512, 3, 3] [6, 9, 19, 34] float32 3.858
2 [6, 512, 19, 34] [6, 18, 19, 34] [256, 512, 3, 3] [6, 9, 19, 34] float16 3.387

后向速度~~有差距~~基本一致

Case No. x_shape offset_shape weight_shape mask_shape data_type Paddle Perf(ms)
1 [6, 512, 19, 34] [6, 18, 19, 34] [256, 512, 3, 3] [6, 9, 19, 34] float32 27.9
2 [6, 512, 19, 34] [6, 18, 19, 34] [256, 512, 3, 3] [6, 9, 19, 34] float16 28.0

~~速度差值主要存在于对dx的导数求解上,其余参数导数求解速度一致。dx求解中使用了CudaAtomicAdd,对于float16的支持较差~~

38题的速度测试如下: image

Rayman96 avatar Sep 16 '22 03:09 Rayman96

你的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 Sep 16 '22 03:09 paddle-bot[bot]

这个的CI流程里出现了和https://github.com/PaddlePaddle/Paddle/pull/45946一样的问题,今天CI-Build报了同样的错。 image

Rayman96 avatar Sep 16 '22 04:09 Rayman96

向大佬请教一个问题,目前实现了float16的支持,但是对于float16的单测如果我单独执行是可以通过的,但如果一个单测文件中既有float32又有float16,就会报错,后执行的数据类型会出错不清楚为什么😂

Rayman96 avatar Sep 19 '22 05:09 Rayman96

Details

贴一下报错日志是什么

zhangting2020 avatar Sep 19 '22 09:09 zhangting2020

这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。

zhangting2020 avatar Sep 19 '22 09:09 zhangting2020

就是提示梯度误差超过阈值,如果单独测fp16或者单独测fp32就不会

Rayman96 avatar Sep 19 '22 09:09 Rayman96

这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。

现在有三个反向kernel,一个正向kernel。其中正向的和两个反向的都是和fp32速度基本一致,一个使用了CudaAtomicAdd的kernel速度较慢。也想求助下这个有没有合适的替代方法

Rayman96 avatar Sep 19 '22 09:09 Rayman96

这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。

之前因为上述单测的问题,我一直以为fp16计算精度没有达到要求,就将绝大部分转换成了fp32计算。我再优化一下应该可以将目前一致的速度提高一些

Rayman96 avatar Sep 19 '22 09:09 Rayman96

这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。

@zhangting2020 已优化完成,float16没有比float32慢的kernel了,前向速度更优,后向速度一致。具体数值更新在了最开始的表格里

Rayman96 avatar Sep 21 '22 04:09 Rayman96

image

benchmark里结果是这样的,paddle实现的代码应该是准确的,但是benchmark用来对照的好像是有误的。

image

CI流程中也都给出的是0.02441这个值

Rayman96 avatar Sep 21 '22 06:09 Rayman96

image

benchmark里结果是这样的,paddle实现的代码应该是准确的,但是benchmark用来对照的好像是有误的。

image

CI流程中也都给出的是0.02441这个值

@Xreki 这里的截图

Rayman96 avatar Oct 08 '22 14:10 Rayman96

image

deformable_conv前向性能提升34%,符合黑客松算子优化验收标准。

因OP Benchmark系统中默认只有1个测试配置,建议可以用https://github.com/PaddlePaddle/benchmark/blob/master/api/tests_v2/model_configs/deformable_conv.json 中更多配置验证下性能提升效果。

Xreki avatar Oct 10 '22 05:10 Xreki

image

deformable_conv前向性能提升34%,符合黑客松算子优化验收标准。

因OP Benchmark系统中默认只有1个测试配置,建议可以用https://github.com/PaddlePaddle/benchmark/blob/master/api/tests_v2/model_configs/deformable_conv.json 中更多配置验证下性能提升效果。

好的 我后边测试完后再贴一下结果

Rayman96 avatar Oct 10 '22 07:10 Rayman96

目前此PR引起了ppyolov2模型运行失败,报错如下: 84fc2b8478d28629883a1f41d8d41719

可能与下面的修改有关,在fp16数据类型下,计算过程可以使用fp32,但是输入输出需要保持fp16精度,pr中修改了dx的数据类型。 image

zhangting2020 avatar Oct 13 '22 03:10 zhangting2020

目前此PR引起了ppyolov2模型运行失败,报错如下: 84fc2b8478d28629883a1f41d8d41719

可能与下面的修改有关,在fp16数据类型下,计算过程可以使用fp32,但是输入输出需要保持fp16精度,pr中修改了dx的数据类型。 image

好的我修改一下,这里确实dx输出没有保持fp16。修改后我是重新开一个PR吗?

Rayman96 avatar Oct 13 '22 03:10 Rayman96

@zhangting2020 修改后的PR已提交Draft在等CI结果https://github.com/PaddlePaddle/Paddle/pull/46975,如果通过的话应该可以不用revert

Rayman96 avatar Oct 13 '22 03:10 Rayman96

根据建议将前向加速的代码拆出来先提交了一个单独的PR,CI已全部通过,幸苦帮忙审核合入 https://github.com/PaddlePaddle/Paddle/pull/46997

Rayman96 avatar Oct 14 '22 01:10 Rayman96