Pull Request已成功合入, 合并人@CANN-robot
(感谢 hemahema 的贡献)变更摘要
此 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_sizeIR 属性存在并设默认值,跳过未连接的 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 属性索引偏移并注册符号形状推导。


代码审查
审查总结
我已逐一审查了全部 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 |
💬 仅评论


/approve


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


Pull Request
描述
autofuse原有支持Conv2DV2的自动融合,现新增对ExtendConv2D自动融合的支持。
主要变更:
conv2d.cc 增加 IM- PL_OP_INFER_SYMBOL_SHAPE_INNER(ExtendConv2D);pad_mode 在属性下标 7(round_mode 占 6)
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。