已关闭
SparseApplyAdagradV2 动态标量在 Ascend950 tiling 阶段被拒绝 #6656
KaranocaVe创建于 7 天前关闭于 5 天前
yuning_chen
7 天前 评论:
7 天前 评论:
初步分析
感谢反馈。
现象理解: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 的拒绝。


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


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


6 天前 将 rsj007 设为负责人
5 天前 关联了pull request:fix(sparse_apply_adagrad_v2): arch35 tiling 接受动态标量[-1]并防御未解析维度
5 天前 关闭了 issue
5 天前 添加了label:resolved
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++ 改动不适用。