已合并
fix: 补齐 scalar-like 节点 IR 属性引用的动态 size var 收集 #2125
fix: 补齐 scalar-like 节点 IR 属性引用的动态 size var 收集 #2125
已合并
Jett_Woo创建于 18 天前
Jett_Woo成员
18 天前

Pull Request

描述

inductor mean(dim=1) 分解图中,除数是动态 shape 符号(如 s44),经 index_expr(s44) 进入图后成为只被 IndexExpr.expr 引用、不挂任何轴的"孤儿" size var(ks1)。

根因:Optimizer::AutoScheduler 对每个 grouped graph 执行"清空后重建" size var 表(ClearAllSizeVar + AppendOriginalSizeVar),重建的扫描清单只覆盖"轴的 size"与"Load/Store/Gather/Nddma 的视图表达式",不含 IndexExpr/Arange 这类 scalar-like 节点(输出视图为空)的 IR 属性。孤儿符号在重建后丢失 → tiling data 结构体缺 ks1 字段、设备代码符号替换表缺 ks1 映射 → Tiler::Size 原样输出裸符号 → 设备编译报 use of undeclared identifier 'ks1'(两处:const int64_t scalar_2 = (ks1)/(1); 与 Duplicate(local_blk_tensor_of_scalar_2[0], static_cast<int64_t>((ks1)/(1)), ...))。

修复:AppendOriginalSizeVar 补扫 scalar-like 节点的 IR 属性表达式——IndexExpr.expr 与 Arange.base/step(同一根因的同类隐患一并覆盖)。该函数是公共上游:AutoScheduler 重建(设备 tiling 字段 + 替换表)与 CollectFrontendShapeVars(host tiling 签名)两处调用方同时受益。对既有场景零行为变化:常量表达式收集不到自由符号,登记表内容不变。

变更:autofuse/common/ascgraph_info_complete.cpp +23 行;autofuse/tests/ut/optimize/test_frontend_shape_vars.cpp 新增 UT(忠实复刻 Clear+Append 触发序列)。

变更类型

关联的Issue

#315 (合并后可关闭)

如何测试

  1. 新 UT FrontendShapeVarsTest.CollectsSymbolsReferencedByScalarLikeIrAttrs:构造 ks0(挂轴)/ks1(仅 IndexExpr.expr 引用)/ks2(仅 Arange step 引用),执行 ClearAllSizeVar + AppendOriginalSizeVar,断言三者均被重新收集。修复前失败(仅收到 ks0),修复后通过。
  2. sh build.sh -u --module=autofuse_framework -j 8:optimize_ut 全量 713 用例全绿(含新增);codegen 模块(C++ test_main + Python 267 用例)全绿。
  3. 端到端 codegen 复现:对动态符号版 mean 分解图(IndexExpr.expr=ks1)执行完整 schedule+codegen,生成的 tiling 结构体含 uint32_t ks1 字段、host 签名含 ks1 参数、设备代码为 scalar_2 = (t->ks1)/(1),裸符号 0 处(修复前 2 处)。

核对清单

其他信息

同构问题参照:调度器轴表只收 cube 输出视图引用轴导致的轴缺失(已合入的同类修复),本次为 size var 收集范围的对应缺口。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 Jett_Woo 的贡献)
JJett_Woo成员
18 天前 创建了 pull request,commit 091e1be1
atomgit-bot
atomgit-bot
18 天前 评论:

变更摘要

该 PR 修复 Optimizer::AutoScheduler 重建 size var 表时漏收集 scalar-like 节点 IR 属性动态符号的问题:此前 AppendOriginalSizeVar 的扫描清单只覆盖轴的 size 与 Load/Store/Gather/Nddma 的视图表达式,导致仅被 IndexExpr.expr 引用的"孤儿" size var(如 ks1)在 ClearAllSizeVar + AppendOriginalSizeVar 重建后丢失,进而造成 tiling data 缺字段、设备代码符号替换表缺映射,编译报 use of undeclared identifier。本次在 AscGraphInfoComplete::AppendOriginalSizeVar 中补扫 IndexExpr.expr 与 Arange.base/step 属性表达式,并新增 UT 验证收集结果。

主要改动

  • 新增 InsertIrAttrFreeSymbols 辅助函数:在 autofuse/common/ascgraph_info_complete.cpp 中读取 AscNode 的 ir_attr 中指定属性名对应的 af::Expression,通过 InsertFreeSymbolsIntoVarSet 将其中自由符号插入 SizeVarSet。
  • 扩展 AppendOriginalSizeVar 的节点扫描:遍历 graph.GetAllNodes() 时,对 IndexExpr 节点补扫 expr 属性、对 Arange 节点补扫 base/step 属性;常量表达式收集不到自由符号,对既有场景无行为变化。
  • 新增 UT FrontendShapeVarsTest.CollectsSymbolsReferencedByScalarLikeIrAttrs:在 test_frontend_shape_vars.cpp 中构造挂轴的 ks0、仅被 IndexExpr.expr 引用的 ks1、仅被 Arange.step 引用的 ks2,执行 ClearAllSizeVar + AppendOriginalSizeVar 后断言三者均被重新收集。
likedislike
不准确?
atomgit-bot
atomgit-bot
18 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
18 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
18 天前 评论:

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
repo-cann/graph-autofusion ✅ xchu42, zhang_shengjie, yangyongqiang0606 (3/2) ✅ yangyongqiang0606 (1/1)

💡 Tip:

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

CLA Signature Pass

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

likedislike
CANN-robotCANN-robot成员
18 天前 将niuyuhu,yangyongqiang0606,liyuewei,xchu42,zhang_shengjie,depeng1994,wqtshg_wt,peiyang,shengnan666,XuebinYang,sjtulxh,zhanj,zhujingjing,xuyafei,wangxiaotian995设为评审人
CANN-robotCANN-robot成员
18 天前 将niuyuhu,yangyongqiang0606,liyuewei,xchu42,zhang_shengjie,depeng1994,wqtshg_wt,peiyang,shengnan666,XuebinYang,sjtulxh,zhanj,zhujingjing,xuyafei,wangxiaotian995设为审查人
Jett_Woo成员
18 天前 评论:

compile

likedislike
JJett_Woo成员
18 天前 预合并成功(commit_id: b3c4fdd7ccb7abc667609cebc244c0b7d6be8e73)
CANN-robot
CANN-robot成员
18 天前 评论:
🚀 CI 流水线已启动
📋 执行详情: 点击查看流水线
likedislike
CANN-robotCANN-robot成员
18 天前 添加了label:ci-pipeline-running
CANN-robotCANN-robot成员
18 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
18 天前 添加了label:ci-pipeline-passed
xchu42
xchu42成员
18 天前 评论:

/lgtm

likedislike
zhang_shengjie成员
18 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
18 天前 添加了label:lgtm
JJett_Woo成员
18 天前 修改了pull request 的描述
yangyongqiang
yangyongqiang成员
18 天前 评论:

/approve

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