Skip to content

Commit 5966992

Browse files
authored
update doc about cinn (#7190)
1 parent 63eea5a commit 5966992

File tree

4 files changed

+28
-19
lines changed

4 files changed

+28
-19
lines changed

docs/guides/paddle_v3_features/cinn_cn.md

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,18 @@ print(out)
7373
# 打开组合算子
7474
export FLAGS_prim_enable_dynamic=true && export FLAGS_prim_all=true
7575
76-
# 打开 CINN 编译器相关 FLAG
76+
# 打开 CINN 编译器
7777
export FLAGS_use_cinn=true
78-
export FLAGS_cinn_new_group_scheduler=true
79-
export FLAGS_group_schedule_tiling_first=true
80-
export FLAGS_cinn_bucket_compile=true
8178
82-
# 打开 PIR 模式
83-
export FLAGS_enable_pir_api=true
84-
85-
# 是否打印 Program IR 信息
79+
# 是否打印 Program IR 信息 (用于调试)
8680
export FLAGS_print_ir=false
8781
8882
python run_net.py
8983
```
9084

9185
上述代码示例中我们创建了一个简单的`rms_norm`计算子图,使用飞桨的动转静流程将子图转为静态图并调用编译器 CINN 进行优化和执行。经过性能对比测试,在 A100 GPU 环境中上述子图使用 CINN 可以取得 3 倍左右的性能提升(该性能数据仅供学习参考,在实际应用模型中能够取得的性能提升效果一般会低于该数据)。
9286

93-
注:由于飞桨的编译器仍然处在快速迭代开发阶段,我们设置了较多 FLAGS 进行分支的选择和调试,因此现阶段在使用 CINN 时需要对如下 FLAGS(`FLAGS_prim_enable_dynamic``FLAGS_cinn_new_group_scheduler``FLAGS_group_schedule_tiling_first``FLAGS_cinn_bucket_compile``FLAGS_enable_pir_api`) 进行手动设置,待后续相关功能完备后这些 FLAGS 会默认开启,无需再手动设置。
87+
注:由于飞桨的编译器仍然处在快速迭代开发阶段,我们设置了多个 FLAGS 进行分支的选择和调试,因此现阶段在使用 CINN 时需要对如下 FLAGS( `FLAGS_use_cinn``FLAGS_prim_enable_dynamic``FLAGS_prim_all`) 进行手动设置,待后续相关功能完备后动转静流程将默认开启这些 FLAGS,无需再手动设置。
9488

9589
## 四、设计架构
9690
<center><img src="
@@ -358,3 +352,27 @@ function fn_exp_0_subtract_0_infer_shape (kernel_args, kernel_args_num, tensor_s
358352
编译器生成的 Kernel 代码需要与深度学习框架执行器完成交互和集成才能最终运行起来,因此需要基于执行器的运行调度接口对编译器生成的 Kernel 进行封装。
359353

360354
接入执行器后在运行时对于经过编译器处理的子图将执行 CINN 生成的 Kernel, 否则将执行常规的 PHI 算子 Kernel。
355+
356+
357+
## 五、技术创新点
358+
1. 以 Reduce 为核心的算子深度融合
359+
* 摒弃传统的粗粒度 pattern 匹配模式,支持维度轴自动变换对齐融合,在保证计算正确性的同时,具有更强的算子融合能力,带来更大的性能优化潜力。
360+
2. 动静态维度的高效后端 Kernel 调优
361+
* 算子支持全面:支持 reduce、broadcast、transpose 等多种算子的不同组合方式,针对各类算子组合和数据类型,自适应不同维度大小与不同硬件配置,进行全场景高效调优。
362+
* 自动向量化加速:提高 BF16、FP16 等小数据类型的访存效率。
363+
* 动静态运行时配置生成:通过分析与分桶机制,根据运行时的硬件配置,在无需 profiling 的情况下生成高效 Kernel。
364+
3. 动态维度的复杂表达式化简
365+
* 分层化简体系:Lower、Schedule、CodeGen 阶段执行不同等级化简方法,解决传统化简方法中多场景叠加后化简困难、化简不彻底问题。
366+
* 复杂表达式结构化简:深度解析融合算子编译调优后的固定子结构,建立专项化简模板,同时开放自定义化简接口,实现化简策略的弹性扩展与精准适配。
367+
368+
## 六、性能优化效果
369+
370+
1. 科学计算系列模型:
371+
* 飞桨基于 CINN 编译器在科学计算 Modulus 模型上,相比 Pytorch 求解速度平均提升 115%。
372+
<center><img src="https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/paddle_v3_features/images/cinn/modulus_cinn_vs_torch.png?raw=true" width="95%" ></center>
373+
<center> 图 3 Modulus 系列模型性能对比数据 </center><br>
374+
375+
2. PaddleX 模型:
376+
* PaddleX 系列 60+ 模型使用 CINN 编译器后超 60% 模型有显著性能提升,平均提升达 27.4%。部分重点模型相比 Pytorch 也有明显性能优势。
377+
<center><img src="https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/paddle_v3_features/images/cinn/PaddleX_cinn_vs_torch.png?raw=true" width="95%" ></center>
378+
<center> 图 4 部分重点模型单机 8 卡 FP16 训练性能对比数据 </center><br>
739 KB
Loading
454 KB
Loading

docs/guides/paddle_v3_features/overview_cn.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -272,23 +272,14 @@ for data in loader():
272272
print('loss', loss, flush=1)
273273
```
274274

275-
因为一些功能还在开发中,为了避免对用户造成干扰,当前我们没有默认开启高扩展中间表示 PIR 和神经网络编译器自动优化功能,在开始执行前,我们需要进行环境变量设置以确保新功能生效,如下:
275+
由于在部分极端场景下编译器可能会引起性能退化,为了避免对用户造成干扰,当前我们没有默认开启神经网络编译器自动优化功能,在开始执行前,我们需要进行环境变量设置以确保新功能生效,如下:
276276

277277
```cpp
278278
# 打开组合算子
279279
export FLAGS_prim_enable_dynamic=true && export FLAGS_prim_all=true
280280

281281
# 打开 CINN 编译器相关 FLAG
282282
export FLAGS_use_cinn=true
283-
export FLAGS_cinn_new_group_scheduler=true
284-
export FLAGS_group_schedule_tiling_first=true
285-
export FLAGS_cinn_bucket_compile=true
286-
287-
# 打开 PIR 模式
288-
export FLAGS_enable_pir_api=true
289-
290-
# 是否打印 Program IR 信息
291-
export FLAGS_print_ir=false
292283

293284
# 执行命令
294285
# python -u -m paddle.distributed.launch --gpus "0,1" test_demo.py

0 commit comments

Comments
 (0)