| Files | Last commit | Last update |
|---|---|---|
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 | 15 days ago |