文件最后提交记录最后更新时间
【fix】: fix compare api bug Co-authored-by: 李玥玮<liyuewei1@huawei.com> # message auto-generated for no-merge-commit merge: !579 merge 1_local into develop 【fix】: fix compare api bug Created-by: liyuewei Commit-by: 李玥玮 Merged-by: cann-robot Description: # Pull Request ## 描述 请清晰准确地描述本次 Pull Request 的意图和变更内容。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!5793 天前
【PR】:[feat] Concat融合能力增强 Co-authored-by: xchu42<chuxing@huawei.com> # message auto-generated for no-merge-commit merge: !468 merge concat into develop 【PR】:[feat] Concat融合能力增强 Created-by: xchu42 Commit-by: xchu42 Merged-by: cann-robot Description: # Pull Request ## 描述 1. Concat融合支持将Concat后的Cast算子上提至Concat前,减少Concat的计算量,且增加Cast被VF融合的机会 2. 支持Concat前包含Transpose/Reduce等算子,此时为该输入进行单独分组,且不生成ub cocnat的case 3. Concat增加BF16支持 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4683 天前
【feat】: v35 ReduceMin/ReduceMax/ReduceAll/ReduceAny 三层性能建模实现 Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !448 merge fix_reduce_perf_model into develop 【feat】: v35 ReduceMin/ReduceMax/ReduceAll/ReduceAny 三层性能建模实现 Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、主要解决的问题 #### 1.1 Reduce API 缺少 V2 性能建模入口 原有 V2 API perf 路径主要覆盖 elementwise、data move 和已有 RegBase 向量函数,ReduceMin/ReduceMax/ReduceAny/ReduceAll 缺少能感知 Reduce 语义的建模入口,无法区分: - ARRA Reduce pattern - B64 与普通 dtype 的向量指令成本差异 - reuse source 与 non-reuse source 的拷贝路径差异 - multi-reduce 场景下 copy merge 与 elementwise merge 的尾部成本 #### 1.2 Reduce shape、stride、merge 语义没有统一载体 ATT parser 已经能拿到 input/output repeat、stride、loop axis 等信息,但后续 perf model 缺少结构化参数,只能在 ASCIR adapter 中临时推断。该分支把 Reduce 专用参数沉淀到 codegen::ReduceSpecificParams,让 parser、ASCIR adapter 和 AscendC API perf 共用同一套语义。 #### 1.3 性能公式缺少可读拆解 复杂 Reduce 公式生成后只落在 pipe_res 和 ternary 变量中,review 或定位 tiling case 时难以直接看出每段公式对应的建模分支。该分支新增 PerfBreakdownGroup / PerfBreakdownItem,并把 breakdown 传递到 tiling code annotation。 #### 1.4 测试覆盖不足 新增 Reduce perf model 覆盖面较大,涉及 Common 合轴、ASCIR 注册、RegBase、AscendC API、符号表达式和多 reduce merge,需要补充 UT/ST 覆盖。 ### 二、修改方案 #### 2.1 Common 层新增 Reduce 专用参数模型 autofuse/common/codegen_api_param/codegen_api_param.h/.cpp 新增: - ReducePattern: 区分 AR / RA - ReduceMergeMode: 区分 none、copy、elementwise merge - ReduceMergedDims: 保存归约后的 {first, last} 二维建模形态 - ReduceReuseInfo: 标记输入是否只被当前 reduce 使用 - ReduceSpecificParams: 汇总 reduce_type、pattern、merge_size、merge_times、reuse 等信息 - BuildReduceMergedAxisPlan / BuildReduceMergedShape / BuildReduceSpecificParams: 根据 repeat、stride、dtype size 生成统一 Reduce 建模参数 合轴逻辑以 input/output stride 是否为 0 判断 first/last 归属,并在需要时按 32B 对齐补齐尾轴尺寸。 #### 2.2 Parser 阶段填充 ReduceSpecificParams 新增 autofuse/att/gen_model_info/parser/reduce_specific_params_builder.cpp/.h,并在 AscendGraphParser::ConvertNodeInfos 中调用: - 识别 Max/Min/Mean/Prod/Sum/Any/All/ReduceMax/ReduceMin/ReduceAny/ReduceAll - 根据 output 最后一维 stride 是否为 0 推断 AR / RA - 根据 loop axis 与 input/output stride 关系判断是否需要 multi-reduce - 从 loop axis repeat 生成 merge_times - 通过输入 fanout 判断 reuse.is_reuse_source 同时 ParserSubAxis 保存 axis id,保证后续可通过 attrs.loop_axis_id 找到真实 loop axis。 #### 2.3 ASCIR Reduce adapter 负责上下文转换与注册分流 新增 autofuse/v35/att/api_perf_register/ascir_reduce_api_perf_v2.cpp/.h: - 将 codegen::ReduceSpecificParams 转成 ascendcapi_v2::ReduceApiPerfContext - 对当前 shape 重新构造 merged_dims,避免静态参数和实际 shape 不一致 - 对缺失 merged dims 的场景 fallback 到 last-axis merge - Max/Min/Any/All 在有 reduce params 时走 Reduce perf,无 reduce params 时保持 elementwise fallback - 注册 ReduceMax/ReduceMin/ReduceAny/ReduceAll 的 V2 perf 入口 #### 2.4 AscendC API 层新增 Reduce perf model 新增 autofuse/v35/att/api_perf_register/ascendc_api_perf/reduce_api_perf_v2.cpp/.h,核心入口为: - ReduceMinPerf - ReduceMaxPerf - ReduceAnyPerf - ReduceAllPerf 内部统一走 ReduceApiPerf,按 dtype、pattern、reuse、merge mode 分支: - logical reduce: Any/All - AR-B64AR-normal - RA-B64RA-normal - aligned / unaligned 子路径 - tree reduction 成本 - copy merge 与 elementwise merge 成本 - 256B vector block 与 B64 特殊 repeat 元素数 输出写入 perf.pipe_res[PipeType::AIV_VEC],同时写入 perf.perf_breakdowns 供 tiling annotation 展示。 #### 2.5 RegBase 与 DataMove 路径整理 - ascendc_regbase_perf.cpp/.h 新增 ReduceMinPerf / ReduceMaxPerf,通过 VF 表统一计算 RegBase reduce min/max 成本 - B64 compare 分支抽成 CompareB64SpecificPerf - ascendc_api_perf_v2.cpp 中 DataMove 逻辑迁移到 ascendc_api_perf/data_move_api_perf_v2.cpp/.h #### 2.6 perf breakdown 贯穿生成链路 - autofuse/att/base/perf_breakdown.h: 新增 breakdown 数据结构 - ModelInfo: 保存 perf_breakdowns - PipePerfExpr: 从 API perf 输出收集 breakdown,并随变量替换更新表达式 - ArgsManager: 保存、替换和对外提供 breakdown - TilingCodeGenImpl: 在生成 tiling case annotation 时追加 Reduce perf breakdown ### 三、代码修改流程图 #### 3.1 多文件调用关系图 ```mermaid graph LR A[AscendGraphParser<br/>ConvertNodeInfos] -.-> B[Reduce params builder<br/>FillReduceSpecificParams] B -.-> C[Common params<br/>BuildReduceSpecificParams] C -.-> D[NodeInfo.reduce_specific_params] D -.-> E[ASCIR reduce adapter<br/>BuildReduceContext] E -.-> F[AscendC reduce perf model<br/>ReduceApiPerf] F -.-> G[PerfOutputInfo.pipe_res<br/>AIV_VEC] F -.-> H[PerfBreakdown<br/>semantic items] H -.-> I[PipePerfExpr and ArgsManager<br/>replace symbols] I -.-> J[Tiling code annotations<br/>case explanation] C -.-> K[Common UT<br/>merged shape] F -.-> L[Reduce perf UT<br/>AR RA B64 merge reuse] style B fill:#90EE90,stroke:#006400,stroke-width:2px style C fill:#90EE90,stroke:#006400,stroke-width:2px style E fill:#90EE90,stroke:#006400,stroke-width:2px style F fill:#90EE90,stroke:#006400,stroke-width:2px style H fill:#90EE90,stroke:#006400,stroke-width:2px style D fill:#FFD700,stroke:#B8860B,stroke-width:2px style J fill:#FFD700,stroke:#B8860B,stroke-width:2px ``` #### 3.2 ReduceApiPerf 分支流程图 ```mermaid flowchart TD S([ReduceApiPerf]) -.-> V[Validate context and dtype] V -.-> L{Logical reduce} L -.-> LG[Build logical reduce cost] L -.-> P{Reduce pattern} P -.-> ARD{AR B64 dtype} P -.-> RAD{RA B64 dtype} ARD -.-> ARB[Build AR B64 cost] ARD -.-> ARN[Build AR normal cost] RAD -.-> RAB[Build RA B64 tree cost] RAD -.-> RAN[Build RA normal tree cost] LG -.-> M{Merge mode} ARB -.-> M ARN -.-> M RAB -.-> M RAN -.-> M M -.-> O[Write AIV_VEC result] M -.-> CP[Add copy merge cost] M -.-> EW[Add elementwise merge cost] CP -.-> B[Append perf breakdown] EW -.-> B O -.-> B B -.-> R([Return ge.SUCCESS]) style S fill:#90EE90,stroke:#006400,stroke-width:2px style ARB fill:#FFD700,stroke:#B8860B,stroke-width:2px style ARN fill:#FFD700,stroke:#B8860B,stroke-width:2px style RAB fill:#FFD700,stroke:#B8860B,stroke-width:2px style RAN fill:#FFD700,stroke:#B8860B,stroke-width:2px style CP fill:#FF69B4,stroke:#C71585,stroke-width:2px style EW fill:#FF69B4,stroke:#C71585,stroke-width:2px ``` ## 变更类型 请选择本次引入的变更类型: - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 暂无。 ## 如何测试 ### 一 测试用例说明 #### 1.1 单元测试 重点覆盖: - CodegenApiParamReduceTest.*: BuildReduceSpecificParams、copy mode、invalid input、rank mismatch - UTestReduceMinMaxApiPerfV2.*: RegBase reduce min/max、AR/RA、B64、symbolic dim、reuse、multi-reduce merge、ASCIR 注册与 fallback - UTestAscirPerfV2.*: 既有 ASCIR V2 perf 路径回归 推荐命令: ```bash source ~/Ascend/cann/bin/setenv.bash bash scripts/test/run_autofuse_test.sh --ut -j10 ``` 已有构建产物时可定向执行: ```bash build/autofuse/tests/ut/att/att_ut --gtest_filter=UTestReduceMinMaxApiPerfV2.*:CodegenApiParamReduceTest.* ``` #### 1.2 系统测试 重点覆盖: - TestAscendcApiPerf.TestReduceAnyPerf - TestAscendcApiPerf.TestReduceMaxPerf - TestAscendcApiPerf.TestReduceAllPerf - TestAscendcApiPerf.TestReduceMinPerf 这些 ST 用例补齐 output stride,确保 Reduce pattern 可被 parser 正确识别。 推荐命令: ```bash source ~/Ascend/cann/bin/setenv.bash bash scripts/test/run_autofuse_test.sh --st -j10 ``` #### 1.3 编译验证 ```bash source ~/Ascend/cann/bin/setenv.bash cd build make aihac_codegen -j10 ``` ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 See merge request: cann/graph-autofusion!4486 天前
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!37015 天前
【PR】: [fix] [autofuse] usability improvement of llt. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !458 merge develop_usability into develop 【PR】: [fix] [autofuse] usability improvement of llt. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 提升gaf仓llt的易用性。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. ci流水线通过 2. 易用性看板复测通过 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4588 天前
【feat】: ReduceSum/ReduceMean/ReduceProd支持ATT基于AscendC的源码建模 Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !578 merge fix_reduce_perf_model_reduce_sum_mean_prod into develop 【feat】: ReduceSum/ReduceMean/ReduceProd支持ATT基于AscendC的源码建模 Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、主要解决的问题 #### 1.1 ReduceSum/ReduceMean/ReduceProd 未接入 Reduce 专用建模 原 v35 Reduce API 建模链路只覆盖 ReduceMin/ReduceMax/ReduceAny/ReduceAllSum/Mean/Prod 只有普通 elementwise 入口或近似建模,带 reduce_specific_params 的 ASCIR reduce 节点没有进入 ReduceApiPerf 分支树,因此无法复用 AR/RA、B64、reuse-source、multi-reduce merge 等 Reduce 专用建模逻辑。 #### 1.2 ReduceMean 需要体现 Codegen 的后处理语义 Codegen 中 Mean 语义不是单独的 Reduce 指令,而是 ReduceSum 后追加 Muls。因此性能模型需要按 ReduceSum + Muls 组合建模,并把后处理开销加入 AIV_VEC。 #### 1.3 注册链路不完整 仅注册 REGISTER_EVAL_FUNC_TAG 不足以支持 ApiPerfFactory::Create(),还需要补齐 ApiPerfRegisterV2。原 Mean/Prod/Sum 的 factory 注册存在复用 tag 或字符串拼接错误风险,需要拆分 reduce op 与 alias op 的注册。 ### 二、修改方案 #### 2.1 AscendC Reduce API 层新增 Sum/Prod/Mean 在 reduce_api_perf_v2 中扩展 ReduceLogicalOp: - kSum - kProd 新增 IsMinMaxReduce,让 B64 特化 compare 逻辑只用于 Min/MaxSum/Prod 在 B64 dtype 下走通用 VF group cost,避免错误复用 Eq/Lt/Gt/Select/Duplicate 的 Min/Max 比较代价。 新增建模入口: - ReduceSumPerf: 使用 AddPerfkVcaddkAdd - ReduceProdPerf: 使用 MulPerfkMulkMul - ReduceMeanPerf: 先调用 ReduceSumPerf,再按输出侧有效维度追加 MeanPerfMuls 开销 #### 2.2 ASCIR Reduce API 层新增 reduce 与 fallback 分发 在 ascir_reduce_api_perf_v2 中新增: - ReduceSumApi - ReduceMeanApi - ReduceProdApi - SumApi - MeanApi - ProdApi Sum/Mean/Prod alias 入口按 HasReduceSpecificParams(node) 分发: - 有 reduce_specific_params: 走 Reduce 专用建模 - 无 reduce_specific_params: 回退 elementwise 建模 新增 elementwise fallback: - ElementwiseSumApi -> ascendcperf_v2::SumPerf - ElementwiseMeanApi -> ascendcperf_v2::MeanPerf - ElementwiseProdApi -> ascendcperf_v2::MulPerf #### 2.3 注册 Reduce op 与 alias op 在 ascir_api_perf_v2.cpp 中补齐: - kReduceSum -> ReduceSumApi - kReduceMean -> ReduceMeanApi - kReduceProd -> ReduceProdApi - kSum -> SumApi - kMean -> MeanApi - kProd -> ProdApi 同时修正 factory 注册: - reduce 专用注册使用 kReduceSum/kReduceMean/kReduceProd - alias 注册使用 kSum/kMean/kProd ### 三、代码修改流程图 #### 3.1 多文件调用关系图 ```mermaid graph TD A[ascir_api_perf_v2.cpp<br/>注册 tag 和 factory] B[ascir_reduce_api_perf_v2.cpp<br/>ASCIR reduce 分发] C[reduce_api_perf_v2.cpp<br/>AscendC Reduce 建模] D[reduce_api_perf_v2.h<br/>声明 Sum Mean Prod] E[ascir_reduce_api_perf_v2.h<br/>声明 ASCIR API] F[test_reduce_min_max_api_perf_v2.cpp<br/>UT 覆盖] A -->|kReduceSum kReduceMean kReduceProd| B A -->|kSum kMean kProd alias| B B -->|BuildReduceContext| C B -->|无 reduce params fallback| G[Elementwise Sum Mean Prod] C -->|ReduceSumPerf| H[ReduceApiPerf<br/>AR RA B64 merge 分支] C -->|ReduceProdPerf| H C -->|ReduceMeanPerf| I[ReduceSumPerf + Muls] D --> C E --> B F -->|验证 AscendC API| C F -->|验证 ASCIR 注册和 alias| A style A fill:#FFD700,stroke:#B8860B,stroke-width:2px style B fill:#90EE90,stroke:#006400,stroke-width:2px style C fill:#90EE90,stroke:#006400,stroke-width:2px style F fill:#90EE90,stroke:#006400,stroke-width:2px style I fill:#FF69B4,stroke:#C71585,stroke-width:2px ``` #### 3.2 Reduce API 分支流程图 ```mermaid flowchart TD Start([ASCIR Sum Mean Prod]) --> HasParams{node 有 reduce_specific_params} HasParams -->|否| Elementwise[Elementwise fallback<br/>SumPerf MeanPerf MulPerf] HasParams -->|是| Context[BuildReduceContext<br/>重建 merged dims pattern merge reuse] Context --> Type{API 类型} Type -->|ReduceSum| Sum[ReduceSumPerf<br/>AddPerf + Vcadd] Type -->|ReduceProd| Prod[ReduceProdPerf<br/>MulPerf + Mul] Type -->|ReduceMean| Mean[ReduceMeanPerf] Mean --> MeanStep1[ReduceSumPerf] MeanStep1 --> MeanStep2[追加 MeanPerf Muls 开销] Sum --> ReduceCore[ReduceApiPerf] Prod --> ReduceCore MeanStep2 --> ReduceCoreDone[更新 AIV_VEC 和 breakdown] ReduceCore --> Pattern{Reduce pattern 和 dtype} Pattern -->|AR B64| ARB64[BuildArB64Cost] Pattern -->|AR normal| ARNormal[BuildArNormalCost] Pattern -->|RA B64| RAB64[BuildRaB64Cost] Pattern -->|RA normal| RANormal[BuildRaNormalCost] ARB64 --> Merge{multi reduce merge} ARNormal --> Merge RAB64 --> Merge RANormal --> Merge Merge -->|开启| MergeCost[BuildMergeCost] Merge -->|关闭| Total[reduce_total_perf] MergeCost --> Total style Sum fill:#90EE90,stroke:#006400,stroke-width:2px style Prod fill:#90EE90,stroke:#006400,stroke-width:2px style Mean fill:#90EE90,stroke:#006400,stroke-width:2px style MeanStep2 fill:#FF69B4,stroke:#C71585,stroke-width:2px ``` ## 变更类型 - [ ] Bug 修复 - [x] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 修改文件 | 文件 | 变更 | 说明 | |---|---:|---| | autofuse/v35/att/api_perf_register/ascendc_api_perf/reduce_api_perf_v2.cpp | +37/-1 | 新增 ReduceSum/Mean/Prod 核心建模 | | autofuse/v35/att/api_perf_register/ascendc_api_perf/reduce_api_perf_v2.h | +3/-0 | 暴露 ReduceSum/Mean/Prod 接口 | | autofuse/v35/att/api_perf_register/ascir_reduce_api_perf_v2.cpp | +72/-0 | 新增 ASCIR reduce/fallback 分发 | | autofuse/v35/att/api_perf_register/ascir_reduce_api_perf_v2.h | +15/-0 | 暴露 ASCIR Sum/Mean/Prod API | | autofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp | +17/-7 | 注册 Reduce op 与 alias op | | autofuse/tests/v35/ut/att/gen_model_info/api_perf_register/test_reduce_min_max_api_perf_v2.cpp | +74/-0 | 新增 UT 覆盖建模和注册 | ## 如何测试 ### 一 测试用例说明 #### 1.1 单元测试 新增 AscendCApiReduceSumProdMeanUseReduceBranches: - 覆盖 ReduceSumPerf 的 AR/RA 分支差异 - 覆盖 ReduceProdPerfReduceSumPerf 公式差异 - 覆盖 ReduceMeanPerf = ReduceSumPerf + MeanPerf(Muls) 的 delta 校验 新增 AscirRegistersReduceSumMeanProdOpsAndAliases: - 校验 kReduceSum/kReduceMean/kReduceProd factory 可创建 - 校验 kSum/kMean/kProd alias 可创建 - 校验 alias 在有 reduce_specific_params 时与 reduce 专用入口公式一致 #### 1.2 系统测试 本 commit 对 ASCIR/AscendC API perf 建模和注册链路生效,不新增独立 ST 用例。 ### 二 验证命令 ```bash bash scripts/test/run_autofuse_test.sh --ascend_install_path=/home/zhangshengjie/Ascend/latest --ascend_3rd_lib_path=/home/zhangshengjie/third_party -u -m att ``` 验证结果: ```text 927 tests from 53 test suites ran. PASSED 927 tests. att_ut test successfully! ``` ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于 commit message 的格式、无效 commit 的合并等 ## 其他信息 ### 注意事项 - ReduceMeanPerf 当前按 Codegen 语义建模为 ReduceSum + Muls。 - B64 下的 Sum/Prod 不走 Min/Max 专用 compare 建模。 - Sum/Mean/Prod alias 保留无 reduce 参数时的 elementwise fallback,避免影响原 elementwise API 行为。 - 仓库内未找到 scripts/validate_mermaid.py,Mermaid 图按 skill 规则手工避免嵌套方括号和特殊字符。 See merge request: cann/graph-autofusion!5783 天前
【feat】: v35 ReduceMin/ReduceMax/ReduceAll/ReduceAny 三层性能建模实现 Co-authored-by: zhang_shengjie<804425610@qq.com> # message auto-generated for no-merge-commit merge: !448 merge fix_reduce_perf_model into develop 【feat】: v35 ReduceMin/ReduceMax/ReduceAll/ReduceAny 三层性能建模实现 Created-by: zhang_shengjie Commit-by: zhang_shengjie Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、主要解决的问题 #### 1.1 Reduce API 缺少 V2 性能建模入口 原有 V2 API perf 路径主要覆盖 elementwise、data move 和已有 RegBase 向量函数,ReduceMin/ReduceMax/ReduceAny/ReduceAll 缺少能感知 Reduce 语义的建模入口,无法区分: - ARRA Reduce pattern - B64 与普通 dtype 的向量指令成本差异 - reuse source 与 non-reuse source 的拷贝路径差异 - multi-reduce 场景下 copy merge 与 elementwise merge 的尾部成本 #### 1.2 Reduce shape、stride、merge 语义没有统一载体 ATT parser 已经能拿到 input/output repeat、stride、loop axis 等信息,但后续 perf model 缺少结构化参数,只能在 ASCIR adapter 中临时推断。该分支把 Reduce 专用参数沉淀到 codegen::ReduceSpecificParams,让 parser、ASCIR adapter 和 AscendC API perf 共用同一套语义。 #### 1.3 性能公式缺少可读拆解 复杂 Reduce 公式生成后只落在 pipe_res 和 ternary 变量中,review 或定位 tiling case 时难以直接看出每段公式对应的建模分支。该分支新增 PerfBreakdownGroup / PerfBreakdownItem,并把 breakdown 传递到 tiling code annotation。 #### 1.4 测试覆盖不足 新增 Reduce perf model 覆盖面较大,涉及 Common 合轴、ASCIR 注册、RegBase、AscendC API、符号表达式和多 reduce merge,需要补充 UT/ST 覆盖。 ### 二、修改方案 #### 2.1 Common 层新增 Reduce 专用参数模型 autofuse/common/codegen_api_param/codegen_api_param.h/.cpp 新增: - ReducePattern: 区分 AR / RA - ReduceMergeMode: 区分 none、copy、elementwise merge - ReduceMergedDims: 保存归约后的 {first, last} 二维建模形态 - ReduceReuseInfo: 标记输入是否只被当前 reduce 使用 - ReduceSpecificParams: 汇总 reduce_type、pattern、merge_size、merge_times、reuse 等信息 - BuildReduceMergedAxisPlan / BuildReduceMergedShape / BuildReduceSpecificParams: 根据 repeat、stride、dtype size 生成统一 Reduce 建模参数 合轴逻辑以 input/output stride 是否为 0 判断 first/last 归属,并在需要时按 32B 对齐补齐尾轴尺寸。 #### 2.2 Parser 阶段填充 ReduceSpecificParams 新增 autofuse/att/gen_model_info/parser/reduce_specific_params_builder.cpp/.h,并在 AscendGraphParser::ConvertNodeInfos 中调用: - 识别 Max/Min/Mean/Prod/Sum/Any/All/ReduceMax/ReduceMin/ReduceAny/ReduceAll - 根据 output 最后一维 stride 是否为 0 推断 AR / RA - 根据 loop axis 与 input/output stride 关系判断是否需要 multi-reduce - 从 loop axis repeat 生成 merge_times - 通过输入 fanout 判断 reuse.is_reuse_source 同时 ParserSubAxis 保存 axis id,保证后续可通过 attrs.loop_axis_id 找到真实 loop axis。 #### 2.3 ASCIR Reduce adapter 负责上下文转换与注册分流 新增 autofuse/v35/att/api_perf_register/ascir_reduce_api_perf_v2.cpp/.h: - 将 codegen::ReduceSpecificParams 转成 ascendcapi_v2::ReduceApiPerfContext - 对当前 shape 重新构造 merged_dims,避免静态参数和实际 shape 不一致 - 对缺失 merged dims 的场景 fallback 到 last-axis merge - Max/Min/Any/All 在有 reduce params 时走 Reduce perf,无 reduce params 时保持 elementwise fallback - 注册 ReduceMax/ReduceMin/ReduceAny/ReduceAll 的 V2 perf 入口 #### 2.4 AscendC API 层新增 Reduce perf model 新增 autofuse/v35/att/api_perf_register/ascendc_api_perf/reduce_api_perf_v2.cpp/.h,核心入口为: - ReduceMinPerf - ReduceMaxPerf - ReduceAnyPerf - ReduceAllPerf 内部统一走 ReduceApiPerf,按 dtype、pattern、reuse、merge mode 分支: - logical reduce: Any/All - AR-B64AR-normal - RA-B64RA-normal - aligned / unaligned 子路径 - tree reduction 成本 - copy merge 与 elementwise merge 成本 - 256B vector block 与 B64 特殊 repeat 元素数 输出写入 perf.pipe_res[PipeType::AIV_VEC],同时写入 perf.perf_breakdowns 供 tiling annotation 展示。 #### 2.5 RegBase 与 DataMove 路径整理 - ascendc_regbase_perf.cpp/.h 新增 ReduceMinPerf / ReduceMaxPerf,通过 VF 表统一计算 RegBase reduce min/max 成本 - B64 compare 分支抽成 CompareB64SpecificPerf - ascendc_api_perf_v2.cpp 中 DataMove 逻辑迁移到 ascendc_api_perf/data_move_api_perf_v2.cpp/.h #### 2.6 perf breakdown 贯穿生成链路 - autofuse/att/base/perf_breakdown.h: 新增 breakdown 数据结构 - ModelInfo: 保存 perf_breakdowns - PipePerfExpr: 从 API perf 输出收集 breakdown,并随变量替换更新表达式 - ArgsManager: 保存、替换和对外提供 breakdown - TilingCodeGenImpl: 在生成 tiling case annotation 时追加 Reduce perf breakdown ### 三、代码修改流程图 #### 3.1 多文件调用关系图 ```mermaid graph LR A[AscendGraphParser<br/>ConvertNodeInfos] -.-> B[Reduce params builder<br/>FillReduceSpecificParams] B -.-> C[Common params<br/>BuildReduceSpecificParams] C -.-> D[NodeInfo.reduce_specific_params] D -.-> E[ASCIR reduce adapter<br/>BuildReduceContext] E -.-> F[AscendC reduce perf model<br/>ReduceApiPerf] F -.-> G[PerfOutputInfo.pipe_res<br/>AIV_VEC] F -.-> H[PerfBreakdown<br/>semantic items] H -.-> I[PipePerfExpr and ArgsManager<br/>replace symbols] I -.-> J[Tiling code annotations<br/>case explanation] C -.-> K[Common UT<br/>merged shape] F -.-> L[Reduce perf UT<br/>AR RA B64 merge reuse] style B fill:#90EE90,stroke:#006400,stroke-width:2px style C fill:#90EE90,stroke:#006400,stroke-width:2px style E fill:#90EE90,stroke:#006400,stroke-width:2px style F fill:#90EE90,stroke:#006400,stroke-width:2px style H fill:#90EE90,stroke:#006400,stroke-width:2px style D fill:#FFD700,stroke:#B8860B,stroke-width:2px style J fill:#FFD700,stroke:#B8860B,stroke-width:2px ``` #### 3.2 ReduceApiPerf 分支流程图 ```mermaid flowchart TD S([ReduceApiPerf]) -.-> V[Validate context and dtype] V -.-> L{Logical reduce} L -.-> LG[Build logical reduce cost] L -.-> P{Reduce pattern} P -.-> ARD{AR B64 dtype} P -.-> RAD{RA B64 dtype} ARD -.-> ARB[Build AR B64 cost] ARD -.-> ARN[Build AR normal cost] RAD -.-> RAB[Build RA B64 tree cost] RAD -.-> RAN[Build RA normal tree cost] LG -.-> M{Merge mode} ARB -.-> M ARN -.-> M RAB -.-> M RAN -.-> M M -.-> O[Write AIV_VEC result] M -.-> CP[Add copy merge cost] M -.-> EW[Add elementwise merge cost] CP -.-> B[Append perf breakdown] EW -.-> B O -.-> B B -.-> R([Return ge.SUCCESS]) style S fill:#90EE90,stroke:#006400,stroke-width:2px style ARB fill:#FFD700,stroke:#B8860B,stroke-width:2px style ARN fill:#FFD700,stroke:#B8860B,stroke-width:2px style RAB fill:#FFD700,stroke:#B8860B,stroke-width:2px style RAN fill:#FFD700,stroke:#B8860B,stroke-width:2px style CP fill:#FF69B4,stroke:#C71585,stroke-width:2px style EW fill:#FF69B4,stroke:#C71585,stroke-width:2px ``` ## 变更类型 请选择本次引入的变更类型: - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 暂无。 ## 如何测试 ### 一 测试用例说明 #### 1.1 单元测试 重点覆盖: - CodegenApiParamReduceTest.*: BuildReduceSpecificParams、copy mode、invalid input、rank mismatch - UTestReduceMinMaxApiPerfV2.*: RegBase reduce min/max、AR/RA、B64、symbolic dim、reuse、multi-reduce merge、ASCIR 注册与 fallback - UTestAscirPerfV2.*: 既有 ASCIR V2 perf 路径回归 推荐命令: ```bash source ~/Ascend/cann/bin/setenv.bash bash scripts/test/run_autofuse_test.sh --ut -j10 ``` 已有构建产物时可定向执行: ```bash build/autofuse/tests/ut/att/att_ut --gtest_filter=UTestReduceMinMaxApiPerfV2.*:CodegenApiParamReduceTest.* ``` #### 1.2 系统测试 重点覆盖: - TestAscendcApiPerf.TestReduceAnyPerf - TestAscendcApiPerf.TestReduceMaxPerf - TestAscendcApiPerf.TestReduceAllPerf - TestAscendcApiPerf.TestReduceMinPerf 这些 ST 用例补齐 output stride,确保 Reduce pattern 可被 parser 正确识别。 推荐命令: ```bash source ~/Ascend/cann/bin/setenv.bash bash scripts/test/run_autofuse_test.sh --st -j10 ``` #### 1.3 编译验证 ```bash source ~/Ascend/cann/bin/setenv.bash cd build make aihac_codegen -j10 ``` ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 See merge request: cann/graph-autofusion!4486 天前
【fix】: 修复PyDict_SetItemString导致的引用计数泄露等问题 Co-authored-by: qqqZZZ_3<liuqizhe1@huawei.com> # message auto-generated for no-merge-commit merge: !528 merge develop into develop 【fix】: 修复PyDict_SetItemString导致的引用计数泄露等问题 Created-by: qqqZZZ_3 Commit-by: qqqZZZ_3 Merged-by: cann-robot Description: # Pull Request ## 描述 修复PyDict_SetItemString导致的引用计数泄露、缺少数据类型校验等问题 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> https://gitcode.com/cann/graph-autofusion/issues/54 https://gitcode.com/cann/graph-autofusion/issues/55 https://gitcode.com/cann/graph-autofusion/issues/56 https://gitcode.com/cann/graph-autofusion/issues/57 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!5284 天前
docs: 文档国际化改造,支持中英文双语 11 天前
【fix】: 修复autofuse不dump pbtxt文件 Co-authored-by: wang-yan-male<wangyan220@huawei.com> # message auto-generated for no-merge-commit merge: !444 merge develop into develop 【fix】: 修复autofuse不dump pbtxt文件 Created-by: WangYanMale Commit-by: wang-yan-male Merged-by: cann-robot Description: # Pull Request ## 描述 修复autofuse不dump pbtxt文件。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue NA ## 如何测试 开启AUTOFUSE_DFX_FLAGS环境变量,查看dump文件目录下是否dump pbtxt文件 ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 NA See merge request: cann/graph-autofusion!4448 天前
fix:离线编译无法获取核数问题修复 Co-authored-by: gcw_V3YyYBt1<gaoxin32@huawei.com> # message auto-generated for no-merge-commit merge: !481 merge develop into develop fix:离线编译无法获取核数问题修复 Created-by: gcw_V3YyYBt1 Commit-by: gcw_V3YyYBt1 Merged-by: cann-robot Description: # Pull Request ## 描述 ### 修改概述 本次修改扩展了 set_platform 函数的参数,从原来的单参数 (platform_name) 改为三参数 (platform_name, vector_core_num, ub_size) ,并更新了所有相关调用位置。 ### 主要改动 1. C++ 层 :新增 SetPlatformInfo 函数,用于直接设置平台的参数 2. Python/C++ 绑定层 : UtilsSetPlatform 改为接收三个参数 3. Python 调用层 :使用 get_soc_spec获取 ub_size,与vector_core_num 一起传入;测试用例使用默认测试值 (1, 1024) 4. 类型安全 :在 Python 调用时显式使用 int() 转换确保参数类型正确 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.测试inductor场景 2.测试TF离线编译场景 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4816 天前
【fix】: 后端optimize前删除悬空节点 Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !572 merge 5_28_1 into develop 【fix】: 后端optimize前删除悬空节点 Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: # Pull Request ## 描述 输入到后端的图中如果有悬空节点,会导致在codegen流程中出现coredump,因此需要在optimize流程之前去除所有悬空节点(同时保留输入输出节点) 实例: - 存在悬空节点 ![image.png](https://raw.gitcode.com/user-images/assets/8005834/3e50a245-892a-4601-9356-93bd28ec6a72/image.png 'image.png') - 悬空节点处理后 ![image.png](https://raw.gitcode.com/user-images/assets/8005834/95f00778-fd55-4793-8ed8-dfedc28b1719/image.png 'image.png') ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 编译验证 执行,编译通过 bash build.sh --pkg 2. 单元测试 分别执行(在华为云开发者空间中),执行通过 ./scripts/test/run_autofuse_test.sh -u -c --ascend_install_path=/home/developer/Ascend/ascend-toolkit/latest ./scripts/test/run_autofuse_test.sh -s -c --ascend_install_path=/home/developer/Ascend/ascend-toolkit/latest 3. 功能测试 用例tf_af_torch_tc_af_tf1_zj_2_net_0285执行通过,没有功能和精度问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!5721 天前
【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!3011 个月前
【fix】: 后端optimize前删除悬空节点 Co-authored-by: JaydenChu<zhumin54@huawei.com> # message auto-generated for no-merge-commit merge: !572 merge 5_28_1 into develop 【fix】: 后端optimize前删除悬空节点 Created-by: JaydenChu Commit-by: JaydenChu Merged-by: cann-robot Description: # Pull Request ## 描述 输入到后端的图中如果有悬空节点,会导致在codegen流程中出现coredump,因此需要在optimize流程之前去除所有悬空节点(同时保留输入输出节点) 实例: - 存在悬空节点 ![image.png](https://raw.gitcode.com/user-images/assets/8005834/3e50a245-892a-4601-9356-93bd28ec6a72/image.png 'image.png') - 悬空节点处理后 ![image.png](https://raw.gitcode.com/user-images/assets/8005834/95f00778-fd55-4793-8ed8-dfedc28b1719/image.png 'image.png') ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 编译验证 执行,编译通过 bash build.sh --pkg 2. 单元测试 分别执行(在华为云开发者空间中),执行通过 ./scripts/test/run_autofuse_test.sh -u -c --ascend_install_path=/home/developer/Ascend/ascend-toolkit/latest ./scripts/test/run_autofuse_test.sh -s -c --ascend_install_path=/home/developer/Ascend/ascend-toolkit/latest 3. 功能测试 用例tf_af_torch_tc_af_tf1_zj_2_net_0285执行通过,没有功能和精度问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!5721 天前
【PR】:[feat] Concat融合能力增强 Co-authored-by: xchu42<chuxing@huawei.com> # message auto-generated for no-merge-commit merge: !468 merge concat into develop 【PR】:[feat] Concat融合能力增强 Created-by: xchu42 Commit-by: xchu42 Merged-by: cann-robot Description: # Pull Request ## 描述 1. Concat融合支持将Concat后的Cast算子上提至Concat前,减少Concat的计算量,且增加Cast被VF融合的机会 2. 支持Concat前包含Transpose/Reduce等算子,此时为该输入进行单独分组,且不生成ub cocnat的case 3. Concat增加BF16支持 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!4683 天前
【PR】: [feat] [autofuse] move headers from include to pkg_inc. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !553 merge develop_pkg_inc into develop 【PR】: [feat] [autofuse] move headers from include to pkg_inc. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 将开放到cann包中的头文件从include目录切换到pkg_inc目录,暂时作为包间接口,不对外开放。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. CI流水线pass 2. RDVpass ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!5533 天前
docs: 文档国际化改造,支持中英文双语 11 天前
docs: 文档国际化改造,支持中英文双语 11 天前
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!37015 天前
README.md

