Closed
[Bug-Report|缺陷反馈]: StridedSliceAssign 切片终态为 0 维 scalar 时 tiling 误报 EZ0012,且 shrink 位误应用 begin/end mask #3580
xuejinghuiAdd on 29 days agoClosed at 29 days ago
29 days ago Added label: bug-report
xuejinghui
29 days ago Comments:
29 days ago Comments:
/assign


29 days ago Assign xuejinghui as responsible person
29 days ago Close issue
29 days ago Added label: resolved
[Bug-Report|缺陷反馈]: StridedSliceAssign 切片终态为 0 维 scalar 时 tiling 误报 EZ0012,且 shrink 位误应用 begin/end mask
问题描述
950 新增算子
StridedSliceAssign(ops-math/conversion/strided_slice_assign,arch35 SIMT 实现)在 GEIR 通路存在两个缺陷:shrink_axis_mask=1)时,input_value的合法 shape 为()。但 GEIR/TTK 通路会把 0 维 scalar 物化为 storage shape[1](origin shape 仍为()),tilingValidateShape使用GetStorageShape().GetDimNum()严格校验input_value rank == finalRank(=0),读到 1 ≠ 0,误报EZ0012: Parameter input_value ... rank must equal final slice rank。ExpandOneSpecDim原实现先应用 begin_mask/end_mask 再处理 shrink 分支,当 begin_mask 与 shrink_axis_mask 同位置位时,begin 被 mask 置 0,写入位置错误。TF 竞品(ValidateStridedSliceOp)中 shrink 分支不走canonical(),begin/end mask 对 shrink 位不生效,应直接取 spec 的 begin 原值。环境信息
Ascend 950PR/950DT;CANN 9.2.0;GEIR 图模式通路(该算子无 aclnn 接口)
重现步骤
CI 失败用例(
StridedSliceAssign_L0_accuracy_perf_c_s_006/066/093/138,共 4 条,模式相同):复现命令:
语义合法性说明:var 为 1 维,shrink 第 0 维后切片终态为 0 维 scalar,input_value shape
()合法(TF 竞品同样接受)。预期结果
日志/截图
日志中可见 var
shape: (25629532,),input_valueshape: (), total_shape: [1](rank 表示不一致的直接证据)。根因分析
[1]是框架既有行为;tiling 的 rank 校验未兼容该表示。eliminate_scalar_shapes(ops-test-kit/ttk/utilities/container_utils.py:109)会把()一律改写为(1,),当时误判为"框架下用例无法自洽"而全部改写规避(见03_tse_changelog_v4.md),导致交付的 361 条用例中 shrink 到 scalar 组合覆盖为 0;CI 的 L0 用例来自独立用例仓,恰好命中该盲区。修复方案
修复提交(ops-math,基于 upstream/master):
ValidateShape:finalRank==0且 storage shape 为[1]时放行(strided_slice_assign_tiling_arch35.cpp:196)ExpandOneSpecDim:shrink 分支不再应用 begin/end mask,直接使用 spec begin 原值(对齐 TF)配套 UT 新增 4 条(
test_strided_slice_assign_tiling_arch35.cpp):1D/2D 全 shrink 到 scalar 正向、finalRank=0 但 input 为 (2,) 负向、begin_mask+shrink 同位语义钉住。配套用例(SIMT-LongTails / operator-artifacts 已同步):白盒新增 10 条 rank-0 scalar 终态用例(case00207~216),覆盖 1D/2D/3D/8D 全 shrink、负索引 shrink、shrink+ellipsis 展开 0 维、begin_mask+shrink 同位、3 条 CI 失败用例同源大 shape。
验证结果(Ascend950PR 真机,GEIR 通路)
(-0,-0)数据生成的 ±0.0 比对 nan(换修复前旧包对照同样失败,与本次修复无关);3 条 PROFILE_CRASH 单独复跑全 PASS(并发内存争抢 flaky);2 条 2³² 元要素越界用例 SKIPbash build.sh -u --ophost --ops=strided_slice_assign --soc=ascend950,12/12 PASS(tiling 9 + infershape 3)关联提交
fix_strided_slice_assign_scalar:1a4749de1(squash 后单提交)260cfb5(用例)ead9558(用例同步)备注
atc_data/kernel_cache)会固化 tiling 结果,tiling 变更后需清缓存重跑验证(-0,-0)数据范围生成的 ±0.0 在比对器下 Diff 为 nan 导致误判 FAIL,建议比对器对+0.0/-0.0特判或按位比较