已关闭
[Bug-Report|缺陷反馈]: AddLayerNorm InferShape 未将 norm 多尾轴置 1 导致 mean/rstd 形状错误 #4856
rk创建于 8月17日关闭于 8月20日
8月17日 将 wangpengbo26 设为负责人
8月18日 修改标题为 “[Bug-Report|缺陷反馈]: AddLayerNorm InferShape 未将 norm 多尾轴置 1 导致 mean/rstd 形状错误”,原标题为“[Bug-Report|缺陷反馈]: AddLayerNorm InferShape 未将 gamma 多尾轴置 1 导致 mean/rstd 形状错误”
8月20日 关闭了 issue
8月20日 添加了label:resolved
问题描述
AddLayerNorm(及InplaceAddLayerNorm)算子的 InferShape 推导mean/rstd输出形状时存在缺陷:仅对 x1 尾部第 1 根 norm 轴执行SetDim(..., 1),未覆盖gamma对应的全部尾轴。当gamma为多根尾轴时,mean/rstd形状推导错误,并连锁导致 tiling 阶段CheckX1GammaMean校验失败,算子无法运行。环境信息
norm/add_layer_norm/op_host/add_layer_norm_infershape.cppAddLayerNorm、InplaceAddLayerNorm(共用同一 InferShape 函数)gamma维数 > 1(即 norm 轴为多根尾轴,如x1=[A,B,C,D]、gamma=[C,D])重现步骤
x1=[4,1,8,16]、gamma=[8,16]、beta=[8,16]。AddLayerNorm算子。mean/rstd形状。预期结果
mean/rstd形状为[4,1,1,1](x1 尾部gammaDimNum=2维全部置 1)。实际结果(缺陷)
mean/rstd形状被错误推导为[4,1,1,16](仅置第 2 维为 1,漏置第 3 维),随后 tiling 侧CheckX1GammaMean因尾部维非 1 而报错失败。日志/截图
问题代码(
add_layer_norm_infershape.cpp:75):auto shape(*x1_shape); shape.SetDim(shape.GetDimNum() - gamma_shape->GetDimNum(), 1); // 仅置 1 根 *mean_shape = shape; *rstd_shape = shape;备注
for (size_t i = shape.GetDimNum() - gamma_shape->GetDimNum(); i < shape.GetDimNum(); i++) { shape.SetDim(i, 1); }gamma为 1 维时循环只执行 1 次,行为与原实现完全一致,零回归。关联 PR:https://gitcode.com/cann/ops-nn/pull/8804