Autofuse

简介

AutoFuse是基于Ascend C的自动融合框架,支持自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性;在算法网络中,由于存在大量的Vector计算,各个Vector计算之间会产生大量的内存搬运,导致Memory Bound问题。而AutoFuse通过自动将多个算子融合为一个算子,减少网络中的算子数量和内存搬运,从而缓解了Memory Bound问题,释放昇腾算力,提升模型的执行性能。

详细介绍,请参考《Autofuse自动融合

Autofuse 目录结构

autofuse/
├── ascendc                # ascendc api 定义
├── ascir                  # 算子注册 ascir
├── att                    # 自动 tiling 生成 模块
├── autofuse               # config 配置
├── codegen                # kernel 代码生成 模块
├── common                 # 通用工具方法
├── compiler               # 对外API 接口
├── examples               # 示例脚本,演示典型用法
├── graph_metadef          # 基本图接口
├── inc                    # 供 GE 调用接口
├── optimize               # 调度切分 模块
├── scripts                # 脚本路径
├── v35                    # 昇腾950 芯片相关优化
├── CMakeLists.txt         # CMake 配置文件
├── blacklist.txt          # 工程配置文件
├── README.md

构建与安装

参考执行构建

上板验证指导

用户如果想在昇腾设备上体验Autofuse 的功能与性能,可以先参考快速安装准备环境。无论是没有昇腾设备的开发者,还是已有昇腾设备的开发者,都可以快速搭建好环境。在此基础上,按照上一步构建与安装,增量安装了graph-autofusion仓编译生成的cann包。

