已合并
fix: 完善 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖 #8281
fix: 完善 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖 #8281
已合并
zhongheng创建于 8月5日
zhongheng
8月5日

描述

本 PR 完善 Ascend950 上 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖。

主要改动:

  • Relu6D:
    • 增加输入 rank 0~8 约束;
    • 增加输入 x 和输出 y 的 ND 格式校验;
    • 完善非法 dtype 错误信息;
    • 补充静态数值校验、动态 Shape/Rank example 和异常 GEIR example。
  • SmoothL1LossGrad:
    • 增加 predict、label、dout 独立的 dtype 和 ND 格式校验;
    • 增加输出 gradient 格式校验;
    • 完善三输入 dtype/Shape 一致性和 sigma > 0 校验;
    • 增加 rank 0~8 约束;
    • 补充静态数值校验、动态 Shape/Rank example 和异常 GEIR example。
  • 扩充两个算子的 Ascend950 Host UT,覆盖合法输入和 dtype、format、rank、属性、Shape 等异常场景。

本 PR 不修改 Kernel 计算公式和性能策略。

关联的Issue

https://gitcode.com/cann/ops-nn/issues/4585
https://gitcode.com/cann/ops-nn/issues/4523

测试

  • Relu6D Host UT:24/24 PASS;
  • SmoothL1LossGrad Host UT:15/15 PASS;
  • 合计 Host UT:39/39 PASS;
  • GEIR 异常用例:19/19 行为符合预期,17 个拒绝用例均在 Tiling 失败且无目标 Kernel,2 个合法 Cast 用例启动目标 Kernel并验证输出;
  • 两个算子的 static GEIR 均 PASS;
  • 每个算子的 unknown-dim -1:3/3 PASS;unknown-rank [-2]:3/3 PASS;
  • custom vendor/dynamic module 路由、输出 Shape/dtype/数值及真实 Kernel launch 均通过;
  • pre-commit、clang-format 18、codespell、OAT、git diff --check 均 PASS。

文档更新

本 PR 不涉及用户接口文档更新。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhongheng 的贡献)
Zzhongheng
8月5日 创建了 pull request,commit 45833a3f
Zzhongheng
8月5日 关联了issue:[Bug-Report|缺陷反馈]: 4个算子Tiling异常输入校验与GEIR取证不完整
atomgit-bot
atomgit-bot
8月5日 评论:

变更摘要

本 PR 对 Relu6D、SmoothL1LossGrad、InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 四个算子的 Tiling 阶段异常输入校验进行了完善。所有新增校验均位于各算子的 op_host Tiling 路径中,通过 gert::TilingContext 读取输入描述并在检测到非法输入时通过 OP_LOGE 返回 ge::GRAPH_FAILED。主要增强了维度上限(统一限制为 8 维)、ND 格式强制校验、dtype 组合一致性校验,以及 Tensor Shape 从"元素总数相同"收紧为"完整 Shape 完全相同"。同时为每个算子新增了 GEIR exception example 用于实跑取证,扩充/重命名了 Host Tiling UT 文件,并更新了 InplaceApplyAdagradDA 的 README 维度说明。

主要改动

  • 统一增加输入最大 8 维限制:四个算子的 op_host 中均新增 MAX_SUPPORTED_RANK = 8 常量,并在 GetShapeAttrsInfo 或对应校验函数中对输入 StorageShape 的 GetDimNum() 进行上限检查,超限即拒绝。

  • 全面增加 ND 格式强制校验:四个算子的所有输入和输出描述均通过 GetFormat().GetStorageFormat() 与 ge::FORMAT_ND 比较,非 ND 格式(如 FORMAT_NCHW)一律在 Tiling 阶段拒绝,覆盖原本缺失的格式检查。

  • InplaceApplyAdagradDA 校验逻辑强化:tensor 输入从"元素总数相同"改为 operator!= 完整 Shape 比较;标量输入 lr/l1/l2/global_step 从仅检查 GetShapeSize()==1 改为严格校验 GetDimNum()==1 && GetDim(0)==1;新增 var 与其余数据输入 dtype 一致性校验,以及 global_step 与 var 的 dtype 配对规则(FLOAT↔INT32,FLOAT16↔INT64)。

  • InplaceApplyAdagradV2 校验逻辑强化:var/accum/grad 从 GetShapeSize() 比较改为完整 StorageShape operator!= 比较;4 个输入统一强制要求 DT_FLOAT dtype(原仅校验 var);lr 标量输入改为严格校验 Shape 为 [1]。

  • 配套测试与 GEIR 取证完善:四个算子各新增一个 test_geir_*_exception.cpp GEIR example,覆盖非法 dtype、dtype 组合、非法 format、9 维输入、属性越界和 Shape 不一致等场景;InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 的 Host UT 文件重命名并大幅扩充异常用例,SmoothL1LossGrad 新增独立 UT 文件,Relu6D UT 增加 format 和 rank 测试。

likedislike
不准确?
atomgit-bot
atomgit-bot
8月5日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
8月5日 添加了label:cann-cla/yes
此处折叠了63条消息 查看更多
chenqi317成员
8月10日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
8月10日 添加了label:lgtm
CANN-robotCANN-robot成员
8月10日 关闭了关联的issue
CANN-robotCANN-robot成员
8月10日 合入了pull request
Zzhongheng
8月14日 修改了pull request 的描述