Skip to content

Commit 8ed57e1

Browse files
authored
【Hackathon 9th No.86】FastDeploy编译加速 (#1153)
* add Hackathon 9th No.86 rfc * update rfc * update rfc * update rfc
1 parent cbd6610 commit 8ed57e1

9 files changed

+100
-16
lines changed

rfcs/APIs/api_design_for_reverse_diagram_visualization.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ pytorch框架下,有一个第三方库[pytorchviz](https://github.com/szagoruyko
2929
为飞桨动态图框架添加反向节点在 Python 端的访问机制。并在该机制基础上,为飞桨框架扩展反向图可视化能力。方便进行调试。
3030

3131
# 二、飞桨现状
32-
飞浆的前向图的可视化可以通过飞桨的可视化工具[VisualDL](https://www.paddlepaddle.org.cn/documentation/docs/zh/2.2/guides/03_VisualDL/visualdl_cn.html)实现.
33-
但是飞浆框架目前还不支持对于反向图的可视化,也没有提供反向图的访问机制.
32+
飞桨的前向图的可视化可以通过飞桨的可视化工具[VisualDL](https://www.paddlepaddle.org.cn/documentation/docs/zh/2.2/guides/03_VisualDL/visualdl_cn.html)实现.
33+
但是飞桨框架目前还不支持对于反向图的可视化,也没有提供反向图的访问机制.
3434

35-
飞浆构建的模型前向计算的时候会同时将[反向图的节点构建好](https://github.com/PaddlePaddle/community/blob/master/pfcc/paddle-code-reading/Dygraph/20221201_dygraph_backward.md#%E5%89%8D%E5%90%91%E6%89%A7%E8%A1%8C%E5%90%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE), 将这些节点信息暴露给pythonAPI 基于这些节点信息可以构建反向图.最后进行可视化
35+
飞桨构建的模型前向计算的时候会同时将[反向图的节点构建好](https://github.com/PaddlePaddle/community/blob/master/pfcc/paddle-code-reading/Dygraph/20221201_dygraph_backward.md#%E5%89%8D%E5%90%91%E6%89%A7%E8%A1%8C%E5%90%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE), 将这些节点信息暴露给pythonAPI 基于这些节点信息可以构建反向图.最后进行可视化
3636

3737

3838

rfcs/APIs/api_design_for_reverse_diagram_visualization_2.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
为飞桨动态图框架添加反向节点在 Python 端的访问机制。并在该机制基础上,为飞桨框架扩展反向图可视化能力。方便进行调试。
2626

2727
# 二、飞桨现状
28-
飞浆的前向图的可视化可以通过飞桨的可视化工具[VisualDL](https://www.paddlepaddle.org.cn/documentation/docs/zh/2.2/guides/03_VisualDL/visualdl_cn.html)实现.
29-
但是飞浆框架目前还不支持对于反向图的可视化,也没有提供反向图的访问机制.
28+
飞桨的前向图的可视化可以通过飞桨的可视化工具[VisualDL](https://www.paddlepaddle.org.cn/documentation/docs/zh/2.2/guides/03_VisualDL/visualdl_cn.html)实现.
29+
但是飞桨框架目前还不支持对于反向图的可视化,也没有提供反向图的访问机制.
3030

31-
飞浆构建的模型前向计算的时候会同时将[反向图的节点构建好](https://github.com/PaddlePaddle/community/blob/master/pfcc/paddle-code-reading/Dygraph/20221201_dygraph_backward.md#%E5%89%8D%E5%90%91%E6%89%A7%E8%A1%8C%E5%90%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE), 将这些节点信息暴露给pythonAPI 基于这些节点信息可以构建反向图.最后进行可视化
31+
飞桨构建的模型前向计算的时候会同时将[反向图的节点构建好](https://github.com/PaddlePaddle/community/blob/master/pfcc/paddle-code-reading/Dygraph/20221201_dygraph_backward.md#%E5%89%8D%E5%90%91%E6%89%A7%E8%A1%8C%E5%90%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE), 将这些节点信息暴露给pythonAPI 基于这些节点信息可以构建反向图.最后进行可视化
3232

3333
目前已经开发了一个[paddleviz工具](https://github.com/PFCCLab/paddleviz) 可以实现反向图的可视化, 但是图中显示的信息还不够多
3434

rfcs/Docs/【Hackathon No.112】RFC修改

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# 一、概述
1313
## 1、相关背景
1414

15-
飞桨框架于 2.0 正式版全面支持了动态图训练,并在2.1、2.2 两个大版本中不断完善分布式能力,同时大幅增强了训练功能。需要进行飞浆动态图分布式训练的评估
15+
飞桨框架于 2.0 正式版全面支持了动态图训练,并在2.1、2.2 两个大版本中不断完善分布式能力,同时大幅增强了训练功能。需要进行飞桨动态图分布式训练的评估
1616

1717
## 2、功能目标
1818

@@ -41,7 +41,7 @@ paddle 使用的分布式框架的Fleet API 该 API支持动态图编译以及
4141

4242
# 四、设计思路与实现方案
4343

44-
对比pytorch框架以及飞浆分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。(具体查看第五点实现方案)
44+
对比pytorch框架以及飞桨分布式并行框架的运行速度,识别准确的度,分析两个框架使用的难易程度,使用方式。(具体查看第五点实现方案)
4545

4646
环境配置
4747
(1)在曙光超算昆山计算服务器部署pytorch分布式环境,给出部署步骤(已经完成)
@@ -70,7 +70,7 @@ Fleet API的使用
7070

7171
# 五、可行性分析和排期规划
7272

73-
对各Pytorch分布式训练框架ddp已经有一定了解,之后需要对比ddp和飞浆分布式框架之间的不同,进一步做细致的体验测试及分析。形成详细的报告文档。
73+
对各Pytorch分布式训练框架ddp已经有一定了解,之后需要对比ddp和飞桨分布式框架之间的不同,进一步做细致的体验测试及分析。形成详细的报告文档。
7474
已经完成一份评估文档,以及完成了pytorch和paddlepaddle的分布式训练。
7575

7676

rfcs/FastDeploy/20230301_deploy_PaddleDetection_by_Go.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
## 1、相关背景
1313

14-
随着飞浆项目使用者越来越多,需要开发Golang部署示例来满足Golang开发者的模型部署需求。
14+
随着飞桨项目使用者越来越多,需要开发Golang部署示例来满足Golang开发者的模型部署需求。
1515

1616
## 2、功能目标
1717
*`FastDeploy`中使用`Golang`完成`PaddleDetection``PP-YOLOE`, `PaddleYOLOv8`, `PaddleYOLOv5`等模型的部署。
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# FastDeploy编译加速设计文档
2+
3+
| 任务名称 | FastDeploy 编译加速 |
4+
|------|------|
5+
| 提交作者 | ccsuzzh |
6+
| 提交时间 | 2025-09-09 |
7+
| 版本号 | V1.0 |
8+
| 文件名 | 20250909_speed_up_compilation_for_fastdeploy.md |
9+
10+
# 一、概述
11+
12+
## 1、相关背景
13+
随着大语言模型推理部署需求的增加,FastDeploy 功能与自定义算子库快速扩张,带来显著的编译压力与 CI 用时上升。
14+
15+
## 2、功能目标
16+
* 提升源码整体编译速度与增量编译效率
17+
18+
## 3、意义
19+
提高开发效率,加快CI流水线的速度。
20+
21+
# 二、现状分析
22+
- 当前自定义算子库 `fastdeploy_ops.so` 主要通过 setuptools 直接编译。少量目标时尚可,但随着算子与依赖的膨胀,整体编译速度显著下降。
23+
- 采用 `nvcc --time` 统计各 `.cu` 文件编译耗时,定位编译瓶颈。
24+
25+
## 测试环境
26+
| 项目 | 配置 |
27+
|------|------|
28+
| CPU | Intel® Core™ i5-10600KF @ 4.10GHz × 12 |
29+
| OS | Ubuntu 20.04.6 LTS |
30+
| RAM | 64 GB |
31+
| GPU | GeForce RTX 4060 Ti 16 GB |
32+
33+
## 编译命令
34+
```bash
35+
bash build.sh 1 python false [80]
36+
```
37+
38+
## 头部编译耗时单元统计
39+
`build_and_install_ops` 总耗时:02:54:16s,而耗时最多的15个文件如下:
40+
41+
| 文件名 | 耗时占比 |
42+
|--------|---------:|
43+
| append_attention_c8_float16_fp8_kerne.cu | 2.88% |
44+
| decode_attention_kernel.cu | 2.60% |
45+
| append_attention_c8_bfloat16_fp8_kernel.cu | 2.58% |
46+
| append_attention_c8_float16_int8_kerne.cu | 2.27% |
47+
| append_attention_c8_bfloat16_int8_kernel.cu | 2.07% |
48+
| append_attention_c8_float16_float16_kernel.cu | 2.02% |
49+
| append_attention_c8_bfloat16_bfloat16_kernel.cu | 1.86% |
50+
| append_attention_c4_bfloat16_fp8_kernel.cu | 0.87% |
51+
| append_attention_c4_float16_fp8_kernel.cu | 0.86% |
52+
| fast_hardamard_kernel.cu | 0.83% |
53+
| append_attention_c4_bfloat16_int8_kernel.cu | 0.74% |
54+
| append_attention_c4_float16_int8_kernel.cu | 0.68% |
55+
| append_attention_c4_bfloat16_bfloat16_kernel.cu | 0.67% |
56+
| append_attention_c4_float16_float16_kernel.cu | 0.65% |
57+
| append_attention_c16_float16_fp8_kernel.cu | 0.47% |
58+
59+
上诉述头部耗时单元数量仅为总编译文件总数的 3.5%,而编译却占总耗时的 22.23%,这正是需要编译加速的重点文件。
60+
61+
# 三、业内方案调研
62+
主流如 vLLM 采用 setuptools.extension 配合 CMake(实际由 CMake + Ninja 构建),具备更好的增量编译、依赖管理与并行能力;同时结合 `ccache/sccache` 复用编译产物,并通过 `NVCC_THREADS` 提升 nvcc 内部并行度,降低大型 CUDA 文件单次编译耗时。
63+
64+
# 四、设计思路与实现方案
65+
66+
## 总体思路
67+
## 1) 构建系统与并行
68+
- 从 setuptools 直接编译切换为 CMake + Ninja 驱动编译
69+
- 开启 `NVCC_THREADS` 提升 nvcc 内部并行度(结合机器核心数做上限)
70+
71+
## 2) 编译缓存
72+
- 如果不能继续复用Paddle主框架的setup,则还需要额外对`ccache/sccache`进行支持
73+
74+
## 3) 源码层面优化
75+
- 降低头文件依赖与模板实例数量,控制编译单元体积
76+
- 拆分超大 `.cu` 文件,按功能/数据类型切分为更细粒度目标
77+
- 优化内核复杂度或编译选项
78+
79+
# 五、可行性分析和排期规划
80+
* 学习业界主流框架的编译流程和优化方法,可靠性已经得到验证。
81+
* 预计一周内完成编译流程的优化,在9月底完成任务收尾工作。
82+
83+
# 六、影响面
84+
在保证正确性的前提下进行源码与构建组织优化,不改变功能;对开发者与 CI 的主要影响为构建速度与流程优化。

rfcs/PaddleOCR/MixTex.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@
3636

3737
2. Swin Transformer
3838

39-
基于飞浆框架的实现 [PaddleMIX/paddlemix/models/groundingdino/backbone/swin_transformer.py at develop · PaddlePaddle/PaddleMIX (github.com)](https://github.com/PaddlePaddle/PaddleMIX/blob/develop/paddlemix/models/groundingdino/backbone/swin_transformer.py)
39+
基于飞桨框架的实现 [PaddleMIX/paddlemix/models/groundingdino/backbone/swin_transformer.py at develop · PaddlePaddle/PaddleMIX (github.com)](https://github.com/PaddlePaddle/PaddleMIX/blob/develop/paddlemix/models/groundingdino/backbone/swin_transformer.py)
4040

4141
作者论文中引用的模型 [microsoft/swin-tiny-patch4-window7-224 · Hugging Face](https://huggingface.co/microsoft/swin-tiny-patch4-window7-224)
4242

4343
4. RoBERTa
4444

45-
基于飞浆框架的实现  [PaddleNLP/slm/model_zoo/roberta at develop · PaddlePaddle/PaddleNLP (github.com)](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/slm/model_zoo/roberta)  
45+
基于飞桨框架的实现  [PaddleNLP/slm/model_zoo/roberta at develop · PaddlePaddle/PaddleNLP (github.com)](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/slm/model_zoo/roberta)  
4646

4747
# 四、对比分析
4848

49-
使用作者开源的模型和代码进行实现为目前最佳的论文复现实践方式,但基于控制影响面考量,将作者开源的模型转换成基于飞浆的模型,并为PaddleOCR增加研究中提出的数据生成和增强方式为目前的最佳实践方式
49+
使用作者开源的模型和代码进行实现为目前最佳的论文复现实践方式,但基于控制影响面考量,将作者开源的模型转换成基于飞桨的模型,并为PaddleOCR增加研究中提出的数据生成和增强方式为目前的最佳实践方式
5050

5151
# 五、设计思路与实现方案
5252

rfcs/PaddleOCR/Trocr_Formula_Rec.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
# 四、对比分析
3636

37-
使用作者开源的模型和代码进行实现为目前最佳的论文复现实践方式,但基于控制影响面考量,将作者开源的模型转换成基于飞浆的模型,并为PaddleOCR增加研究中提出的数据生成和增强方式为目前的最佳实践方式
37+
使用作者开源的模型和代码进行实现为目前最佳的论文复现实践方式,但基于控制影响面考量,将作者开源的模型转换成基于飞桨的模型,并为PaddleOCR增加研究中提出的数据生成和增强方式为目前的最佳实践方式
3838

3939
# 五、设计思路与实现方案
4040

rfcs/Science/20220907_science_65.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
# 二、飞桨现状
3030

31-
飞浆框架目前支持PINN模块化建模,针对2D非定常圆柱绕流算例,可实现200-300个监督测点的半监督学习。
31+
飞桨框架目前支持PINN模块化建模,针对2D非定常圆柱绕流算例,可实现200-300个监督测点的半监督学习。
3232
![参考 PaddleScience](https://github.com/PaddlePaddle/PaddleScience/tree/develop/examples/cylinder/2d_unsteady_continuous)
3333

3434
# 三、业内方案调研

rfcs/Science/20220912_sicience_61.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
# 二、飞桨现状
3232

33-
飞浆框架目前支持PINN模块化建模,针对2D非定常圆柱绕流算例,可实现200-300个监督测点的半监督学习。
33+
飞桨框架目前支持PINN模块化建模,针对2D非定常圆柱绕流算例,可实现200-300个监督测点的半监督学习。
3434
![参考 PaddleScience](https://github.com/PaddlePaddle/PaddleScience/tree/develop/examples/cylinder/2d_unsteady_continuous)
3535

3636
# 三、业内方案调研

0 commit comments

Comments
 (0)