From 233daf8c818353384fce7c581f7536bbe95c432f Mon Sep 17 00:00:00 2001 From: thunder95 <290844930@qq.com> Date: Tue, 9 Aug 2022 13:09:54 +0800 Subject: [PATCH 1/5] erfinv --- .../20220805_erfinv_op_optimization.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md new file mode 100644 index 000000000..acb595885 --- /dev/null +++ b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md @@ -0,0 +1,88 @@ +# erfinv OP性能优化设计文档 + + +| 基本信息 | 内容 | +| ------------------------------------------------------------ |--------------------------------------| +| 提交作者 | thunder95 | +| 提交时间 | 2022-08-05 | +| 版本号 | V1.0 | +| 依赖飞桨版本 | PaddleDevelop | +| 文件名 | 20220805_erfinv_optimization.md
| + + +# 1 背景与意义 + +目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。 + +## 1.1 飞桨现状 + +当前性能如下表(基于PaddlePaddle develop分支): + +目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表: + +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 | +| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 | + +API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv + +## 1.2 业内方案调研 + +Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12): + +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 | +| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 | + +## 1.3 对比分析 + +目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。 + +# 2 设计方案与性能预期 + +## 2.1 关键模块与性能提升点 + +通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。 + +## 2.2 Host端计算流程 + +通过gpu_launch_config.h中的线程配置方法配置1D线程。 + +## 2.4 Device端计算流程 + +设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。 + +# 3 测试和验收的考量 + +参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) + + + +# 4 可行性分析和排期规划 + +时间和开发排期规划,主要milestone + +| No. | 开发内容 | 预期时间 | +|---|---|---| +| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 | +| 2 | 完成开发文档设计 | 2022-08-08 | +| 3 | ndtri函数开发 | 2022-08-09 | +| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 | + + + +# 5 影响面 + +待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。 + + +# 名词解释 + + +# 附件及参考资料 + +[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md) + + From 36f32a3e5705bb3099d6d5c1d5b7a00d78caca29 Mon Sep 17 00:00:00 2001 From: thunder95 <290844930@qq.com> Date: Tue, 9 Aug 2022 13:12:52 +0800 Subject: [PATCH 2/5] false commit --- .../20220805_erfinv_op_optimization.md | 88 ------------------- 1 file changed, 88 deletions(-) delete mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md deleted file mode 100644 index acb595885..000000000 --- a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md +++ /dev/null @@ -1,88 +0,0 @@ -# erfinv OP性能优化设计文档 - - -| 基本信息 | 内容 | -| ------------------------------------------------------------ |--------------------------------------| -| 提交作者 | thunder95 | -| 提交时间 | 2022-08-05 | -| 版本号 | V1.0 | -| 依赖飞桨版本 | PaddleDevelop | -| 文件名 | 20220805_erfinv_optimization.md
| - - -# 1 背景与意义 - -目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。 - -## 1.1 飞桨现状 - -当前性能如下表(基于PaddlePaddle develop分支): - -目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表: - -| Case No. | device | input_shape | input_type | Paddle Perf(ms) | -|---|---|---|---|---| -| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 | -| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 | - -API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv - -## 1.2 业内方案调研 - -Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12): - -| Case No. | device | input_shape | input_type | Paddle Perf(ms) | -|---|---|---|---|---| -| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 | -| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 | - -## 1.3 对比分析 - -目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。 - -# 2 设计方案与性能预期 - -## 2.1 关键模块与性能提升点 - -通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。 - -## 2.2 Host端计算流程 - -通过gpu_launch_config.h中的线程配置方法配置1D线程。 - -## 2.4 Device端计算流程 - -设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。 - -# 3 测试和验收的考量 - -参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) - - - -# 4 可行性分析和排期规划 - -时间和开发排期规划,主要milestone - -| No. | 开发内容 | 预期时间 | -|---|---|---| -| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 | -| 2 | 完成开发文档设计 | 2022-08-08 | -| 3 | ndtri函数开发 | 2022-08-09 | -| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 | - - - -# 5 影响面 - -待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。 - - -# 名词解释 - - -# 附件及参考资料 - -[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md) - - From 23da46be0ab9fc2274ce90788cb797ce38ae1d38 Mon Sep 17 00:00:00 2001 From: thunder95 <290844930@qq.com> Date: Tue, 9 Aug 2022 13:54:23 +0800 Subject: [PATCH 3/5] erfinv --- .../20220805_erfinv_op_optimization.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md new file mode 100644 index 000000000..acb595885 --- /dev/null +++ b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md @@ -0,0 +1,88 @@ +# erfinv OP性能优化设计文档 + + +| 基本信息 | 内容 | +| ------------------------------------------------------------ |--------------------------------------| +| 提交作者 | thunder95 | +| 提交时间 | 2022-08-05 | +| 版本号 | V1.0 | +| 依赖飞桨版本 | PaddleDevelop | +| 文件名 | 20220805_erfinv_optimization.md
| + + +# 1 背景与意义 + +目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。 + +## 1.1 飞桨现状 + +当前性能如下表(基于PaddlePaddle develop分支): + +目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表: + +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 | +| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 | + +API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv + +## 1.2 业内方案调研 + +Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12): + +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 | +| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 | + +## 1.3 对比分析 + +目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。 + +# 2 设计方案与性能预期 + +## 2.1 关键模块与性能提升点 + +通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。 + +## 2.2 Host端计算流程 + +通过gpu_launch_config.h中的线程配置方法配置1D线程。 + +## 2.4 Device端计算流程 + +设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。 + +# 3 测试和验收的考量 + +参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) + + + +# 4 可行性分析和排期规划 + +时间和开发排期规划,主要milestone + +| No. | 开发内容 | 预期时间 | +|---|---|---| +| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 | +| 2 | 完成开发文档设计 | 2022-08-08 | +| 3 | ndtri函数开发 | 2022-08-09 | +| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 | + + + +# 5 影响面 + +待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。 + + +# 名词解释 + + +# 附件及参考资料 + +[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md) + + From e3dc6b8c5af8a996376be677a4040f5e6c730bf1 Mon Sep 17 00:00:00 2001 From: thunder95 <290844930@qq.com> Date: Tue, 9 Aug 2022 13:56:06 +0800 Subject: [PATCH 4/5] false commit --- .../20220805_erfinv_op_optimization.md | 88 ------------------- 1 file changed, 88 deletions(-) delete mode 100644 rfcs/OPs-Perf/20220805_erfinv_op_optimization.md diff --git a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md b/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md deleted file mode 100644 index acb595885..000000000 --- a/rfcs/OPs-Perf/20220805_erfinv_op_optimization.md +++ /dev/null @@ -1,88 +0,0 @@ -# erfinv OP性能优化设计文档 - - -| 基本信息 | 内容 | -| ------------------------------------------------------------ |--------------------------------------| -| 提交作者 | thunder95 | -| 提交时间 | 2022-08-05 | -| 版本号 | V1.0 | -| 依赖飞桨版本 | PaddleDevelop | -| 文件名 | 20220805_erfinv_optimization.md
| - - -# 1 背景与意义 - -目前Paddle中的Erfinv是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。 - -## 1.1 飞桨现状 - -当前性能如下表(基于PaddlePaddle develop分支): - -目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表: - -| Case No. | device | input_shape | input_type | Paddle Perf(ms) | -|---|---|---|---|---| -| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.1438 | -| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 8| 8.6485 | - -API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/erfinv_cn.html#erfinv - -## 1.2 业内方案调研 - -Pytorch中对Erfinv算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12): - -| Case No. | device | input_shape | input_type | Paddle Perf(ms) | -|---|---|---|---|---| -| 1 | RTX 2070s | [-1L, 204800L] | float32 | 0.0677 | -| 2 | RTX 2070s |[10L, 20L, 30L, 40L, 5L, 6L] | float64 | 2.7904 | - -## 1.3 对比分析 - -目前Paddle与Pytorch的API设计方案几乎相同,两种case下测试pytorch性能更优,理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。 - -# 2 设计方案与性能预期 - -## 2.1 关键模块与性能提升点 - -通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升1.2倍。 - -## 2.2 Host端计算流程 - -通过gpu_launch_config.h中的线程配置方法配置1D线程。 - -## 2.4 Device端计算流程 - -设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行erfinv计算。 - -# 3 测试和验收的考量 - -参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) - - - -# 4 可行性分析和排期规划 - -时间和开发排期规划,主要milestone - -| No. | 开发内容 | 预期时间 | -|---|---|---| -| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-08-05 | -| 2 | 完成开发文档设计 | 2022-08-08 | -| 3 | ndtri函数开发 | 2022-08-09 | -| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-08-10 | - - - -# 5 影响面 - -待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。 - - -# 名词解释 - - -# 附件及参考资料 - -[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md) - - From 90890224ef4678fd0d7bd6da754959077a1d2636 Mon Sep 17 00:00:00 2001 From: thunder95 <290844930@qq.com> Date: Sun, 26 Mar 2023 20:15:54 +0800 Subject: [PATCH 5/5] logsumexp-perf --- .../20230326_logsumexp_op_optimization.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md diff --git a/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md b/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md new file mode 100644 index 000000000..c665ea4dc --- /dev/null +++ b/rfcs/OPs-Perf/20230326_logsumexp_op_optimization.md @@ -0,0 +1,112 @@ +# Logsumexp OP性能优化设计文档 + + +| 基本信息 | 内容 | +| ------------------------------------------------------------ |--------------------------------------| +| 提交作者 | thunder95 | +| 提交时间 | 2023-03-26 | +| 版本号 | V1.0 | +| 依赖飞桨版本 | PaddleDevelop | +| 文件名 | 20230326_logsumexp_op_optimization.md
| + + +# 1 背景与意义 + +目前 Paddle 内 logsumexp 算子 GPU 计算采用了Eigen库实现,性能仍有明显的提升空间。 + +## 1.1 飞桨现状 + +当前性能如下表(基于PaddlePaddle develop分支): + +目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表: + +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [64L, 64L] | float32 | 0.0681 | +| 2 | RTX 2070s | [1024L, 512L] | float32 | 0.67155 | +| 3 | RTX 2070s | [64L, 64L] | float16 | 0.06718 | +| 4 | RTX 2070s | [1024L, 512L] | float16 | 0.64455 | + + +API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/logsumexp_cn.html + +## 1.2 业内方案调研 + +Pytorch中API文档: https://pytorch.org/docs/1.12/generated/torch.logsumexp.html?highlight=logsumexp#torch.logsumexp + +Pytorch中sum_out可基于cuda计算, forward整体性能如下(基于pytorch v1.12): + +| Case No. | device | input_shape | input_type | Pytorch Perf(ms) | +|---|---|---|---|---| +| 1 | RTX 2070s | [64L, 64L] | float32 | 0.03757 | +| 2 | RTX 2070s | [1024L, 512L] | float32 | 0.05742 | +| 3 | RTX 2070s | [64L, 64L] | float16 | 0.04035 | +| 4 | RTX 2070s | [1024L, 512L] | float16 | 0.05294 | + +## 1.3 对比分析 + +目前Paddle与Pytorch的API设计方案相似,4种case下测试Pytorch性能更优, +二者主要差别是Paddle采用的是Eigen方式计算,🕑然而Pytorch中基于cuda可明显提升性能。 + +pytorch中主要实现代码: + +```c++ +static Tensor& logsumexp_out_impl(Tensor& result, const Tensor& self, IntArrayRef dims, bool keepdim) { + // can't take max of empty tensor + if (self.numel() != 0) { + auto maxes = at::amax(self, dims, true); + auto maxes_squeezed = (keepdim ? maxes : squeeze_multiple(maxes, dims)); + maxes_squeezed.masked_fill_(maxes_squeezed.abs() == INFINITY, 0); + at::sum_out(result, (self - maxes).exp_(), dims, keepdim); + result.log_().add_(maxes_squeezed); + } else { + at::sum_out(result, at::exp(self), dims, keepdim); + result.log_(); + } + return result; +} +``` +# 2 设计方案与性能预期 + +## 2.1 关键模块与性能提升点 + +基于Paddle中已封装好的Reduce及Elementwise,二者充分利用了向量化读写操作的优秀性能,已做了初步测试,优化的性能能够超出预期。 + +## 2.2 Host端计算流程 + +计算reduce的axis,keepdim等,调用reduce算子封装好的接口。 + +## 2.4 Device端计算流程 + +基于现有的kps算子进行组装即可。 + +# 3 测试和验收的考量 + +参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) + +# 4 可行性分析和排期规划 + +时间和开发排期规划,主要milestone + +| No. | 开发内容 | 预期时间 | +|---|---|---| +| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2023-03-26 | +| 2 | 完成开发文档设计 | 2023-03-26 | +| 3 | logsumexp优化实现 | 2023-03-26 | +| 3 | 完成代码开发工作,并通过线程CI测试 | 2023-03-31 | + + + +# 5 影响面 + +待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。 + + +# 名词解释 + + +# 附件及参考资料 + +[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md) + +