已合并
【PR】: feat:autofuse支持extendconv2d #4290
hemahema创建于 8月6日
【PR】: feat:autofuse支持extendconv2d #4290
已合并
hemahema创建于 8月6日
hemahema
hemahema
8月6日

Pull Request

描述

autofuse原有支持Conv2DV2的自动融合,现新增对ExtendConv2D自动融合的支持。
主要变更:
conv2d.cc 增加 IM- PL_OP_INFER_SYMBOL_SHAPE_INNER(ExtendConv2D);pad_mode 在属性下标 7(round_mode 占 6)

  • LowerExtendConv2D → InnerLowerConv2D(..., true);按 bias/scale0 选 ExtendConv2D / Bias / Scale / BiasScale;未连接的 y1 走 StoreIgnoredOutput,避免 Extern Fallback
  • lowering 前 CompleteStaticSymbolicShapeForConv:ExtendConv2D 静态输出若没挂 SymbolicDescAttr 则补齐
  • IsStaticShape 只看本次 lowering 的连通边,optional 占位不再误判
  • CreateConvSubgraphAttr 覆盖 ExtendConv2D:按真实锚点连边;断边 optional 用 Data 占位;缺 IR 名则 AppendIrAttrName("ascendc_op_para_size");缺值则默认 2MB(kDefaultAscendcOpParaSize);filter 同步 FORMAT_FRACTAL_Z
  • IsCubeNodeType / skip-lifting 增加 4 种 ExtendConv2D ASCIR
  • backend_utils 等按 cube 处理 ExtendConv2D
  • vendored ascir_ops.h 增加 ExtendConv2D*
  • 中英文 autofuse_extend- _conv2d_cv_fusion.md、autofuse_extend_conv2d_llt.md;infer_shape.md 同步

变更类型

请选择本次引入的变更类型:

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:
1.
2.

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 hemahema 的贡献)
hemahemahemahema
8月6日 添加了label:enhancement
hemahemahemahema
8月6日 创建了 pull request,commit ce9964b7
atomgit-bot
atomgit-bot
8月6日 评论:

变更摘要

此 PR 为 autofuse 自动融合框架新增了对 ExtendConv2D 及其变体(ExtendConv2DBias、ExtendConv2DScale、ExtendConv2DBiasScale)的支持,涵盖从图优化、IR lowering、tiling 解析到符号形状推导的完整链路。同时修复了与 ExtendConv2D 引入的可选输入/输出相关的静态形状判断与子图构造逻辑,并补充了 fixed_shift_value、round_mode、enable_relu0、nullptr_inputs_index 等新增属性的传递与序列化。

主要改动

  • ExtendConv2D 算子注册与 lowering:在 autofuse_utils.h/.cpp 中添加四类 ExtendConv2D 类型常量并纳入 Cube 节点类型集合;在 lowering_impl.cpp 中将 LowerConv2D 重构为 InnerLowerConv2D,新增 LowerExtendConv2D 并注册;新增 SetExtendConv2DFixpipeParams 检测 scale0 可选输入,CollectConv2DInputs 同时收集未连接输入的索引供后端使用。

  • ASC IR 算子定义扩展:在 ascir_ops.h 中新增 ExtendConv2D、ExtendConv2DBias、ExtendConv2DScale、ExtendConv2DBiasScale 四个算子结构体及其 IR 属性定义(基于 ExtendConv2DIrAttrDefBase,继承自 Conv2D::AscConv2DIrAttrDef),并在现有 Conv2D 系列算子的属性定义和工厂函数中补充 fixed_shift_value 的 getter/setter。

  • Conv2DAttr 结构体扩展:在 cube.h 中为 Conv2DAttr 增加 round_mode、enable_relu0、fixed_shift_value、has_scale0、is_extend_conv2d、nullptr_inputs_index 字段,并在 asc_overrides.h 中新增 SET_EXTEND_CONV2D_ATTRS 宏及对应的 AscOverrides 分支,按输入数量与属性组合选择正确的 ExtendConv2D 算子变体。

  • 子图构造与 tiling 适配:在 liftings.cpp 中扩展 CreateConvSubgraphAttr,确保 ExtendConv2D 节点的 ascendc_op_para_size IR 属性存在并设默认值,跳过未连接的 optional 输入,并将 filter 输入格式设置为 FORMAT_FRACTAL_Z;在 op_tiling_rt2.cc 的 AicoreRtParseAndTiling 中增加对 kExtendConv2DNodeType 的匹配分支。

  • 静态形状判断与符号形状推导修复:在 loop_api.cpp 中重写 IsStaticShape,仅检查当前使用的输出锚点和实际连接的对端输入描述符,避免 ExtendConv2D 的未连接可选输入/输出导致误判;在 asc_ir_lowerer.cpp 中新增 CompleteStaticSymbolicShape,为缺少 SymbolicDescAttr 的静态形状输出补全符号形状信息;在 conv2d.cc 中为 ExtendConv2D 适配 pad_mode 属性索引偏移并注册符号形状推导。

