-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Description
【PaddlePaddle Hackathon 3】算子性能优化任务合集
(此 ISSUE 为 PaddlePaddle Hackathon 第三期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第三期】任务总览)
为飞桨框架优化一系列算子性能,提交流程请参考 算子性能优化&提交流程,开发请参考 贡献指南,任务列表如下:
No.31:为 Paddle 优化 dist op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 dist 算子的 GPU 实现采用 Eigen 组合的模式,缺少 GPU Kernel,性能相对不足;
- 目标:请实现高性能的 GPU 计算 Kernel,为 Paddle 优化 dist op 在 GPU 上的计算性能,性能提升至少1.3倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/dist_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.32:为 Paddle 优化 expand_as_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 expand_as_grad 算子的 GPU 实现采用 Eigen 组合的模式,缺少 GPU Kernel,性能相对不足;
- 目标:请实现高性能的 GPU 计算 Kernel,为 Paddle 优化 expand_as_grad op 在 GPU 上的计算性能,性能至少提升6倍,对性能极差的 case 提升达700倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/expand_as_grad_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.33:为 Paddle 优化 erfinv op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 erfinv 算子的 GPU 实现采用 Eigen 组合的模式,缺少 GPU Kernel,性能相对不足;
- 目标:请实现高性能的 GPU 计算 Kernel,为 Paddle 优化 erfinv op 在 GPU 上的计算性能,性能平均提升1.2倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/erfinv_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.34:为 Paddle 优化 poisson op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 poisson 算子的 GPU 实现采用 for_range() 组合的模式,采用CUDA Kernel做好线程配置等优化,与竞品差异在8%以内;
- 目标:请优化高性能的 GPU 计算 Kernel,为 Paddle 优化 poisson op 在 GPU 上的计算性能,性能提升7%以上。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/poisson_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.35:为 Paddle 优化 slice_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 slice_grad 算子的 GPU 实现采用 Eigen 组合的模式,缺少 GPU Kernel,性能相对不足;
- 目标:请实现高性能的 GPU 计算 Kernel,为 Paddle 优化 slice_grad op 在 GPU 上的计算性能,对性能极差的 case,提升至少20%。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/impl/slice_grad_kernel_impl.h 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.36:为 Paddle 优化 lerp_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:
- 现状:目前 Paddle 内 lerp_grad 算子的 GPU 实现采用 Eigen 组合的模式,缺少 GPU Kernel,部分 case 的性能优于竞品;
- 目标:请实现高性能的 GPU 计算 Kernel,为 Paddle 优化 lerp_grad op 在 GPU 上的计算性能,针对性能差的case,性能平均提升1倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/lerp_grad_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.37:为 Paddle 优化 argmax\argmin op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 argmax\argmin 算子的 GPU 实现采用了 Cub 库实现,可以用 Reduce 替换,Reduce 模块的性能需进一步提升;
- 目标:请优化高性能的 GPU 计算 Kernel 或计算逻辑,为 Paddle 优化 argmax op 在 GPU 上的计算性能,性能平均提升4.5倍;
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/arg_min_max_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.38:为 Paddle 优化 deformable_conv op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 deformable_conv 算子已有 GPU Kernel 实现,Kernel 性能待进一步挖掘;
- 目标:请优化计算实现,为 Paddle 优化 deformable_conv op 在 GPU 上的计算性能,性能提升至少25%。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/impl/deformable_conv_kernel_impl.h 和 paddle/phi/kernels/funcs/deformable_conv_functor.cu目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.39:为 Paddle 优化 deformable_conv_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 deformable_conv_grad 算子已有 GPU Kernel 实现,Kernel 性能待进一步挖掘;
- 目标:请优化计算实现,为 Paddle 优化 deformable_conv_grad op 在 GPU 上的计算性能,性能提升至少30%。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/deformable_conv_grad_kernel.cu 和paddle/phi/kernels/impl/deformable_conv_grad_kernel_impl.h目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.40:为 Paddle 优化 matrix_rank op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 matrix_rank 算子采用第三方库组合实现,性能不足;
- 目标:请优化计算实现,为 Paddle 优化 matrix_rank op 在 GPU 上的计算性能,性能至少提升3倍,针对性能差的case,性能提升120+倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/matrix_rank_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.41:为 Paddle 优化 p_norm op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 p_norm 算子 Reduce_Any Kernel 的性能较竞品存在差异;
- 目标:请优化计算实现,为 Paddle 优化 p_norm op 在 GPU 上的计算性能,性能平均提升2.5倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/p_norm_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.42:为 Paddle 优化 p_norm_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 p_norm_grad 算子 GPU 计算采用了 CUDA Kernel 与 Eigen 混合的模式,用现有的 Reduce OP 等取代 Eigen 可以提升计算性能,减少数据 HtoD 拷贝等开销;
- 目标:请优化计算实现,为 Paddle 优化 p_norm_grad op 在 GPU 上的计算性能,性能平均提升3倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/p_norm_grad_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.43:为 Paddle 优化 kthvalue op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 kthvalue 算子 GPU 计算采用了cub库实现,性能仍有不足;
- 目标:请优化计算实现,为 Paddle 优化 kthvalue op 在 GPU 上的计算性能,性能平均提升2.7倍。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/kthvalue_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
No.44:为 Paddle 优化 cumprod_grad op 在 GPU 上的计算性能
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:
- 现状:目前 Paddle 内 cumprod_grad 算子 GPU 计算采用了采用GPU Kernel等拼接实现,性能仍有提升空间;
- 目标:请优化计算实现,为 Paddle 优化 cumprod_grad op 在 GPU 上的计算性能,性能平均提升30%。
-
任务提交:
- 设计文档:提 PR 至 community repo 的 rfcs/OPs-Perf 目录;
- C++ 及 GPU kernel 实现代码:提 PR 至 paddle/phi/kernels/gpu/cumprod_grad_kernel.cu 目录;
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见 示例。
合入标准
- 目标:依据各任务描述,达成任务目标(可以超出);
- OP Benchmark内优化算子的全部配置 case 性能不出现下降问题,优化算子的计算精度不出现下降问题;
- 要求:测试case需要覆盖全部的计算分支,同时至少覆盖fp32,fp16两种数据类型。
技术要求
- 熟练掌握 Python、C++、CUDA代码编写;
- 掌握 OP Benchmark 使用方法。
参考内容
- 设计文档示例:op_optimization_example.md
- 优化方法参考:算子性能优化方法
答疑交流
- 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流。
- 对于开发中的共性问题,在活动过程中,会定期组织答疑,请大家关注官网&微信群的通知,及时参与~