From 6d68e5ca83dd2d9bb0990d10c93246d1c2df8269 Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Wed, 22 Feb 2023 00:32:53 +0800
Subject: [PATCH 1/3] prelu_rfc
---
.../20230222_prelu_op_optimization.md | 89 +++++++++++++++++++
1 file changed, 89 insertions(+)
create mode 100644 rfcs/OPs-Perf/20230222_prelu_op_optimization.md
diff --git a/rfcs/OPs-Perf/20230222_prelu_op_optimization.md b/rfcs/OPs-Perf/20230222_prelu_op_optimization.md
new file mode 100644
index 000000000..5bc93285a
--- /dev/null
+++ b/rfcs/OPs-Perf/20230222_prelu_op_optimization.md
@@ -0,0 +1,89 @@
+# Prelu OP性能优化设计文档
+
+
+| 基本信息 | 内容 |
+| ------------------------------------------------------------ |--------------------------------------|
+| 提交作者 | thunder95 |
+| 提交时间 | 2023-02-22 |
+| 版本号 | V1.0 |
+| 依赖飞桨版本 | PaddleDevelop |
+| 文件名 | 20230222_prelu_op_optimization.md
|
+
+
+# 1 背景与意义
+
+目前Paddle中的Prelu算子仍旧通过内部循环方式实现,没有用到一些性能优化的技巧,存在性能优化的空间。
+
+## 1.1 飞桨现状
+
+当前性能如下表(基于PaddlePaddle develop分支):
+
+目前的实现有一定的性能优化空间,可以加入一些性能优化的技巧。当前forward性能如下表:
+
+| Case No. | device | input_shape | input_type | weight_type | Paddle Perf(ms) |
+|---|---|---|---|---|---|
+| 1 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1L] | 0.8584 |
+| 2 | RTX 2070s | [8L, 1024L, 3072L] | float64 | [1024L] | 1.1135 |
+
+API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/PReLU_cn.html#prelu
+
+## 1.2 业内方案调研
+
+Pytorch中对Prelu算子的实现基于GPU计算, forward整体性能如下(基于pytorch v1.12):
+
+| Case No. | device | input_shape | input_type | weight_type | Pytorch Perf(ms) |
+|---|---|---|---|---|---|
+| 1 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1L] | 0.64366 |
+| 2 | RTX 2070s | [8L, 1024L, 3072L] | float64 | [1024L] | 0.8148 |
+
+## 1.3 对比分析
+
+目前Paddle与Pytorch的API设计方案相似,两种case下测试pytorch性能更优,理论上可以通过线程配置,或向量化读取和写入等手段进行优化,进一步提升算子性能。
+Pytorch通过grid和block的优化配置性能明显优于paddle,paddle目前还是1d内部循环的方式实现。
+
+# 2 设计方案与性能预期
+
+## 2.1 关键模块与性能提升点
+
+通过使用飞桨内部的Elementwise Kernel来进行计算。通过向量化读取、向量化写入以及gpu_launch_config.h中的线程配置方法对算子进行优化, 使用cuda内置函数后预计比当前算子提升%20以上。
+
+## 2.2 Host端计算流程
+
+通过gpu_launch_config.h中的线程配置方法配置1D线程。
+
+## 2.4 Device端计算流程
+
+设备端通过kps::ReadData和kps::WriteData对数据进行读写,再对每个值进行prelu计算。
+
+# 3 测试和验收的考量
+
+参考:[算子性能优化验收标准](http://agroup.baidu.com/paddle-perf/md/article/4892913)
+
+
+
+# 4 可行性分析和排期规划
+
+时间和开发排期规划,主要milestone
+
+| No. | 开发内容 | 预期时间 |
+|---|---|---|
+| 1 | 理清Paddle中OP设计思路,同类产品中最佳设计方案 | 2023-02-22 |
+| 2 | 完成开发文档设计 | 2023-02-22 |
+| 3 | prelu优化实现 | 2023-02-23 |
+| 3 | 完成代码开发工作,并通过线程CI测试 | 2023-02-24 |
+
+
+
+# 5 影响面
+
+待优化的算子独立运行,不涉及其他算子和模块的修改,API设计与之前保持一致。
+
+
+# 名词解释
+
+
+# 附件及参考资料
+
+[1]. [OP Benchmark使用指南](https://github.com/PaddlePaddle/benchmark/blob/master/api/README.md)
+
+
From 3d3ff16ebd705956a991e3920416126d668fbf7c Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Mon, 27 Feb 2023 00:11:37 +0800
Subject: [PATCH 2/3] add fp16 perf
---
.../20230222_deploy_ppyoloer_for_bm1684x.md | 61 +++++++++++++++++++
.../20230222_prelu_op_optimization.md | 12 ++--
2 files changed, 69 insertions(+), 4 deletions(-)
create mode 100644 rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
diff --git a/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md b/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
new file mode 100644
index 000000000..e51e207a3
--- /dev/null
+++ b/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
@@ -0,0 +1,61 @@
+# 完成PP-YOLOE-R在BM1684X上的部署,并验证正确性
+
+| 领域 | 模型套件 |
+|----------------------------------------------------------|-------------------------------------------|
+| 提交作者 | thunder95 |
+| 提交时间 | 2023-02-23 |
+| 版本号 | V0.0 |
+| 依赖飞桨版本 | paddlepaddle-gpu==0.0 |
+| 文件名 | 20230222_deploy_ppyoloer_for_bm1684x.md
|
+
+
+# 一、概述
+
+## 1、相关背景
+
+在BM1684x上完成PP-YOLOE-R,算法前后处理,开发Python部署示例和C++部署示例
+
+## 2、功能目标
+
+* 在fastdeploy/vision/detection/ppdet中增加支持PP-YOLOE-R的代码逻辑
+* 在ppdet_pybind.cc中绑定C++模型到python
+* 提交benchmark测试数据及精度对齐数据
+* 将模型提交到算能model zoo
+
+## 3、意义
+
+完善FastDeploy在BM1684X上的PP-YOLOE-R部署。
+
+# 二、设计思路与实现方案
+
+### Det部分
+
+- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
+- RKNPU2 不支持动态shape,因此参考Rec部分新增了固定shape推理。
+
+### Cls部分
+
+- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
+
+### Rec部分
+
+- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
+
+### OCR Result部分
+
+- 在显示result时会出现rec_score为0但是仍然被框出来的情况,这里对VisOcr函数新增了参数score_threshold
+
+
+# 三、测试和验收的考量
+
+* 速度和精度报告验收
+
+# 四、可行性分析和排期规划
+
+对各主流深度学习框架已经有一定了解,需要进一步做细致的体验测试及分析。
+预计整体的工作量在三周内可完成,不会晚于黑客松设定的验收 DDL。
+
+
+# 五、影响面
+
+都是新增API,对现有的FastDeploy架构不造成影响
diff --git a/rfcs/OPs-Perf/20230222_prelu_op_optimization.md b/rfcs/OPs-Perf/20230222_prelu_op_optimization.md
index 5bc93285a..5e5fd6804 100644
--- a/rfcs/OPs-Perf/20230222_prelu_op_optimization.md
+++ b/rfcs/OPs-Perf/20230222_prelu_op_optimization.md
@@ -23,7 +23,9 @@
| Case No. | device | input_shape | input_type | weight_type | Paddle Perf(ms) |
|---|---|---|---|---|---|
| 1 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1L] | 0.8584 |
-| 2 | RTX 2070s | [8L, 1024L, 3072L] | float64 | [1024L] | 1.1135 |
+| 2 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1024L] | 1.1135 |
+| 3 | RTX 2070s | [8L, 1024L, 3072L] | float16 | [1L] | 0.62442 |
+| 4 | RTX 2070s | [8L, 1024L, 3072L] | float16 | [1024L] | 0.87672 |
API文档 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/PReLU_cn.html#prelu
@@ -33,9 +35,11 @@ Pytorch中对Prelu算子的实现基于GPU计算, forward整体性能如下(基
| Case No. | device | input_shape | input_type | weight_type | Pytorch Perf(ms) |
|---|---|---|---|---|---|
-| 1 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1L] | 0.64366 |
-| 2 | RTX 2070s | [8L, 1024L, 3072L] | float64 | [1024L] | 0.8148 |
-
+| 1 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1L] | 0.64366 |
+| 2 | RTX 2070s | [8L, 1024L, 3072L] | float32 | [1024L] | 0.83144 |
+| 3 | RTX 2070s | [8L, 1024L, 3072L] | float16 | [1L] | 0.31887 |
+| 4 | RTX 2070s | [8L, 1024L, 3072L] | float16 | [1024L] | 0.84326 |
+
## 1.3 对比分析
目前Paddle与Pytorch的API设计方案相似,两种case下测试pytorch性能更优,理论上可以通过线程配置,或向量化读取和写入等手段进行优化,进一步提升算子性能。
From 07f52968878fb3a4908ac47992e5c5318e46b23b Mon Sep 17 00:00:00 2001
From: thunder95 <290844930@qq.com>
Date: Mon, 27 Feb 2023 00:12:54 +0800
Subject: [PATCH 3/3] remove unused file
---
.../20230222_deploy_ppyoloer_for_bm1684x.md | 61 -------------------
1 file changed, 61 deletions(-)
delete mode 100644 rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
diff --git a/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md b/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
deleted file mode 100644
index e51e207a3..000000000
--- a/rfcs/FastDeploy/20230222_deploy_ppyoloer_for_bm1684x.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# 完成PP-YOLOE-R在BM1684X上的部署,并验证正确性
-
-| 领域 | 模型套件 |
-|----------------------------------------------------------|-------------------------------------------|
-| 提交作者 | thunder95 |
-| 提交时间 | 2023-02-23 |
-| 版本号 | V0.0 |
-| 依赖飞桨版本 | paddlepaddle-gpu==0.0 |
-| 文件名 | 20230222_deploy_ppyoloer_for_bm1684x.md
|
-
-
-# 一、概述
-
-## 1、相关背景
-
-在BM1684x上完成PP-YOLOE-R,算法前后处理,开发Python部署示例和C++部署示例
-
-## 2、功能目标
-
-* 在fastdeploy/vision/detection/ppdet中增加支持PP-YOLOE-R的代码逻辑
-* 在ppdet_pybind.cc中绑定C++模型到python
-* 提交benchmark测试数据及精度对齐数据
-* 将模型提交到算能model zoo
-
-## 3、意义
-
-完善FastDeploy在BM1684X上的PP-YOLOE-R部署。
-
-# 二、设计思路与实现方案
-
-### Det部分
-
-- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
-- RKNPU2 不支持动态shape,因此参考Rec部分新增了固定shape推理。
-
-### Cls部分
-
-- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
-
-### Rec部分
-
-- RKNPU2不支持Normalzie 和 Permute,参考PPYOLOE在FastDeploy中的部署,因此添加了DisableNormalize 和DisablePermute
-
-### OCR Result部分
-
-- 在显示result时会出现rec_score为0但是仍然被框出来的情况,这里对VisOcr函数新增了参数score_threshold
-
-
-# 三、测试和验收的考量
-
-* 速度和精度报告验收
-
-# 四、可行性分析和排期规划
-
-对各主流深度学习框架已经有一定了解,需要进一步做细致的体验测试及分析。
-预计整体的工作量在三周内可完成,不会晚于黑客松设定的验收 DDL。
-
-
-# 五、影响面
-
-都是新增API,对现有的FastDeploy架构不造成影响