likedislike
不准确?
atomgit-bot
atomgit-bot
8月6日 评论:

代码审查

审查总结

我已逐一审查了全部 14 个变更文件。以下是审查结果:

文件 状态
base/common/op_tiling/op_tiling_rt2.cc 无问题(仅添加调试日志及 ExtendConv2D 类型匹配)
compiler/graph/optimize/autofuse/autofuse/can_fuse/backend/backend_utils.cpp 无问题(字段拷贝简化为整体赋值 + attrs 覆写,语义等价)
compiler/graph/optimize/autofuse/autofuse/lowering/asc_ir_lowerer.cpp 无问题(新增 CompleteStaticSymbolicShape 逻辑正确)
compiler/graph/optimize/autofuse/autofuse/lowering/asc_lowerer/asc_overrides.h 无问题(SET_EXTEND_CONV2D_ATTRS 宏及 StoreConv2D 分支正确)
compiler/graph/optimize/autofuse/autofuse/lowering/asc_lowerer/loop_api.cpp 无问题(IsStaticShape 改为按需检查输入/输出 desc,逻辑改进)
compiler/graph/optimize/autofuse/autofuse/lowering/asc_lowerer/loop_ops.h 无问题(仅增加 fixed_shift_value 到可读字符串)
compiler/graph/optimize/autofuse/autofuse/lowering/liftings.cpp ⚠️ 1 个 P2 发现(CreateConvSubgraphAttr 移除了 format 统一/shape 转换)
compiler/graph/optimize/autofuse/autofuse/lowering/lowerings.cpp 无问题(跳过未连接输出的空指针防御性检查)
compiler/graph/optimize/autofuse/autofuse/lowering/op_helper/cube.h 无问题(Conv2DAttr 新增字段合理)
compiler/graph/optimize/autofuse/autofuse/lowering/op_lowering_impl/lowering_impl.cpp 无问题(InnerLowerConv2D 重构合理)
compiler/graph/optimize/autofuse/autofuse/utils/autofuse_utils.cpp 无问题(新增 ExtendConv2D 类型到 Cube 类型表)
compiler/graph/optimize/autofuse/autofuse/utils/autofuse_utils.h 无问题(新增 ExtendConv2D 类型常量声明)
compiler/graph/optimize/autofuse/temporary_dependencies/ascir/ascir_ops.h ⚠️ 1 个 P2 发现(GetOffset_x 参数类型错误)
compiler/graph/optimize/symbolic/infer_symbolic_shape/infer/conv2d.cc 无问题(ExtendConv2D 正确纳入 Conv2DV2 分支)

发现统计

  • P0: 0 个
  • P1: 0 个
  • P2: 2 个
  • P3: 0 个

总体风险判断

中等风险。两个 P2 发现均需关注:(1) ascir_ops.h 中 GetOffset_x 的类型错误是一个明确的 bug,虽当前未触发调用但已成为潜伏问题;(2) liftings.cpp 中移除 format/shape 转换逻辑对 Conv2DV2 路径构成潜在回归,需确认与 tiling 侧修改的配套关系。其余 12 个文件的变更为合理的 ExtendConv2D 支持扩展、代码简化和调试日志添加。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
不准确?
CANN-robotCANN-robot成员
8月6日 添加了label:cann-cla/no
此处折叠了308条消息 查看更多
Xxuyafei成员
28 天前 解决了最后一个问题
yangyongqiang
yangyongqiang成员
27 天前 评论:

/approve

likedislike
CANN-robot
CANN-robot成员
27 天前 评论:

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

likedislike
CANN-robotCANN-robot成员
27 天前 添加了label:approved
CANN-robotCANN-robot成员
27 天前 合入了pull request