结论:属实。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 用例,方向认可。


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


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