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架构不造成影响