此处指导如何搭建 Pytorch 环境,创建脚本,跑通 Inductor + Autofuse场景,并可视化生成的自动融合算子,以及观察最后的kernel性能。

当前自动融合支持elementwise类型+element类型,element类型+broadcast类型,element类型+reduce类型算子的融合。更多融合场景的支持(concat,gather等等)逐步开放中。

安装依赖

安装 torch_npu

pip3 install numpy
pip3 install pyyaml
pip3 install setuptools
pip3 install torch_npu==2.8  # 通过pip 安装 torch_npu 时,会自动安装依赖的torch 版本

安装 inductor-npu-ext (Autofuse 在 Inductor 的使能框架)

git clone https://gitcode.com/Ascend/torchair.git
cd torchair/experimental/_inductor_npu_ext/
pip3 install -e ./python/

其他环境依赖

CMake >= 3.16.0
GCC >= 7.3.0

在 openEuler 系统上,您可以通过以下命令安装:

sudo yum install cmake gcc

在 Ubuntu 系统上,您可以通过以下命令安装:

sudo apt-get install cmake gcc

sample 用例

autofuse 提供了丰富的 sample 用例,可以参考Autofuse样例

设置环境变量

执行用例前,需要设置如下环境变量,设置运行NPU设备。

 # 用户自己的 driver 包安装路径
 source /usr/local/Ascend/driver/bin/setenv.sh
 # 用户自己的 CANN 包安装路径
 source /usr/local/Ascend/ascend-toolkit/set_env.sh
 # 假设跑在 0卡,和脚本保持一致
 export ASCEND_DEVICE_ID=0

