已关闭
SparseApplyAdagradV2 动态标量在 Ascend950 tiling 阶段被拒绝 #6656
KaranocaVe创建于 12 天前关闭于 10 天前
yuning_chen
12 天前 评论:
12 天前 评论:
初步分析
感谢反馈。
现象理解:SparseApplyAdagradV2 的 InferShape 接受 lr、epsilon 的 shape 为负一,Ascend950 tiling 只接受零维或一维长度为 1。动态标量可能在 shape 通过后被 tiling 拒绝。
当前判断:初步判断,待复现确认。静态标量不受影响。
涉及范围:optim/sparse_apply_adagrad_v2 的 InferShape 与 arch35 tiling。
下一步:用 var、accum 为 [4,3]、lr 与 epsilon 为一维未知维度的输入看 tiling 是否失败,并保留对明确非标量 shape 的拒绝。


11 天前 将 ji-songyuan 设为负责人
yuning_chen
11 天前 评论:
11 天前 评论:
您好,问题已收到,目前 @ji-songyuan 正在处理中。


renshuojian
11 天前 评论:
11 天前 评论:
/assign


11 天前 将 rsj007 设为负责人
10 天前 关联了pull request:fix(sparse_apply_adagrad_v2): arch35 tiling 接受动态标量[-1]并防御未解析维度
10 天前 关闭了 issue
10 天前 添加了label:resolved
KaranocaVe
3 天前 评论:
3 天前 评论:
@yolic 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-nn/merge_requests/12002
开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。
感谢您的支持!


SparseApplyAdagradV2 动态标量在 Ascend950 tiling 阶段被拒绝
源码基线为 cann/ops-nn@ae873b119fb5499c41a6893f920171551fb0a197。
InferShape 将一维 shape 为 [-1] 的 lr 和 epsilon 视为合法动态标量(optim/sparse_apply_adagrad_v2/op_host/sparse_apply_adagrad_v2_infershape.cpp:119-128),现有 InferShape 用例 S005 也覆盖了这一输入。Ascend950 tiling 随后检查 storage shape,但只接受 rank-0 或 [1](optim/sparse_apply_adagrad_v2/op_host/arch35/sparse_apply_adagrad_v2_tiling_arch35.cpp:122-134)。因此 lr、epsilon 均为 [-1] 时,shape 推断通过后会在 tiling 的 lr 检查处返回 GRAPH_FAILED。
最小输入条件:var/accum=[4,3]、grad=[2,3]、indices=[2],lr=[-1]、epsilon=[-1],数据类型为 float32/int32。预期 tiling 与 InferShape 对动态单元素标量的约定一致,继续生成 tiling 数据;当前实现报错并拒绝该动态输入。静态标量 rank-0 和 [1] 不受影响。
修复让 Ascend950 tiling 与 InferShape 一致地接受一维未知维度 [-1],并保留 [2] 等已知非标量 shape 的拒绝行为。此处结论来自固定源码的检查条件及现有 S005 用例;本次未在设备上执行新增 tiling 用例。
Validation
验证记录
源码基线:cann/ops-nn@ae873b119fb5499c41a6893f920171551fb0a197。
git apply --check;最终补丁对应当前上游 master 上的两个改动文件。pre-commit 4.6.2检查通过;适用的空白、EOF、文件大小、冲突标记、私钥、clang-format 18.1.8、codespell 和 OAT 1.0.3 检查均通过。YAML、JSON 和 Ruff 对 C++ 改动不适用。