From beddfda0dbbe18f68e6d3fc35b29a4277494a541 Mon Sep 17 00:00:00 2001 From: carryyu <569782149@qq.com> Date: Tue, 19 Jul 2022 12:47:47 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90PFCC=E7=AE=97=E5=AD=90=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96=E3=80=91=E6=B7=BB=E5=8A=A0selu?= =?UTF-8?q?=E7=AE=97=E5=AD=90=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E6=A1=A3=20(#169)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加selu算子性能优化文档 * Update 20220706_Selu_op_optimization.md * Update 20220706_Selu_op_optimization.md * Update 20220706_Selu_op_optimization.md --- .../OPs-Perf/20220706_Selu_op_optimization.md | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 rfcs/OPs-Perf/20220706_Selu_op_optimization.md diff --git a/rfcs/OPs-Perf/20220706_Selu_op_optimization.md b/rfcs/OPs-Perf/20220706_Selu_op_optimization.md new file mode 100644 index 000000000..107431fa7 --- /dev/null +++ b/rfcs/OPs-Perf/20220706_Selu_op_optimization.md @@ -0,0 +1,83 @@ +# Selu OP性能优化设计文档 + + +| 基本信息 | 内容 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| 提交作者 | carryyu | +| 提交时间 | 2022-07-06 | +| 版本号 | V1.0 | +| 依赖飞桨版本 | PaddleDevelop | +| 文件名 | 20220706_Selu_op_optimization.md
| + +# 1 背景与意义 + +目前Paddle中的Selu是通过Eigen组合实现,没有用到一些性能优化的技巧,存在性能优化的空间。 + +## 1.1 飞桨现状 + +目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前性能如下表: +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | +|---|---|---|---|---| +| 1 | Tesla T4 | [8, 1024, 3072] | float32 | 0.9122 | +| 2 | Tesla T4 | [8, 1024, 3072] | float64 | 5.2592 | + +## 1.2 业内方案调研 + +Pytorch中对应`paddle.nn.functional.selu` 的Api为 `torch.nn.functional.selu`。调研发现Pytorch中采用的是`SeluKernel` Kernel完成该OP的GPU实现。PyTorch采用的方案是1维线程设置完成整体计算,整体性能如下: +| Case No. | device | input_shape | input_type | Pytorch Perf(ms) | +|---|---|---|---|---| +| 1 | Tesla T4 | [8, 1024, 3072] | float32 | 0.8349 | +| 2 | Tesla T4 | [8, 1024, 3072] | float64 | 5.4939 | + +## 1.3 对比分析 + +目前Paddle与Pytorch的方案几乎相同,但理论上可以通过向量化读取和写入等手段进行优化,进一步提升算子性能。 + +# 2 设计方案与性能预期 + +## 2.1 关键模块与性能提升点 + +通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化,预计提升5%。 + +## 2.2 Host端计算流程 + +通过gpu_launch_config.h中的线程配置方法配置1D线程。 + +## 2.4 Device端计算流程 + +设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行selu计算。 + +# 3 测试和验收的考量 + +参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913) +完成优化后,Paddle与优化前的Paddle的性能对比效果如下,达到了预期性能提升效果(提升5%): +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | Old-Paddle Perf(ms) | diff | +|---|---|---|---|---|---|---| +| 1 | Tesla T4 | [8, 1024, 3072] | float32 | 0.8277 | 0.9122 | faster than 9.26% | +| 2 | Tesla T4 | [8, 1024, 3072] | float64 | 4.5655 | 5.2592 | faster than 13.19% | + +完成优化后,Paddle与Pytorch的性能对比效果如下,在fp32情况下基本与Pytorch持平,在fp64情况下提升较大 : +| Case No. | device | input_shape | input_type | Paddle Perf(ms) | Pytorch Perf(ms) | diff | +|---|---|---|---|---|---|---| +| 1 | Tesla T4 | [8, 1024, 3072] | float32 | 0.8277 | 0.8349 | faster than 0.86% | +| 2 | Tesla T4 | [8, 1024, 3072] | float64 | 4.5655 | 5.4939 | faster than 16.89% | + +# 4 可行性分析和排期规划 + +时间和开发排期规划,主要milestone + +| No. | 开发内容 | 预期时间 | +|---|---|---| +| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2022-07-06 | +| 2 | 完成开发文档设计 | 2022-07-14 | +| 3 | 完成代码开发工作,并通过线程CI测试 | 2022-07-17 | + +# 5 影响面 + +需要进一步讨论的问题,开放性问题,有争议问题;对其他模块是否有影响。 + +# 名词解释 + +# 附件及参考资料 + +[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)