Inner_Error_Compile_Fail(E90003): Compile operator failed, cause: Template constraint,
The 1 input's dim num is not same with output's dim num
[FUNC:DimensionCollapse][FILE:broadcast_tiling.cpp][LINE:167]
dimension collapse failed.
[FILE:lamb_apply_optimizer_assign_tiling_arch35.cpp][LINE:128]
修复后,在 host 校验阶段给出明确原因:
[lamb_apply_optimizer_assign_tiling_arch35.cpp][CheckInplaceShapeConstraint]
OpName:[op1] Parameter grad of op1 has incorrect shape [1].
Reason: grad does not support broadcast and must have exactly the same shape as inputv/inputm.
Describe the current behavior / 问题描述
一、ForeachAddcdivList:Div 未指定精度档位,fp32 结果偏离正确舍入 1 ULP
foreach/foreach_utils/op_kernel/arch35/foreach_addc_list_regbase.h的Div调用未指定DivConfig,落到缺省DivAlgo::INTRINSIC。该档在 dav-3510 上仅保真到 1 ULP:实测 fp32 用例 23689/524288(4.52%) 元素与正确舍入结果相差 1 ULP。在
x1与scalars*(x2/x3)几乎相消的点上(例如输入[-0.743, 1.248, 1.679]、结果-6.39e-05),该绝对偏差被放大成上千 ULP 的相对误差,导致 cross_check 的 mare 判据报红(实测 mare 29.87 > L1 阈值 5.0)。仓内 20/22 处显式
Div配置均选 0ULP 档,本文件此前漏配;兄弟算子foreach_div_list_inplace已修过同一问题并在注释中记录(实测 8.3% 元素偏 1 ULP)。二、LambApplyOptimizerAssign:资料声明的 grad 广播能力实际不被支持
README 声明
grad可小于inputv/inputm并向上广播,但底层Ops::Base广播模板的DoDimensionCollapse不支持对 In0(grad)做广播。infershape 与 tiling 的校验用的是 NumPy 右对齐广播语义,会放行这类组合,导致失败被推迟到 tiling 阶段以E90003 Inner_Error_Compile_Fail抛出,报错不可读。Environment / 环境信息
Steps to reproduce the issue / 重现步骤
问题一(Div 精度档位):
用例参数:单张量
(1024,512),dtype fp32,input_data_ranges = ((-2,2),(1,4),(1,4),(1,1))。将 dump 出的 NPU 输出与
fl(x1 + fl(x2/x3))(fp32 正确舍入三步)逐位比对。问题二(grad 广播):
用例参数:
grad=()或grad=(1,1,4),inputv=inputm=(2,3,4),input3=(2,3,4),全 fp16/fp32。Describe the expected behavior / 预期结果
Related log / screenshot / 日志 / 截图
问题一 —— cross_check 判据实测:
逐位比对(同用例同区间):
问题二 —— 修复前,报错来自广播模板内部:
修复后,在 host 校验阶段给出明确原因:
Special notes for this issue / 备注
实测支持面矩阵(LambApplyOptimizerAssign,静态 GE 通路):
(2,3,4)(2,3,4)(2,3,4)(1,1,4)/(4,)/()/(1,)/(1,1,1)(2,3,4)(1,2,3,4)(rank 大于输出)()/(1,1,4)/(1,3,4)/(2,1,4)/(2,3,1)(2,3,4)结论:
grad/inputv/inputm三者必须同形,input3是唯一可广播的输入。关联 PR:https://gitcode.com/cann/ops-nn/pull/10141 、 https://gitcode.com/cann/ops-nn/pull/10142