Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhongheng 的贡献)变更摘要
本 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()比较改为完整 StorageShapeoperator!=比较;4 个输入统一强制要求DT_FLOATdtype(原仅校验 var);lr 标量输入改为严格校验 Shape 为[1]。 -
配套测试与 GEIR 取证完善:四个算子各新增一个
test_geir_*_exception.cppGEIR example,覆盖非法 dtype、dtype 组合、非法 format、9 维输入、属性越界和 Shape 不一致等场景;InplaceApplyAdagradDA和InplaceApplyAdagradV2的 Host UT 文件重命名并大幅扩充异常用例,SmoothL1LossGrad新增独立 UT 文件,Relu6DUT 增加 format 和 rank 测试。


描述
本 PR 完善 Ascend950 上 Relu6D 和 SmoothL1LossGrad 的异常输入 Tiling 校验及 GE IR 验证覆盖。
主要改动:
本 PR 不修改 Kernel 计算公式和性能策略。
关联的Issue
https://gitcode.com/cann/ops-nn/issues/4585
https://gitcode.com/cann/ops-nn/issues/4523
测试
-1:3/3 PASS;unknown-rank[-2]:3/3 PASS;文档更新
本 PR 不涉及用户接口文档更新。
类型标签
AI/Agent生成声明