执行用例

假设用例名为 test.py,直接执行: python3 test.py

更多调测相关环境变量

TORCH_COMPILE_DEBUG

作用: torch原生环境变量,启用详细调试日志,以及编译中间产物保存等。

使用方法:

export TORCH_COMPILE_DEBUG=1

注意: 多次执行相同脚本,会因为缓存存在而跳过编译,可以配合 TORCHINDUCTOR_FORCE_DISABLE_CACHES 使用,强制每次执行都重新编译。

TORCHINDUCTOR_FORCE_DISABLE_CACHES

作用: torch原生环境变量,禁用 Inductor 缓存,每次执行都会重新编译。

使用方法:

export TORCHINDUCTOR_FORCE_DISABLE_CACHES=1

注意: 会显著增加图启动耗时,实际部署时请勿使用该环境变量。

可选:ASCEND_LAUNCH_BLOCKING

作用: torch_npu原生环境变量,启用 Ascend 内核同步执行,每次kernel下发都会等待完成,便于确定首个报错的 kernel。

使用方法:

export ASCEND_LAUNCH_BLOCKING=1

注意: 会显著降低下发性能,实际部署时请勿使用该环境变量。

可选:AUTOFUSE_DFX_FLAGS

作用: autofuse DFX环境变量,落盘每个自动融合算子,对应的内部融合图结构。pbtxt文件可以使用netron.app 打开观察。 使用方法:

