已关闭
ApplyAdamV2 缺省可选输入时 InferShape 拒绝合法图 #6572
KaranocaVe创建于  16 天前关闭于  14 天前
KaranocaVe
KaranocaVe
16 天前 创建

ApplyAdamV2 缺省可选输入时 InferShape 拒绝合法图

现象

ApplyAdamV2 的 IR 原型和 OpDef 都将 max_grad_norm、step_size 声明为可选输入。README 还说明 mBART 模式未提供 step_size 时使用 lr。但当前 InferShape 按运行时扁平输入下标读取这些输入:缺省可选输入会使其后的输入向前移动,原型下标不再对应运行时下标,校验会把后续必需输入错认成可选输入,或对越界输入拿到空指针并返回 GRAPH_FAILED。

触发条件与影响

构造 ApplyAdamV2 图时省略 max_grad_norm(标准 Adam 和 mBART 模式均可),或在 mBART 模式省略 step_size,其余必需输入合法且标量形状一致。根据接口声明,这些图应可继续进行形状推导;当前实现却可能在 InferShape 阶段失败,阻断合法图的构建或编译。

根因与修复

InferShape 将 IR 原型索引传给 GetInputShape(),该接口按运行时输入位置取值。修复使用 GetRequiredInputShape() 按 IR 索引读取必需输入;对 max_grad_norm 和 mBART 模式的 step_size 使用 GetOptionalInputShape(),仅在输入实际存在时校验其标量形状。新增 UT 覆盖 mBART 同时省略两个可选输入的场景。

证据

  • 固定源码:cann/ops-nn commit ae873b119fb5499c41a6893f920171551fb0a197。
  • optim/apply_adam_v2/op_graph/apply_adam_v2_proto.h 与 optim/apply_adam_v2/op_host/apply_adam_v2_def.cpp 将两个输入标为可选。
  • optim/apply_adam_v2/README.md 记载 mBART 缺省 step_size 时使用 lr。
  • metadef/inc/external/exe_graph/runtime/infer_shape_context.h 说明 optional shape 缺省时返回空指针,并提供按 IR 索引读取必需输入的接口。

Validation

验证记录

  • 固定源码版本:cann/ops-nn,commit ae873b119fb5499c41a6893f920171551fb0a197。
  • 补丁检查:fix.patch 可应用于当前 master,git apply --check 通过。
  • 目标仓库 pre-commit:对 optim/apply_adam_v2/op_host/apply_adam_v2_infershape.cpp 和 optim/apply_adam_v2/tests/ut/op_host/test_apply_adam_v2_infershape.cpp 执行 pre-commit 4.6.2 run --files ...。空白、文件结尾、冲突标记、私钥、大文件、clang-format v18.1.8、codespell v2.4.1 和 OAT (oat-py 1.0.3) 检查全部通过;YAML、JSON 和 Python hooks 因文件类型未运行。
  • 回归覆盖:新增 optional_inputs_can_be_omitted,覆盖 mBART 模式同时缺省 max_grad_norm 和 step_size。未在本地编译或运行 UT,交由 PR CI 验证。

关联 PR: https://gitcode.com/cann/ops-nn/merge_requests/11904

likedislike
yuning_chen
yuning_chen成员
16 天前 评论:

初步分析

感谢反馈,我们已开始核对这个问题。

现象理解:ApplyAdamV2 的可选输入缺省时,InferShape 可能仍按固定下标读取,把后面的必需输入认错,合法图被拒绝。
当前判断:初步判断,待复现确认。省略 max_grad_norm 或 step_size 后推导失败的可能性存在,需对照当前实现核实。
涉及范围:ApplyAdamV2 缺省可选输入时的 InferShape。
下一步:我们会核对可选输入缺省后的下标是否错位,评估按名称或可选语义读取。

likedislike
yuning_chenyuning_chen成员
16 天前 将 zhuzemao 设为负责人
yuning_chen
yuning_chen成员
16 天前 评论:

您好,问题已收到,当前 @zhuzemao 正在处理中。

likedislike
KaranocaVeKaranocaVe
16 天前 修改了issue 的描述
KaranocaVeKaranocaVe
16 天前 关联了pull request:ApplyAdamV2 缺省可选输入时 InferShape 拒绝合法图
KaranocaVeKaranocaVe
16 天前 修改了issue 的描述
Zzhuzemao成员
14 天前 将 yourealize 设为负责人
Zzhuzemao成员
14 天前 移除了负责人 zhuzemao
zhuzemao成员
14 天前 评论:

你好,该问题后续由 @yourealize 继续跟踪

likedislike
CANN-robotCANN-robot成员
14 天前 关闭了 issue
CANN-robotCANN-robot成员
14 天前 添加了label:resolved
KaranocaVe
KaranocaVe
7 天前 评论:

@yourealize 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-nn/merge_requests/11904

开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。

感谢您的支持!

likedislike