已关闭
[Bug-Report|缺陷反馈]: InplaceApplyAdagradDA/V2异常输入校验不完整 #4666
zhongheng创建于  26 天前关闭于  8 天前
zhongheng
26 天前 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 的 Ascend950 Host Tiling 异常输入校验不完整,主要包括:

  1. 部分输入仅比较元素总数,没有校验 Shape 完全一致。例如 [2, 3][6] 可能被误判为一致。
  2. 没有逐个校验所有输入的 dtype、format 和输入间 dtype 关系。
  3. 没有完整校验输入 Rank 范围以及 lr、l1、l2、global_step 等控制输入必须为 [1]
  4. 没有完整校验输出 format。
  5. InplaceApplyAdagradDA 的算子信息库将 FLOAT/INT32、FLOAT16/INT64 固定配对,但实际 global_step 支持 INT32、INT64,且不应与其他输入的 FLOAT/FLOAT16 类型绑定。
  6. 原 GEIR 异常用例将所有源输入 dtype 不一致都认定为必须在 Tiling 阶段失败。实际上 GE 可能按照算子信息库签名合法插入 Cast,这类情况应当成功执行,属于异常用例误判。

上述问题可能导致非法输入未在目标 Kernel 执行前稳定拦截,或者合法的 GE Cast 场景被测试程序误报为失败。

Environment / 环境信息 (Mandatory / 必填)

  • 昇腾硬件型号:Ascend 950DT_9582 V120
  • CANN 版本:9.2.0
  • 验证通路:Host UT、GE IR static/dynamic/exception example

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 构造 InplaceApplyAdagradDA 或 InplaceApplyAdagradV2 的 Host TilingContext/GE IR 图。
  2. 分别构造以下异常输入:
    • var、accum、grad 等输入元素总数相同但 Shape 不同;
    • 任一输入使用不支持的 dtype;
    • 需要保持一致的输入使用不同 dtype;
    • 输入或输出使用非 ND format;
    • var Rank 大于 8;
    • lr、l1、l2 或 global_step 使用非 [1] Shape。
  3. 执行 Host UT 或 GE IR exception example。
  4. 修复前可观察到部分非法输入未被完整校验,或者合法的 GE 自动 Cast 场景被测试程序错误要求在 Tiling 阶段失败。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

  1. 所有真正不满足算子契约的输入必须在目标 Kernel 执行前被拒绝。
  2. 拒绝阶段可以是 parameter_check、engine_selection、graph_compile 或 Tiling,不要求所有异常都必须进入 Tiling。
  3. 直接进入自定义算子 Host Tiling 的非法 dtype、Shape、format、Rank 和 scalar Shape 必须返回失败。
  4. GE 根据算子信息库签名合法插入 Cast 的场景应正常编译和执行,不应作为异常用例。
  5. InplaceApplyAdagradDA 的 global_step 在其他输入为 FLOAT 或 FLOAT16 时均支持 INT32、INT64。
  6. 合法输入的原有计算结果和性能不受影响。

修复后验证结果:

  • Ascend950 Host UT:38/38 PASS
    • InplaceApplyAdagradDA:22/22 PASS
    • InplaceApplyAdagradV2:16/16 PASS
  • GE IR exception:
    • InplaceApplyAdagradDA:36/36 PASS
    • InplaceApplyAdagradV2:15/15 PASS
    • 合计:51/51 PASS
    • 其中41个非法输入在目标 Kernel 前被拒绝,10个合法输入/GE Cast 场景成功执行
  • 静态 GE IR example:PASS
  • 动态 Shape:
    • unknown-dim -1:两个算子分别3/3 PASS
    • unknown-rank [-2]:两个算子分别3/3 PASS
  • Ascend950 JIT包:生成成功、SHA256校验成功、独立目录安装成功
  • pre-commit、clang-format、codespell、OAT:PASS

Special notes for this issue/备注 (Optional / 选填)

likedislike
zhongheng
26 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
26 天前 将 zhongheng 设为负责人
Zzhongheng
26 天前 关联了pull request:fix: validate Adagrad transfer-test inputs
Zzhongheng
18 天前 修改了issue 的描述
Zzhongheng
18 天前 关联了pull request:修复 InplaceApplyAdagradDA 和 InplaceApplyAdagradV2 在 Ascend950 场景下异常输入校验不完整及 GE IR 异常用例误判的问题
Zzhongheng
8 天前 issue状态由 进行中 改变为 已完成
Zzhongheng
8 天前 关闭了 issue