export AUTOFUSE_DFX_FLAGS="--codegen_compile_debug=true;--debug_dir=/path-to-dump/"

注意:在设置的dump图路径下,生成 Autofuse 后端,对于每个融合算子的dump图。

结果分析 & 调测输出分析

用户开启 TORCH_COMPILE_DEBUG 后,调试信息输出位于执行目录下的torch_compile_debug子目录,带有 autofused_ 前缀的目录为 inductor-npu-ext 相关产物,其余均为 inductor 原生产物。每一个autofused_ 前缀的目录,都表示一个融合算子的白盒结构。如果没有融合算子产生(即未发生融合,需要通过打屏的 "Fallback aten.xxxx $reason: xx原因" 信息去判断原因。具体可参考inductor-npu-ext使用手册

用户也可以通过profiling的相关配置,观察使能自动融合后,算子性能收益情况。对于上面的sample用例,可以注释 "model = torch.compile(model, dynamic=False, fullgraph=True)" 这一行,即可走单算子流程。然后对比profiling里,单算子场景所有算子的总耗时,与使能 Inductor+Autofuse,融合算子的总耗时。详细的Profling性能分析工具的使用方法,可参见Profiling性能分析工具指南

需要注意的是,不是模型里所有的算子都能被融合,对于在 Inductor 层未被 lowering 的算子,最后仍然以单算子形式存在。融合提升比,等于 (融合后所有算子耗时-融合前所有算子耗时)/融合前所有算子耗时。更进一步的,可以观察融合算子的 aiv_mte2_time(输入搬运耗时)和 aiv_mte3_time(输出搬运耗时)的提升情况。

对于精度的分析,详细的精度调试工具的使用方法,可参见精度调试工具指南

复杂网络使能

用户如果想在网络里,使能 Autofuse 功能,只需要在模型文件的开头,导入torch后面,加上 import inductor_npu_ext 即可。