已合并
迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 #9915
迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条融合规则 #9915
已合并
rk创建于 9月5日
rk成员
9月5日

描述

迁移 LayerNormONNXFusionPass 与 LayerNormONNXMULFusionPass 两条 GE 自定义融合规则至本仓库,将 ONNX 导入的 LayerNorm 展开图融合为 LayerNorm / LayerNormV3 算子,减少图执行时的算子下发数量和中间结果访存。同步补充设计文档、配图和 UT。

改动原因

ONNX 导入的 LayerNorm 在 GE 图中以展开形式存在(ReduceMean、Sub、Pow、Add、Sqrt、Div 等基础算子组合),算子下发数量多、中间结果访存开销大。两条 ONNX 融合规则迁移至本仓库统一维护,匹配后替换为 LayerNorm / LayerNormV3 算子节点,提升执行性能。

改动方法

  1. LayerNormONNXFusionPass:识别 ONNX 导入的 ReduceMean、Sub、Pow(或 Square)、Add、Sqrt、Div 等小算子组合,融合为 LayerNorm 算子。支持 6 种场景:带/不带 gamma 和 beta、平方计算前带 Cast、开方前经 Max+Min / Min+Max 数值裁剪;带 gamma 和 beta 时同时融合末尾的 Mul 和 Add。不带 gamma/beta 时创建全 1 gamma 和全 0 beta 常量。
  2. LayerNormONNXMULFusionPass:识别 ReduceMean、两个独立 Sub、Mul(或 Pow)、Add、Sqrt(或 Pow)、Div 等组合,融合为 LayerNormV3 算子。支持 4 种场景:Mul/Pow 计算平方、带/不带 gamma 和 beta;另支持 Rsqrt 替代 Pow(0.5)。
  3. 设计文档:新增 LayerNormONNXFusionPass.md 和 LayerNormONNXMULFusionPass.md,描述融合模式(14 张配图)、使用约束(axes/keep_dims、Sub 位置、Cast/Div 限制、epsilon/Pow 指数常量约束、内部节点不复用等)、支持的型号(Ascend 950PR/950DT)。
  4. UT:LayerNormONNXFusionPassTest 12 个用例、LayerNormONNXMULFusionPassTest 12+ 个用例,覆盖融合成功(Pow/Square、Div/RealDiv、Cast、Max/Min 裁剪、共享 axes const、gamma 输入位置交换)与不融合场景(不支持平台、keep_dims=false、Pow 指数非 2、epsilon 过大、中间节点有外部消费者等)。
  5. math_proto_stub.cpp(+165):新增 Pow、Square、Sqrt、Maximum、Minimum、RealDiv、Div 算子原型 stub,供 UT 构图使用。

涉及文件(23 个,+3287):

  • norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.cpp(新增,+815)
  • norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_fusion_pass.h(新增,+33)
  • norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.cpp(新增,+693)
  • norm/layer_norm/op_graph/fusion_pass/layer_norm_onnx_mul_fusion_pass.h(新增,+33)
  • norm/layer_norm/docs/LayerNormONNXFusionPass.md(新增,+75)
  • norm/layer_norm/docs/LayerNormONNXMULFusionPass.md(新增,+58)
  • docs/zh/figures/layer_norm_onnx_fusion_pass_1~8.png(新增)
  • docs/zh/figures/layer_norm_onnx_mul_fusion_pass_1~6.png(新增)
  • norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_fusion_pass.cpp(新增,+709)
  • norm/layer_norm/tests/ut/op_graph/test_layer_norm_onnx_mul_fusion_pass.cpp(新增,+664)
  • common/stub/op_graph/math_proto_stub.cpp(+165)

关联的Issue

测试

  • LayerNormONNXFusionPassTest:12 个 UT 用例。
  • LayerNormONNXMULFusionPassTest:12+ 个 UT 用例。
  • 覆盖融合成功与不融合(约束不满足)场景。

文档更新

  • 新增 LayerNormONNXFusionPass.md、LayerNormONNXMULFusionPass.md 设计文档及 14 张配图

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 rk 的贡献)
Rrk成员
9月5日 创建了 pull request,commit 14e0363d
CANN-robotCANN-robot成员
9月5日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9月5日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
common ✅ 陈琦, 刘波 (2/2) ✅ 陈琦, 刘波 (2/1)
docs ✅ 杨露, 陈琦, 刘波 (3/2) ✅ 杨露 (1/1)
norm ✅ 钱泽洪, 陈琦, 刘波 (3/2) ✅ 钱泽洪 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

wangpengbo26, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
9月5日 将zengjuan,sxb154714,chaotang233,kevin_huang1234,crystalhu,yangyang016,fanqirui,wangrui_,renruhai,su-yueming,zhajianqing123,chenqi317,LinPX,wang-xing001,liubo75,tangweiwei2,chenxingyu18,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong设为评审人
CANN-robotCANN-robot成员
9月5日 将sxb154714,kevin_huang1234,crystalhu,yangyang016,fanqirui,wangrui_,renruhai,su-yueming,zhajianqing123,chenqi317,LinPX,wang-xing001,liubo75,tangweiwei2,chenxingyu18,liujie12345678,pingchuantang,Chen_HaoWen,qianzehong设为审查人
此处折叠了146条消息 查看更多
CANN-robot
CANN-robot成员
28 天前 评论:

The following users do not have permission to comment /lgtm or /approve on any module in this PR:
/lgtm: lwx1255555

likedislike
CANN-robotCANN-robot成员
28 天前 添加了label:lgtm
CANN-robotCANN-robot成员
28 天前 关闭了关联的issue
CANN-robotCANN-robot成员
28 天前 合入了pull request
CANN-robot
CANN-robot成员
28 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike