Closed
[Bug-Report|缺陷反馈]: BatchToSpaceND InferShape 未拒绝负值 block_shape 并生成负维度 #2823
KaranocaVeAdd on Aug 24Closed at Sep 28
Aug 24 Added label: bug-report
Aug 24 Associated pull request
陈思
Aug 24 Comments:
Aug 24 Comments:
/assign @KaranocaVe


Aug 24 Assign KaranocaVe as responsible person
Sep 21 Modify description of issue
WangJinCheng
Sep 28 Comments:
Sep 28 Comments:
算子拦截都是在tiling中做拦截,infershape是负责推导输出的shape,不负责拦截作用


Sep 28 changed custom state from 进行中 to 已完成
Sep 28 Close issue
KaranocaVe
Oct 2 Comments:
Oct 2 Comments:
感谢指出。这里补的是 shape 推导阶段的输入约束:负值目前会参与 batch 和空间维度计算,让 InferShape 成功返回含负维度的输出 shape。tiling 校验能拦截后续执行,但无法阻止这个无效 shape 在图构建期间传播;因此我认为 InferShape 也需要拒绝这类输入。如果仓库对此有明确约定,麻烦指向对应接口,我会据此调整。


liuchenghao
Oct 6 Comments:
Oct 6 Comments:
【Multica 同步】状态:done;说明:社区侧已在 shape 推导阶段补充输入约束(认领人 KaranocaVe 说明,2026-09-28 关闭),Multica 跟踪单同步关闭;详情:Multica issue AI4ME-166


Oct 11 Added label: resolved
一、问题描述
在 cann/ops-math 的 commit
0a2ce5b57caec6068d9e5658b740c2d41482aa15 中,BatchToSpaceND README
明确规定 block_shape 中的每个元素必须大于 0。
但是 Host InferShape
conversion/batch_to_space_nd/op_host/batch_to_space_nd_infershape.cpp
只检查 block_shape 元素是否等于 0,没有拒绝负值。输入
x=[4,1,1,1]、block_shape=[-1,2]、crops=[0,0,0,0] 时,InferShape
返回 GRAPH_SUCCESS,并生成 [-2,-1,2,1]。该结果包含负维度,违反输入
协议和输出 shape 的基本有效性要求。
二、环境信息
0a2ce5b57caec6068d9e5658b740c2d41482aa15
三、重现步骤
将 ops-math 固定到上述 commit,在已配置 CANN Toolkit 的环境执行:
env ASCEND_INSTALL_PATH=<CANN Toolkit 安装路径>
bash build.sh -u --ophost --ops=batch_to_space_nd
--soc=ascend950 --noexec -j2
构建退出码为 0。
运行 Host InferShape UT,观察合法、零值和负值三组输入:
观察合法、零值和负值三组输入:
四、预期结果
合法输入应返回 GRAPH_SUCCESS,输出为 [1,2,2,1]。根据 README 的严格
正值约束,block_shape=[0,2] 和 block_shape=[-1,2] 均应返回
GRAPH_FAILED,不应继续生成包含负维度的输出 shape。
五、实际结果
源码中第 98-102 行只判断 block 值是否为 0,负值继续参与 batch 除法;
第 110-112 行又使用负 block 值计算空间输出维度。
六、影响与规避方式
图构建阶段可能接受违反算子约束的 block_shape,并把负 batch 或负空间
维度传播到后续图元数据,导致后续 shape、tiling 或执行阶段出现更晚且
不易定位的错误。调用方可暂时在进入图构建前自行校验 block_shape 全部为
正值;实现侧应在 InferShape 入口拒绝非正值。
七、日志和最小复现
Host InferShape UT 已覆盖上述三组输入。
构建和运行退出码均为 0;退出码为 0 表示当前测试按观察到的行为通过,
不是对非法输入正确性的断言。
八、建议的回归测试
增加合法 block_shape=[2,2]、零值 [0,2] 和负值 [-1,2] 的 InferShape
回归用例。合法用例应保持成功;所有非正 block_shape 都应返回
GRAPH_FAILED,并且输出 shape 不应包含负维度。
关联 PR