Paddle
Paddle copied to clipboard
【Hackathon No.56&38】deformable_conv_v1 算子实现 float16 数据类型支持&前向运行加速
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题的速度测试如下:
你的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.
这个的CI流程里出现了和https://github.com/PaddlePaddle/Paddle/pull/45946一样的问题,今天CI-Build报了同样的错。
向大佬请教一个问题,目前实现了float16的支持,但是对于float16的单测如果我单独执行是可以通过的,但如果一个单测文件中既有float32又有float16,就会报错,后执行的数据类型会出错不清楚为什么😂
Details
贴一下报错日志是什么
这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。
就是提示梯度误差超过阈值,如果单独测fp16或者单独测fp32就不会
这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。
现在有三个反向kernel,一个正向kernel。其中正向的和两个反向的都是和fp32速度基本一致,一个使用了CudaAtomicAdd的kernel速度较慢。也想求助下这个有没有合适的替代方法
这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。
之前因为上述单测的问题,我一直以为fp16计算精度没有达到要求,就将绝大部分转换成了fp32计算。我再优化一下应该可以将目前一致的速度提高一些
这道2🌟题目是要求要完成FP16的性能优化的,基本的要求是FP16性能优于FP32。
@zhangting2020 已优化完成,float16没有比float32慢的kernel了,前向速度更优,后向速度一致。具体数值更新在了最开始的表格里

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

CI流程中也都给出的是0.02441这个值
![]()
benchmark里结果是这样的,paddle实现的代码应该是准确的,但是benchmark用来对照的好像是有误的。
![]()
CI流程中也都给出的是0.02441这个值
@Xreki 这里的截图
deformable_conv前向性能提升34%,符合黑客松算子优化验收标准。
因OP Benchmark系统中默认只有1个测试配置,建议可以用https://github.com/PaddlePaddle/benchmark/blob/master/api/tests_v2/model_configs/deformable_conv.json 中更多配置验证下性能提升效果。
deformable_conv前向性能提升34%,符合黑客松算子优化验收标准。
因OP Benchmark系统中默认只有1个测试配置,建议可以用https://github.com/PaddlePaddle/benchmark/blob/master/api/tests_v2/model_configs/deformable_conv.json 中更多配置验证下性能提升效果。
好的 我后边测试完后再贴一下结果
目前此PR引起了ppyolov2模型运行失败,报错如下:
可能与下面的修改有关,在fp16数据类型下,计算过程可以使用fp32,但是输入输出需要保持fp16精度,pr中修改了dx的数据类型。
目前此PR引起了ppyolov2模型运行失败,报错如下:
可能与下面的修改有关,在fp16数据类型下,计算过程可以使用fp32,但是输入输出需要保持fp16精度,pr中修改了dx的数据类型。
好的我修改一下,这里确实dx输出没有保持fp16。修改后我是重新开一个PR吗?
@zhangting2020 修改后的PR已提交Draft在等CI结果https://github.com/PaddlePaddle/Paddle/pull/46975,如果通过的话应该可以不用revert
根据建议将前向加速的代码拆出来先提交了一个单独的PR,CI已全部通过,幸苦帮忙审核合入 https://github.com/PaddlePaddle/Paddle/pull/46997