| Files | Last commit | Last update |
|---|---|---|
fix: [maximum_grad/minimum_grad] golden 三方标杆与 e2e 通路统一为 tf.function 纯反向口径 Co-authored-by: Hana77<wangtianqi27@huawei.com> # message auto-generated for no-merge-commit merge: !6802 merge mm into master fix: [maximum_grad/minimum_grad] golden 三方标杆与 e2e 通路统一为 tf.function 纯反向口径 Created-by: Hana77 Commit-by: Hana77 Merged-by: cann-robot Description: ## 描述 修正 maximum_grad / minimum_grad 测试资产(tests/assets/golden.py 三方标杆与 *_e2e.py e2e 通路)中浮点反向的实现与计时口径。 ### 改动原因 - 旧实现浮点路径每次调用裸起 tf.GradientTape,前向(maximum/minimum 与 Mul)随反向一同进入执行与计时窗口,GPU 三方标杆采集的 device_us 并非纯反向耗时,与 NPU 侧 e2e 通路口径不对称。 - 旧 e2e 实现为规避 npu_device 动态图 GE 会话模型缓存按算子节点名复用导致的常量串台问题,每次调用都以唯一 name_scope 强制 graph_id 错开,代价是每次调用重新编译,同签名用例无法共享已编译图。 ### 改动方法 - **golden.py(三方标杆)**:浮点路径改为 tf.function 包裹的 tape 反向,只返回梯度,前向为死代码被剪除,计时窗口纯反向;int32 无梯度定义,抽出手拼分支(GreaterEqual/LessEqual + SelectV2×2 + Sum,与 golden 同口径)。 - **\*_e2e.py(e2e 通路)**:浮点路径改为 tf.function 包裹的 tape 反向且只返回梯度,NPU 执行纯反向链(融合后 te_maximumgrad/te_minimumgrad + te_reducesum),与 GPU 侧标杆口径对称;tf.function 按 (shape,dtype) 签名缓存 concrete function,同签名共享编译图(输入为 placeholder,无常量串台),跨签名 trace 时以 _TRACE_SEQ 唯一化 name_scope 错开 graph_id;int32 保留手拼路径。 - numpy golden(kernel/geir 通路 oracle)与精度判据(binary_equal、三比值)不变;融合规则的 gradient_tape scope 检查按名字分段匹配,前缀不影响。 ## 关联的Issue - #4204 ## 测试 - 变更仅涉及 tests/assets 测试资产,不改动算子实现(op_host/op_kernel/op_graph)。 - 验证方式:复用进程批跑 maximum_grad / minimum_grad 的 e2e 用例,确认浮点 golden 三比值 cross_check 通过、int32 binary_equal 通过、device_us 采集正常且同签名用例不重复触发编译。 ## 文档更新 - 无(不涉及 README / docs 变更)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6802 | 11 days ago | |
feat: 新增Ascend950系列MaximumGrad、MinimumGrad算子实现 Co-authored-by: Hana77<wangtianqi27@huawei.com> # message auto-generated for no-merge-commit merge: !6632 merge 1030 into master feat: 新增Ascend950系列MaximumGrad、MinimumGrad算子实现 Created-by: Hana77 Commit-by: Hana77 Merged-by: cann-robot Description: ## 描述 ### 改动原因 Ascend950(arch35)系列需要原生支持 MaximumGrad/MinimumGrad(elementwise maximum/minimum 的反向梯度算子,兼容 TensorFlow MaximumGrad/MinimumGrad)。TF 反向图中该梯度被分解为 GreaterEqual/LessEqual + Select/SelectV2 + 常量 zeros 的多算子子图,执行效率低,需要提供单一融合算子承接。 ### 改动方法 新增 math/maximum_grad、math/minimum_grad 两个算子工程(40 个文件,+4979 行): **算子规格**:输入 grads/x1/x2(float16/float32/bfloat16/int32,ND,三输入 dtype 必须一致);输出 y1/y2(broadcast 后 shape);属性 grad_x/grad_y(bool,默认 true,不能同时为 false);AICore 配置 ascend950,支持动态编译静态化、动态 rank、动态 shape。 **Host 侧**:op_def 注册 + proto(TF 兼容);infershape 三输入 broadcast 推导(两输出均为 broadcast shape,校验空 tensor/属性合法性);InferDataType 迁移至 op_graph(4 dtype 白名单 + 跨输入一致性校验);arch35 tiling 基于 atvoss broadcast tiling;ascend950 binary 配置 4 dtype × 3 输出形态(y1_only/y2_only/both)共 12 个/算子。 **Kernel 侧**:arch35 AIV only,基于 atvoss BroadcastSch 调度 + DAG 描述,按 outputCount 模板实例化三种输出形态。 **融合规则 MaximumMinimumGradFusionPass**(maximum/minimum 共用):将 TF 分解梯度子图(GE/LE + Select/SelectV2 + zeros,5→2)融合为单一算子;支持 both/dx-only/dy-only 三种形态,单形态要求子图边界自包含(self-contained)防误匹配;基于 GE 9.0.0 pattern 框架,编译期宏 + 运行时版本双重保护(低于 9.0.0 不注册),≥9.0.0 走 AfterInferShape。 canndev 侧配套改动:https://gitcode.com/cann/canndev/pull/82627 ## 关联的Issue - #3966 ## 测试 - UT:infershape / tiling(arch35) / graph_infer / fusion_pass(含 Select 与 SelectV2、GradientTape 命名、dx-only/dy-only 正例,平台不支持、scope 不匹配、zeros 非全零、端口交换等负例) - E2E:tests/assets golden 基准 + maximum_grad_e2e.py / minimum_grad_e2e.py(tensorflow 命名空间挂载) - GEIR 示例:examples/arch35/test_geir_maximum_grad.cpp、test_geir_minimum_grad.cpp ## 文档更新 - 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6632 | 14 days ago |