已关闭
GroupedDynamicBlockQuant InferShape 接受标量 group_list #6990
KaranocaVe创建于  12 天前关闭于  12 天前
KaranocaVe
KaranocaVe
12 天前 创建

GroupedDynamicBlockQuant InferShape 接受标量 group_list

现象

GroupedDynamicBlockQuant 的 Proto 将 group_list 定义为一维 Int32 张量。当前 Host InferShape 只检查输入指针,随后直接读取 GetDim(0),未验证秩。对于 rank-0 的 group_list,Shape API 探针显示逻辑秩为 0、读取 dim 0 得到默认值 0;以 x=[2000,2000]、row_block_size=128、col_block_size=128 走现有推导路径时,groupNum 被当作 0,InferShape 会构造 scale 形状 [15,16] 并返回成功,而不是拒绝违反接口契约的输入。有效的一维 group_list 长度为 10 时,现有对照用例期望 scale 为 [25,16]。
Tiling 的 CheckShape 后续会检查 group_list 秩并返回失败,因此目前确认的影响是 InferShape 阶段错误接受非法输入、产出错误的中间 shape 并延迟报错;没有证据表明该非法输入会执行到设备 kernel。

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

likedislike
KaranocaVeKaranocaVe
12 天前 关联了pull request:CANN bug report
KaranocaVeKaranocaVe
12 天前 修改了issue 的描述
yuning_chenyuning_chen成员
12 天前 将 KaranocaVe 设为负责人
HuangRZzzz
HuangRZzzz成员
12 天前 评论:

结论:属实。InferShape 对 group_list 只判空不校秩,rank-0 会被当作合法输入继续推导并返回成功。

证据:op_host/grouped_dynamic_block_quant_infershape.cpp:103-105 在 GetInputShape(1) 判空后直接 GetDim(0) 取 groupNum;SetShapeDimTwo(:43-52)与 SetShapeDimThree(:80-88)只有 IsUnknownRank 兜底、同样不看秩,最终走 dim0/rowBlockSize + groupNum 并返回 GRAPH_SUCCESS;按 x=[2000,2000]、row/col_block_size=128 计,scale 会得到 [15,16] 而非拒绝,与你描述一致。补充一点:gert::Shape::GetDim 并不校验 dim_num,rank-0 时读到的是 dims_[0],其内容不属于接口保证(Shape 拷贝构造注释明确“可能有脏数据”),探针读到 0 只是该实现下的表现,具体值需运行期确认——但不影响“非法输入被接受”这一结论。

修法:读取 dim 0 前用 GetDimNum() != 1 拒绝,文件内已有常量 INPUT_DIM_ONE(:25)可用;tiling 侧 grouped_dynamic_block_quant_tiling.cpp:264-268、297-300 已有同样校验,InferShape 补齐后两侧契约一致,当前唯一影响确实是拖到 tiling 才失败。

状态:PR !12427(open,stat/needs-squash,ci-pipeline-passed)正是该修法且补了 rank-0 用例,方向认可。

likedislike
HuangRZzzz
HuangRZzzz成员
12 天前 评论:

关联修复 PR:!12427(评审中,未合入 master)。本单转入 PR 跟踪并关闭;PR 合入后即完全闭环,如方案调整可随时重开。

likedislike
HuangRZzzzHuangRZzzz成员
12 天前 关闭了 issue
CANN-robotCANN-robot成员
9 天前 添加了label:resolved