| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【PR】:[feat] [autofuse] Migrate autofuse from ge to graph-autofusion. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !301 merge master_af into master 【PR】:[feat] [autofuse] Migrate autofuse from ge to graph-autofusion. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 从 ge 仓解耦autofuse组件,从ge仓的compiler/graph/optimize/autofuse目录迁移至本仓autofuse目录,未来在本仓独立发包和演进,ge 仓的集成方式不变。 迁移内容主要包括自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.上板验证inductor+af单片段流程pass 2.上板验证inductor+af整网流程pass ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!301 | 4 个月前 | |
fix: enforce block dim hardware core budget Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1956 merge fix/block_dim_bug into develop fix: enforce block dim hardware core budget Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 PGO 多 Group/TopN 场景中,生成或恢复的 block_dim 可能超过硬件实际 AIV 数;同时存在以下关联失败链路: - 动态 CORENUM 表达式在 solver 前被提前求值,搜索变量尚未赋值时可能触发除 0(SIGFPE)。 - tiling case、PGO 候选和静态 tiling 入口未完整传播失败,可能继续使用无效候选或未初始化输出。 - PGO 配置文件可直接恢复超预算 block_dim,且失败回退前会污染实时 tiling 的初始状态。 - 多 Group 场景未区分串行与并行 launch 语义,可能错误聚合 core budget。 ## 2. 修改方案 - 将 CORENUM 保留为显式 solver 约束;依赖搜索变量的 CORENUM 表达式不再在 DoTiling 前提前求值。 - GeneralTiling 后校验每个 tiling case 的 block_dim <= corenum_,fused 顶层再次校验聚合结果;超预算返回失败,不做静默截断,避免 tile 漏算。 - 串行 Group 的外层 block_dim 取各 Group 最大值;并行 Group 按求和语义安排 block offset,并限制在当前硬件 probe 范围内。 - Inductor modeled/measured TopN 搜索统一使用 min(limit->aiv_num, g_no_limit_res.aiv_num) 作为可用 AIV 数。 - PGO 配置增加 flag、数据长度、memcpy_s 和 block budget 校验;先读取到临时副本,仅校验成功后写回,失败时使用未污染的实时 tiling 状态重新搜索。 - PGO 搜索只向 batch callback 传递有效候选,并在无新增候选时返回失败。 - AutofuseTilingWithConfig 失败后立即向 C++ tiling/静态生成入口传播;静态生成返回空结果时,两个 Python 编译入口抛出明确异常。 ## 3. 代码修改流程图 mermaid flowchart TD A[获取实际 AIV/UB 资源] --> B[初始化 tiling core budget] B --> C{PGO 配置有效且 block_dim 合法?} C -- 是 --> D[提交 PGO 临时副本] C -- 否 --> E[使用未污染状态实时搜索] E --> F[solver 执行 CORENUM 约束] F --> G[各 tiling case 计算并校验 block_dim] G --> H[串行 Group 取 max / 并行 Group 求和并安排 offset] H --> I{聚合 block_dim 不超过硬件预算?} D --> I I -- 是 --> J[TopN 仅保留有效候选并执行 profile] J --> K[输出选中 tiling 或静态 kernel] I -- 否 --> L[逐层返回失败] L --> M[实时搜索 fallback 或 Python 编译异常] ## 4. 测试用例说明 ### 4.1 UT/静态检查 | 验证项 | 命令/范围 | 结果 | |---|---|---| | ATT 编译 | cmake --build build --target att_ut -j 8 | 通过 | | Codegen 编译 | cmake --build build --target test_main -j 8 | 通过 | | Generator/solver UT | GeneratorUT.* + CORENUM solver 用例 | 70 passed,1 disabled | | Codegen 定向 UT | PGO 配置隔离、失败输出保护、TopN 核预算、静态 tiling | 6 passed | | Python UT | test_ascendc_compile.py + test_asc_codegen_compile_conv2d.py | 96 passed | | 格式与提交检查 | clang-format、ruff、pre-commit、OAT | 通过 | ### 4.2 PGO 实机验证 验证环境:CANN 9.2.0,Ascend950PR_9579,硬件 AIV 数 56;用例位于 /workspace/CANN-DevTools/att_generalization。 选择 ATT-CG-01:6 输入连续 Add + Pow/Mean/Rsqrt RMSNorm,shape 为 (1, 2048, 1024),同时覆盖 Reduce、多个 schedule result/group 与 PGO TopN,是本问题最直接的回归图。 验证前执行: bash cmake --build build --target aihac_codegen -j 8 cmake --build build --target pyautofuse -j 8 运行时通过本地 package path/LD_LIBRARY_PATH 成套加载本分支 pyautofuse.so、libaihac_codegen.so 及 graph/expression 依赖,避免新旧 C++ ABI 混用;实测加载路径为: text /workspace/graph-autofusion/build/autofuse/compiler/py_module/pyautofuse.so /workspace/graph-autofusion/build/autofuse/libaihac_codegen.so 分别执行: bash python -m att_generalization.run_att_cache_guard --topn 1 --warmup 2 --repeat 5 --device npu:0 --att-profiling python -m att_generalization.run_att_cache_guard --topn 10 --warmup 2 --repeat 5 --device npu:0 --att-profiling 结论:Top1/Top10 均完成 PGO host/device 编译、候选 profiling、NPU 执行和精度比对,未出现 SIGFPE、core dump 或超核数 block_dim。 | 配置 | PGO 搜索结果 | 实际编译候选 | 最终 block_dim | 硬件上限 | 最大绝对误差 | 结果 | |---|---:|---:|---:|---:|---:|---| | Top1 | 56 个可行 tiling,block_dim 27–56 | 1 | 53 | 56 | 4.76837158203125e-07 | PASS | | Top10 | 58 个可行 tiling,block_dim 27–56 | 10 | 53 | 56 | 4.76837158203125e-07 | PASS | Top10 实际编译的 10 个候选外层 block_dim 为 53, 52, 53, 54, 54, 52, 49, 52, 49, 46;PGO 搜索结果中 block_dim > 56 的数量为 0。 ## 5. 核对清单 - [x] 代码遵循项目代码风格,并通过 clang-format/ruff - [x] 已完成相关 C++/Python 自测 - [x] 已在 Ascend950PR_9579 完成 PGO Top1/Top10 实机验证 - [x] 已核验全部搜索结果和实际编译候选 block_dim <= 56 - [x] PR 标题使用 fix: 类型标签 - [x] 已阅读并遵守 CONTRIBUTING.md - [x] 未修改对外 API/ABI、CMake 或打包布局 - [ ] 文档更新(本次为内部 bug 修复,无用户接口文档变更) ## 6. 其他信息 - 原问题环境为 Ascend950PR_9589(AIV=64);本次补充验证环境为 Ascend950PR_9579(AIV=56),覆盖了更小 core budget 下的 TopN 行为。 - 首次尝试仅覆盖本地 libaihac_codegen.so、仍使用安装包旧 pyautofuse.so 时,在 graph/expression 对象析构处出现 ABI 混用崩溃;改为成套加载本分支 binding 和依赖后 Top1/Top10 均通过。该现象属于验证部署组合问题,不是 PGO 流程回归。 See merge request: cann/graph-autofusion!1956 | 1 天前 | |
add l Co-authored-by: JaydenChu<zhumin54@huawei.com> Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !370 merge 5_11_1 into master 【PR】: 同步GE仓最新修改到AF仓(4.14上午11时~5.15晚,总计129个PR需要同步) Created-by: JaydenChu Commit-by: JaydenChu;xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 同步GE仓最新修改到AF仓(4.14上午11时~5.15晚,总计129个PR需要同步) 所有涉及PR(包含检查过不需要同步的)从编号#1904(4.14 https://gitcode.com/cann/ge/pull/1904)到#2904(5.15 http://gitcode.com/cann/ge/pull/1904) 每个实际已同步pr都对应此pr的一个commit(部分同步pr为了方便同步合并到了一个commit中) ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [x] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [x] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 业务代码和llt编译通过 2. llt执行通过 3. 全量rdv验证通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!370 | 3 个月前 | |
fix: enforce block dim hardware core budget Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !1956 merge fix/block_dim_bug into develop fix: enforce block dim hardware core budget Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 1. 主要解决的问题 PGO 多 Group/TopN 场景中,生成或恢复的 block_dim 可能超过硬件实际 AIV 数;同时存在以下关联失败链路: - 动态 CORENUM 表达式在 solver 前被提前求值,搜索变量尚未赋值时可能触发除 0(SIGFPE)。 - tiling case、PGO 候选和静态 tiling 入口未完整传播失败,可能继续使用无效候选或未初始化输出。 - PGO 配置文件可直接恢复超预算 block_dim,且失败回退前会污染实时 tiling 的初始状态。 - 多 Group 场景未区分串行与并行 launch 语义,可能错误聚合 core budget。 ## 2. 修改方案 - 将 CORENUM 保留为显式 solver 约束;依赖搜索变量的 CORENUM 表达式不再在 DoTiling 前提前求值。 - GeneralTiling 后校验每个 tiling case 的 block_dim <= corenum_,fused 顶层再次校验聚合结果;超预算返回失败,不做静默截断,避免 tile 漏算。 - 串行 Group 的外层 block_dim 取各 Group 最大值;并行 Group 按求和语义安排 block offset,并限制在当前硬件 probe 范围内。 - Inductor modeled/measured TopN 搜索统一使用 min(limit->aiv_num, g_no_limit_res.aiv_num) 作为可用 AIV 数。 - PGO 配置增加 flag、数据长度、memcpy_s 和 block budget 校验;先读取到临时副本,仅校验成功后写回,失败时使用未污染的实时 tiling 状态重新搜索。 - PGO 搜索只向 batch callback 传递有效候选,并在无新增候选时返回失败。 - AutofuseTilingWithConfig 失败后立即向 C++ tiling/静态生成入口传播;静态生成返回空结果时,两个 Python 编译入口抛出明确异常。 ## 3. 代码修改流程图 mermaid flowchart TD A[获取实际 AIV/UB 资源] --> B[初始化 tiling core budget] B --> C{PGO 配置有效且 block_dim 合法?} C -- 是 --> D[提交 PGO 临时副本] C -- 否 --> E[使用未污染状态实时搜索] E --> F[solver 执行 CORENUM 约束] F --> G[各 tiling case 计算并校验 block_dim] G --> H[串行 Group 取 max / 并行 Group 求和并安排 offset] H --> I{聚合 block_dim 不超过硬件预算?} D --> I I -- 是 --> J[TopN 仅保留有效候选并执行 profile] J --> K[输出选中 tiling 或静态 kernel] I -- 否 --> L[逐层返回失败] L --> M[实时搜索 fallback 或 Python 编译异常] ## 4. 测试用例说明 ### 4.1 UT/静态检查 | 验证项 | 命令/范围 | 结果 | |---|---|---| | ATT 编译 | cmake --build build --target att_ut -j 8 | 通过 | | Codegen 编译 | cmake --build build --target test_main -j 8 | 通过 | | Generator/solver UT | GeneratorUT.* + CORENUM solver 用例 | 70 passed,1 disabled | | Codegen 定向 UT | PGO 配置隔离、失败输出保护、TopN 核预算、静态 tiling | 6 passed | | Python UT | test_ascendc_compile.py + test_asc_codegen_compile_conv2d.py | 96 passed | | 格式与提交检查 | clang-format、ruff、pre-commit、OAT | 通过 | ### 4.2 PGO 实机验证 验证环境:CANN 9.2.0,Ascend950PR_9579,硬件 AIV 数 56;用例位于 /workspace/CANN-DevTools/att_generalization。 选择 ATT-CG-01:6 输入连续 Add + Pow/Mean/Rsqrt RMSNorm,shape 为 (1, 2048, 1024),同时覆盖 Reduce、多个 schedule result/group 与 PGO TopN,是本问题最直接的回归图。 验证前执行: bash cmake --build build --target aihac_codegen -j 8 cmake --build build --target pyautofuse -j 8 运行时通过本地 package path/LD_LIBRARY_PATH 成套加载本分支 pyautofuse.so、libaihac_codegen.so 及 graph/expression 依赖,避免新旧 C++ ABI 混用;实测加载路径为: text /workspace/graph-autofusion/build/autofuse/compiler/py_module/pyautofuse.so /workspace/graph-autofusion/build/autofuse/libaihac_codegen.so 分别执行: bash python -m att_generalization.run_att_cache_guard --topn 1 --warmup 2 --repeat 5 --device npu:0 --att-profiling python -m att_generalization.run_att_cache_guard --topn 10 --warmup 2 --repeat 5 --device npu:0 --att-profiling 结论:Top1/Top10 均完成 PGO host/device 编译、候选 profiling、NPU 执行和精度比对,未出现 SIGFPE、core dump 或超核数 block_dim。 | 配置 | PGO 搜索结果 | 实际编译候选 | 最终 block_dim | 硬件上限 | 最大绝对误差 | 结果 | |---|---:|---:|---:|---:|---:|---| | Top1 | 56 个可行 tiling,block_dim 27–56 | 1 | 53 | 56 | 4.76837158203125e-07 | PASS | | Top10 | 58 个可行 tiling,block_dim 27–56 | 10 | 53 | 56 | 4.76837158203125e-07 | PASS | Top10 实际编译的 10 个候选外层 block_dim 为 53, 52, 53, 54, 54, 52, 49, 52, 49, 46;PGO 搜索结果中 block_dim > 56 的数量为 0。 ## 5. 核对清单 - [x] 代码遵循项目代码风格,并通过 clang-format/ruff - [x] 已完成相关 C++/Python 自测 - [x] 已在 Ascend950PR_9579 完成 PGO Top1/Top10 实机验证 - [x] 已核验全部搜索结果和实际编译候选 block_dim <= 56 - [x] PR 标题使用 fix: 类型标签 - [x] 已阅读并遵守 CONTRIBUTING.md - [x] 未修改对外 API/ABI、CMake 或打包布局 - [ ] 文档更新(本次为内部 bug 修复,无用户接口文档变更) ## 6. 其他信息 - 原问题环境为 Ascend950PR_9589(AIV=64);本次补充验证环境为 Ascend950PR_9579(AIV=56),覆盖了更小 core budget 下的 TopN 行为。 - 首次尝试仅覆盖本地 libaihac_codegen.so、仍使用安装包旧 pyautofuse.so 时,在 graph/expression 对象析构处出现 ABI 混用崩溃;改为成套加载本分支 binding 和依赖后 Top1/Top10 均通过。该现象属于验证部署组合问题,不是 PGO 流程回归。 See merge request: cann/graph-autofusion!1956 | 1 天前 | |
feat: support IndexExpr and Arange autofusion Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1961 merge index-expr-device-validation-pr into develop feat: support IndexExpr and Arange autofusion Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: # Pull Request ## 描述 支持 IndexExpr 和 Arange 自动融合,补充 ASCIR/Python 接口、调度与 codegen 支持,并完善设备验证、UT 和 Backend E2E 用例。Arange 仅保留连续物理布局,数学上的非单位 step 仍受支持。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] Bug 修复 - [x] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [x] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 已完成 IndexExpr/Arange 相关 C++ 定向 UT,12 passed。 2. 已完成 device-validation Python 定向测试,259 passed;Ascend950 fused 精度验证有效 133 个 cell,其中 131 个通过,reduce_mask 的两个既有通用 Reduce codegen 问题仍按实测结果保留。 3. 已完成相关构建目标编译验证,构建并行度限制为 -j 8。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 本 PR 基于远端 develop 分支新建。未包含 docs/、tool/、temp/、验证日志或生成产物。 See merge request: cann/graph-autofusion!1961 | 1 天前 | |
feat: 抽取原子方法以实现并行编译 wrapper、tiling、kernel Co-authored-by: RenJie<renjie57@huawei.com> # message auto-generated for no-merge-commit merge: !1799 merge feat/parallel-compile-adaptive into develop feat: 抽取原子方法以实现并行编译 wrapper、tiling、kernel Created-by: Ren_Jie Commit-by: RenJie Merged-by: cann-robot Description: ## 描述 为支持 TorchAir 通过 Inductor 进程池并行调度 AscendC 编译,将原有完整编译入口拆分为可独立调用的 tiling object、kernel object 和收尾链接阶段,同时保留原有完整编译路径的功能行为。 ## 修改内容 1. 新增 tiling object 编译阶段:只生成并编译 host/tiling 侧 .o,支持源码 split 和 PCH。 2. 新增 kernel object 编译阶段:只生成并编译 device/kernel 侧 .o,不执行链接。 3. 新增独立收尾链接阶段:使用已生成的 tiling/kernel object 链接出最终 kernel .so。 4. 保留原有 all、host、device、JIT、Top-N、PGO、CV fusion、PCH 和静态 shape 重编译路径。 5. 静态 shape 重编译时复用 tiling object,仅重新生成 kernel object 并重新链接。 6. 对收尾链接阶段的 object 输入进行校验,避免缺失或不存在的编译产物进入链接流程。 7. object 路径命名统一为 tiling/kernel 体系:tiling_obj_paths、kernel_obj_path 等。 8. 保留编译阶段耗时打点,覆盖源码生成、tiling/kernel object 编译、链接及静态 shape 重编译。 ## 编译流程 text 普通 JIT: tiling object 编译 ─┐ kernel object 编译 ─┼── 链接 → kernel.so wrapper 编译 ───────┘ 完整 all 路径: tiling 编译 → kernel 编译 → 链接 静态 shape: 首次链接 → static shape 检查 → 必要时重新编译 kernel → 再次链接 ## 兼容性 为 TorchAir PR #3595 提供底层 AscendC 原子编译入口;原有完整编译入口仍保留,旧 TorchAir 可继续使用原有调用方式。建议升级顺序:先升级 graph-autofusion,再升级 TorchAir。 ## 如何测试 1. python -m py_compile 语法检查通过。 2. compile adapter UT:全部通过。 3. AscendC 原子编译相关 UT:全部通过。 4. 相关远程 Hook 检查通过。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我在标题中使用了合适的类型标签(feat:) - [x] 我已阅读贡献指南(CONTRIBUTING.md)并遵守其中规定 ## 其他信息 本 PR 相对最新 develop 仅保留以下两个文件改动: - autofuse/compiler/python/ascendc_compile.py - autofuse/compiler/python/compile_adapter.py --- Authored with an AI assistant. See merge request: cann/graph-autofusion!1799 | 4 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 个月前 | ||
| 1 天前 | ||
| 3 个月前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 4 天前 |