| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat:声明式自定义算子的辅流申请功能 Co-authored-by: Chang-an-HW<machangan@huawei.com> # message auto-generated for no-merge-commit merge: !4934 merge declarative-custom-op-attached-stream-pr into develop feat:声明式自定义算子的辅流申请功能 Created-by: Chang-an-HW Commit-by: Chang-an-HW Merged-by: cann-robot Description: # Pull Request ## 描述 为声明式自定义算子( AnnotatedArgsOp / DeclareLaunchArgs)新增**编译期辅流申请与任务依赖声明**能力,使算子可以在 DeclareLaunchArgs 回调内把多个 kernel launch 下发到不同逻辑流,并由 GE 自动完成流分配与事件同步插入。 **对外接口(gert::AnnotatedArgsContext,@since 9.3.0(2026-09))** - 新增 uint32_t RequestAttachedStream(const ge::AscendString &key):按模型级 key 申请逻辑辅流,相同 key 复用同一 ID;key 为空或申请失败返回 UINT32_MAX。 - 新增 graphStatus AddLaunchWithDependencies(launch_info, args, dependencies, dependency_num, token):以 AnnotatedLaunchToken 表达 launch 间前驱依赖,成功后输出本次 launch 的 token。 - AddLaunch 的 ABI 与行为保持不变(不产生 token,也不能作为依赖源)。 **graph_metadef 侧** - AnnotatedArgsHandler:LaunchRecord 增加 token 与依赖列表;新增 SetAttachedStreamRequestFunc / RequestAttachedStream / GetAttachedStreamIds;AddLaunchWithDependencies 校验 token 有效性(依赖必须指向更早 launch、不可重复、不可溢出)。 - stub_offline_launch_runtime.cc 同步补齐 stub 实现;stub_lowering 增加 runtime_headers、slog 链接。 **compiler 侧** - 新增 DeclarativeStreamRegistry:挂到 ComputeGraph ext attr(declarative_stream_registry),从当前逻辑流数之后按 key 去重分配辅流 ID,并做溢出保护。 - 新增 AnnotatedArgsTaskPlan 序列化/反序列化(带 version、长度与依赖边合法性校验):缓存属性由进程内 ext attr 改为可序列化的 _custom_annotated_args_task_plan_bytes,使计划在 ReGetTaskInfo / 二次生成场景下可无回调恢复;计划中新增 launch_stream_ids、dependencies、attached_stream_ids。 - ModelBuilder:PrepareDeclarativeAttachedStreamRegistry(AssignLogicalStreams 之后建注册表)、FinalizeDeclarativeAttachedStreams(把计划辅流写回 op_desc->SetAttachedStreamIds 并扩展 stream_num)、MaterializeAnnotatedArgsTaskDependencies。 - StreamAllocator:InsertAnnotatedArgsEventTasks 为跨流依赖插入 EVENT_RECORD/EVENT_WAIT 任务;ReconcileAnnotatedArgsEventTasks 在拆流后重映射 event id、剪除同流事件对,并回写 stream/event/notify 总数(RTS 与 GE 两条拆流路径均覆盖)。 - CustomOpsKernelBuilder:物化时按计划流 ID 下发任务(无依赖且无辅流的 legacy 计划仍刷新为节点当前主流,兼容跨流复用);CalcOpRunningParam 改为 DelAttr 清理序列化计划。 **约束校验** - 计划中至少存在一个主流 launch;辅流任务是否汇合回主流由算子自行保证。 - 依赖 token 必须指向更早的 launch,不可重复、不可自依赖。 - mobile OMC 单任务模式不支持依赖与辅流;端侧仍只允许一次 AddLaunch。 **文档**:新增 RequestAttachedStream.md、AddLaunchWithDependencies.md,更新 overview.md、README.md 目录、AddLaunch.md 与 DeclareLaunchArgs.md 约束描述。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 描述测试此变更的步骤和前提条件: 1. 编译并运行 UT: - graph_metadef UT:AnnotatedArgsContextUT.AddLaunchWithDependenciesValidatesAndCopiesTokens - ge UT: - stream_allocator_unittest:DeclarativeStreamRegistryTest.*、AnnotatedArgsTaskPlanTest.*(序列化往返、跨流事件插入/重映射/同流剪枝)、ModelBuilderTest.FinalizeDeclarativeAttachedStreams* - custom_ops_kernel_info_store_unittest:计划无回调恢复、辅流不汇合主流、缺主流 launch 报错 - task_generator_unittest:GenerateTask_AnnotatedKernelRecordWait - custom_task_info_unittest:AnnotatedEventWaitUsesExistingWaitAndResetSemantics 2. 编译并运行 ST:graph_engine_test 中 DeclarativeCustomOpAttachedStreamSt.*(按 key 复用辅流 ID、回调缺失返回 UINT32_MAX)。 3. 手工验证:自定义算子在 DeclareLaunchArgs 中调用 RequestAttachedStream + AddLaunchWithDependencies 下发主流/辅流任务,出 OM 后确认 stream_num 扩展、辅流 launch 与 EVENT_RECORD/EVENT_WAIT 任务正确生成且执行结果正确。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - PR 当前带 stat/needs-squash 标签,38 个 commit 中含多个 CI 规避/revert 提交,合入前需 squash。 - 标题 feat: 使用了全角冒号,建议改为半角 feat: 。 See merge request: cann/ge!4934 | 21 天前 | |
fix: 增强符号表达式反序列化与替换环检测的健壮性并补齐JIT推导预处理阶段 Co-authored-by: xiebangrui<xiebangrui@huawei.com> # message auto-generated for no-merge-commit merge: !5005 merge dev-expression-robustness into develop fix: 增强符号表达式反序列化与替换环检测的健壮性并补齐JIT推导预处理阶段 Created-by: xiebangrui2025 Commit-by: xiebangrui Merged-by: cann-robot Description: ## 描述 本 PR 增强符号表达式公共设施的健壮性(反序列化、替换环检测),并补齐 JIT 符号推导前的预处理阶段。 **解决的问题:** 1. **Deserialize 字节精确匹配拒绝合法串(bugfix)**:SymEngine 规范打印会重排负系数 Add 项与交换律算子参数,合法序列化串(如 guard)因字节不等被拒、返回 nullptr,上层 guard 集合比较器解引用空指针断言崩溃;同时 a(s0) 等截断串反而被静默接受(ParserExpression 返回后残留 token 不检查)。 2. **CheckReplacementCycle 复合表达式盲区(bugfix)**:旧实现仅在某一侧根为单符号时用 ContainVar + Simplify 判断,两根均为复合表达式时直接漏判(例如已有 replacement s0 == s2,再 Append(s0 + s1, s2):s0 的根是 s2,构成环但检测不到);逐符号枚举重写后还需拦截**间接环**——已有 s3 == Min(2, s2) 时再建立 s2 == (s0+s3)*Ceil(s1),替换链闭合出 s2 -> 复合 -> s3 -> Min(2, s2) 的环。 3. **JIT 推导预处理阶段缺失**:PrepareBeforeInferSymbol 缺 OptimizeGraphInit/OptimizeOriginalGraphForQuantize,与标准编译管线(GraphManager::PreRunOptimizeOriginalGraph)阶段序列不一致——符号推导基于未经 FE prepare 的图进行,而 sliced graph 最终编译时仍会执行这两个阶段,导致"推导图"与"编译图"状态错位。 4. **Exp/Sqrt 反序列化缺口**:打印侧将 Pow(E, x) 输出为 Exp(x)、Pow(x, 1/2) 输出为 Sqrt(x),但 scanner/expr_parser 未注册对应 token,含这两种形态的序列化串反序列化失败。 **修复方案:** | 文件 | 改动 | |------|------| | expression_impl.cc | Deserialize 重写为三段式:① 完整解析(新增 IsAtEnd 检查输入串无残留 token,拒绝截断串);② 字节相等直接通过;③ 字节不等时将重序列化结果再次解析并 Compare 两棵规范树,语义相等则接受。SymEngine 表达式树是规范形(Add 合并同类项、交换律参数按规范顺序排列),语义相同的表达式解析后得到相同的树,不存在"判等但求值不同";Str() 有损的形态(如未被识别的函数打印)重解析失败,保守拒绝 | | expr_parser.h/.cc + scanner.h/.cc | 补齐 Exp/Sqrt token 注册与解析(Exp(x) → pow(E, x)、Sqrt(x) → pow(x, 1/2)),序列化-反序列化往返闭环;单参函数(Log/Ceil/Floor/Abs/Exp/Sqrt)统一走分发表派发,新增单参函数只需在表中注册 | | attr_group_shape_env_attr.cc | CheckReplacementCycle 重写为逐表达式枚举自由符号并解析其替换根、与对方根比较,覆盖复合表达式对盲区,且无需对根做化简展开(替换链较长时代价高);补充符号根对对方根自由符号的 ContainVar 检查拦截间接环(ContainVar 仅接受无参表达式,复合根需逐自由符号判断);**成环时维持跳过语义不变**——等式两侧共享符号的合法自引用约束(如 s1*s1 == s3)同样命中该检测,拒绝会使推导整体失败并污染 guard 判定结果 | | jit_infer_utils.cc | PrepareBeforeInferSymbol 补齐 OptimizeGraphInit 与 OptimizeOriginalGraphForQuantize,对齐标准编译管线;两个 pass 均幂等,编译期重复执行无副作用;二者依赖 GELib(FE 引擎)就绪,生产 JIT 编译流程中必然满足,UT fixture 的 SetUp 初始化 GELib(带 SOC_VERSION)/TearDown 中 Finalize 使被测代码在前置条件满足下运行 | **新增测试(3 UT,覆盖本 PR 所解决问题/场景):** - 语义相等但字节不等的负系数重排串被接受:-(2 * s1) + s0 经重解析 + Compare 语义树相等接受(曾因字节不等被拒,上层 guard 集合比较器解引用空指针断言崩溃) - Exp/Sqrt 序列化-反序列化往返闭环:Pow(E,x) 打印为 Exp(x)、Pow(x,1/2) 打印为 Sqrt(x),含这两种形态的 guard 串还原为等价 Pow 表达式(补齐 token 注册前该形态反序列化失败) - 间接替换环跳过:已有 s3 == Min(2, s2) 时再建立 s2 == (s0+s3)*Ceil(s1),检测命中后跳过该条替换(s2 不进入替换集合),既有替换保持不变 JIT 推导预处理对齐由既有用例经 fixture 初始化 GELib 覆盖执行路径,两个 pass 幂等无独立可观测行为,不新增专门用例。 **存量用例期望更新(均为语义有意变更非回归):** - Deserialize_Invalid:"s0*s1"/"a+2" 为非规范但语义良好的串,三段式实现按语义相等正确接受,更新为断言接受并保留截断串 "a(s0)"/非法 token "s0++" 的拒绝断言 - ShapeEnvAttrDeserialize_InvalidExpression:非法串换为截断串 "a(s0)",保留六场景"非法表达式被拒"语义 - SimplifyWithShapeEnv:SymEngine 构造 ceiling(ceiling(x)-20) 时移出整数产生未化简两层嵌套形态,解析路径幂等化简为一层,二者数学等价,新实现按语义相等接受,更新为断言非空 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue ## 如何测试 1. 全量编译 aihac_symbolizer / jit_exe / ut_expression 通过 2. ut_expression 137/137、ut_jit_execution 121/121 通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 单 commit 合入,含生产代码、新增测试(3 UT)与用例期望更新;jit_infer_utils_unittest 存量代码按 CI 同款 clang-format v22.1.5 格式化(纯格式变更无行为影响)。 See merge request: cann/ge!5005 | 1 个月前 | |
feat: TensorDesc 原始数据类型接口的 GE 侧实现 Co-authored-by: lfz2812<220252399@seu.edu.cn> # message auto-generated for no-merge-commit merge: !5144 merge metadef_2 into develop feat: TensorDesc 原始数据类型接口的 GE 侧实现 Created-by: lfz2812 Commit-by: lfz2812 Merged-by: cann-robot Description: # Pull Request ## 描述 请清晰准确地描述本次 Pull Request 的意图和变更内容。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [ ] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!5144 | 25 天前 | |
feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !4383 merge feat/fusion-pass-default-switch into develop feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Created-by: Dazhou_Cao Commit-by: qq_45842700 Merged-by: cann-robot Description: ## 描述 将融合Pass开关机制中硬编码的 return true 替换为注册时声明的 default_switch 值,作为四层开关优先级的最低层(第四层)。开发者可通过 REG_FUSION_PASS/REG_DECOMPOSE_PASS/REGISTER_CUSTOM_PASS 的变参宏声明 PassSwitch::kOff,使有精度风险或性能回退的pass默认关闭,仅当用户显式配置开启时才执行。 ### 背景与动机 GE 融合Pass原有三层运行时开关机制(graph option > JSON精确匹配 > JSON ALL通配 > **硬编码 return true**)。“默认true”是硬编码的,pass注册时无法声明自己的默认关闭状态。部分pass在特定条件下存在精度风险或性能回退,需要在注册时声明默认关闭,当前只能在pass内部 MeetRequirements 中做条件判断规避,不够直观,也无法在pass初始化阶段就跳过实例创建。 ### 变更内容 - 新增 PassSwitch 枚举(kOn=0, kOff=1),定义于 register_custom_pass.h - FusionPassRegistrationData / PassRegistrationData 新增 DefaultSwitch / GetDefaultSwitch 方法 - 三个注册宏采用变参宏重载:1参兼容(不调用 DefaultSwitch),2参带 switch - IsPassEnable 提取为 PassOptionUtils::IsPassEnable 公共方法,末尾 return true 改为 return default_switch == kOn - CustomPassHelper::Run 新增带 switch map 的重载 - Python Pass 桥接时隐式获得 kOn 默认值,行为不变 ### 兼容性 - **源码兼容**:变参宏分发,旧1参调用无需修改 - **ABI兼容**:PIMPL模式,新增非虚方法不影响布局 - **运行时兼容**:1参宏不调用 DefaultSwitch,旧GE运行时dlopen不受影响 ## 变更类型 - [x] ✨ 新功能 ## 如何测试 1. 编译 ge_compiler 包,验证编译通过 2. 运行 ut_fusion_pass_executor_utest 中新增的9个UT用例 3. 验证场景:kOff+无配置->跳过、kOff+option on->执行、kOff+JSON精确on->执行、kOff+JSON ALL on->执行、不传switch->默认执行 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签 - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 四层开关优先级: 1. graph option (--optimization_switch) 最高,用户运行时覆盖 2. JSON 精确匹配 (fusion_switch.cfg) 用户/产品配置 3. JSON ALL 通配 一键开关 4. 注册默认值 (DefaultSwitch) 最低,开发者声明 ← 新增 See merge request: cann/ge!4383 | 1 个月前 | |
fix: precommit整改 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3726 merge dev-precommit into develop fix: precommit整改 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 precommit整改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3726 | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 21 天前 | ||
| 1 个月前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 3 个月前 |