operator-artifacts/hpc-group/august/ArgMaxGrad
ops-nn/index/arg_max_grad
D <= INT32_MAX
def.cpp
temp/artifacts-golden-sync
[1,8]
证据
01_requirement.md:47
任意 rank 的 ND
03_spec.yaml:12
rank: [1, 2, 3, 4, 5, 6, 7, 8]
op_host/arg_max_grad_def.cpp
op_host/arch35/arg_max_grad_tiling_arch35.cpp:168-170
rank == 0
canndev/ops/built-in/op_proto/elewise_calculation_ops.cc:5462-5469
IsArgMaxGradCheckPass
arg_max_grad_d.py:48-88
check_param
arg_max_grad_fusion_pass.cc
结论:按方案 A 放开 spec。A5 与 A2 均为「rank >= 1,无上界」。
UT:rank 覆盖已从 1~8 扩到 1~9,含 rank > 8 一档。
README.md:37/45
把第 dimension 维置 1
只能是 [2,3,1,5](等价 [2,3,5])
rank(var) == rank(updates) + 1
[2,3,1,5]
elewise_calculation_ops.cc:5462-5469
op_graph/arg_max_grad_proto.h:49-57
REG_OP
TensorType
arg_max_grad_tiling_arch35.cpp:181-216
indicesNum == outer × inner
结论:README 改为 squeeze(已改)。修复前「keepdim 会被拒收」只对 A2/A3 成立,A5 会接受。
修复前 A5 行为(var=[2,3,4,5], dim=2,outer=6, D=4, inner=5,门槛 30 个元素):
var=[2,3,4,5], dim=2
outer=6, D=4, inner=5
[2,3,5]
[6,5]
[3,10]
[2,3,2,5]
元素数校验会放行一批不等价形状,存在静默错算风险,也是 ST STRUCT.MIXED_RANK、structure:F1 的根因。已补 rank + 逐维校验,修复后上述非 squeeze 形态全部拒收。
STRUCT.MIXED_RANK
structure:F1
证据(改前)
02_design.md:87
02_design.md:102
var.shape != assist.shape
02_design.md:124
01_requirement.md:106-118/127
arg_max_grad_def.cpp
op_kernel/arch35/arg_max_grad_nd.h:218
GenAssist
arg_max_grad_vf.h:15
结论:A2 4 输入方案(ArgMaxGradD)遗留文本,成立。已按 3 输入口径统一。
ArgMaxGradD
k
arg_max_grad_nd.h:218-250
Duplicate/Adds(int32_t)
Reg::Arange
assist
arg_max_grad_fusion_pass.cc:239
GetDim
int32_t
但反馈的代码依据与本地快照不符
arg_max_grad_tiling_arch35.cpp:69-71
MAX_DIM_SIZE
:213
dimSize > MAX_DIM_SIZE
:69-71
MERGE_*
indicesNum
ops-nn-fix
INT32_MAX
结论:约束本身成立,资料已按「支持范围」补写,并在 A5 tiling 补了 dimSize > INT32_MAX 拒收,现资料与代码一致。评审所引用的 MAX_DIM_SIZE 行号与本地快照不同,可能来自更新分支,但契约与落点已无差异。
dimSize > INT32_MAX
跨代差异结论:同一张带 keepdim indices 的图,在 A2/A3 会被 GE verify 拒收,在 A5 的 kernel/TTK 通路会被接受。A5 的 geir 通路是否复用装机 CANN 的内置 proto verify 未实测,存在两条通路行为不一致的风险。
arg_max_grad_def.cpp:47-48
02_design.md:110
01_requirement.md
[ArgMaxGrad]
[ArgMaxGradD]
arg_max_grad_def.cpp:22
01_requirement.md:40-42/56
01_requirement.md:142-146
scatter_
02_design.md:130
04_golden/GOLDEN_REF.md:10
golden.py:57
01 §6.3
02_design.md:92
temp/artifacts-golden-sync/.../ArgMaxGrad
op_host/arch35/arg_max_grad_tiling_arch35.cpp
CheckShape
indices
CheckAttrAndSplitLayout
tests/ut/op_host/arch35/test_arg_max_grad_tiling.cpp
UT 结果:32 tests from ArgMaxGradTiling,PASSED 32。
32 tests from ArgMaxGradTiling
03_spec.yaml
rank: [1..8]
rank: "any (>= 1)"
02_design.md
k_seg
01 §6.4
torch.where
var/assist shape 不等
ops-nn/index/arg_max_grad/README.md
dimSize
反馈提到的其余 6 项 P2(单因素变异缺失、dimval_015 字段错误、NAN-INT32、TOL-FLOAT、GEIR-2、不支持 dtype 负向覆盖)修改对象是 ST 用例本身,未核对。
ArgMaxGrad 反馈资料核对结论
operator-artifacts/hpc-group/august/ArgMaxGrad的 01/02/03 三份文档、ops-nn/index/arg_max_grad的 README 与源码、canndev 的 A2 实现0. 结论摘要
D <= INT32_MAX校验,UT 32/32 PASS。def.cpp注册 ascend350 属仓库通行的 arch35 计算单元写法(同类算子 README 也不单列该产品),代码不动,只改设计文档表述;注释段名已修正。temp/artifacts-golden-sync拷贝未同步、ST 用例建议回归;其余 6 项 P2 属 ST 用例本身,不在本文范围。1. 反馈 4 项核对
[1,8][1,8]无任何来源,代码无上界D <= INT32_MAX未声明1.1 问题 1:rank 上界
证据
01_requirement.md:47(改前):任意 rank 的 ND03_spec.yaml:12(改前):rank: [1, 2, 3, 4, 5, 6, 7, 8]op_host/arg_max_grad_def.cpp:OpDef 不声明 rankop_host/arch35/arg_max_grad_tiling_arch35.cpp:168-170:仅rank == 0拒收,无上界canndev/ops/built-in/op_proto/elewise_calculation_ops.cc:5462-5469(IsArgMaxGradCheckPass)、arg_max_grad_d.py:48-88(check_param)、arg_max_grad_fusion_pass.cc(无 rank 数组)均只校验 rank 关系,不设上限结论:按方案 A 放开 spec。A5 与 A2 均为「rank >= 1,无上界」。
UT:rank 覆盖已从 1~8 扩到 1~9,含 rank > 8 一档。
1.2 问题 2:keepdim vs squeeze
证据
README.md:37/45(改前):把第 dimension 维置 1、只能是 [2,3,1,5](等价 [2,3,5])IsArgMaxGradCheckPass要求rank(var) == rank(updates) + 1;[2,3,1,5](rank 4)被拒(elewise_calculation_ops.cc:5462-5469)op_graph/arg_max_grad_proto.h:49-57只有REG_OP+TensorType,无 VERIFY_FUNCarg_max_grad_tiling_arch35.cpp:181-216只校验 dimension 范围与indicesNum == outer × inner,不校验 rank 与逐维关系结论:README 改为 squeeze(已改)。修复前「keepdim 会被拒收」只对 A2/A3 成立,A5 会接受。
修复前 A5 行为(
var=[2,3,4,5], dim=2,outer=6, D=4, inner=5,门槛 30 个元素):[2,3,5][2,3,1,5][6,5][3,10][2,3,2,5]元素数校验会放行一批不等价形状,存在静默错算风险,也是 ST
STRUCT.MIXED_RANK、structure:F1的根因。已补 rank + 逐维校验,修复后上述非 squeeze 形态全部拒收。1.3 问题 3:assist 遗留文本
证据(改前)
02_design.md:87:要求「严格读取 assist」,且称「可以传任意 assist」02_design.md:102:DFX 校验var.shape != assist.shape02_design.md:124(§8「省掉 assist」)、01_requirement.md:106-118/127(3 输入、assist 自生成)矛盾arg_max_grad_def.cpp仅 3 输入;op_kernel/arch35/arg_max_grad_nd.h:218(GenAssist)与arg_max_grad_vf.h:15(轴下标内核生成)结论:A2 4 输入方案(
ArgMaxGradD)遗留文本,成立。已按 3 输入口径统一。1.4 问题 4:D 上限未声明
证据
k以 int32 生成(arg_max_grad_nd.h:218-250的Duplicate/Adds(int32_t);VF 内Reg::Arange同为 int32)assist为 int32,且arg_max_grad_fusion_pass.cc:239把GetDim强转int32_t但反馈的代码依据与本地快照不符
arg_max_grad_tiling_arch35.cpp:69-71有MAX_DIM_SIZE注释、:213有dimSize > MAX_DIM_SIZE校验:69-71是MERGE_*常量;:213是indicesNum校验;全文件(含ops-nn-fix副本)搜不到MAX_DIM_SIZE/INT32_MAX结论:约束本身成立,资料已按「支持范围」补写,并在 A5 tiling 补了
dimSize > INT32_MAX拒收,现资料与代码一致。评审所引用的MAX_DIM_SIZE行号与本地快照不同,可能来自更新分支,但契约与落点已无差异。2. A2 兼容性复核
[2,3,1,5]会被拒收」跨代差异结论:同一张带 keepdim indices 的图,在 A2/A3 会被 GE verify 拒收,在 A5 的 kernel/TTK 通路会被接受。A5 的 geir 通路是否复用装机 CANN 的内置 proto verify 未实测,存在两条通路行为不一致的风险。
3. 额外发现(未修改,待定)
def.cpp注册了 ascend950 + ascend350,与 02 §7「只注册 ascend950」及「纯 A5」定位不一致arg_max_grad_def.cpp:47-48vs02_design.md:110、01_requirement.md§4def.cpp注释称 dtype 面对齐[ArgMaxGrad]段,但 01 §3 指出该段为 0、实际为[ArgMaxGradD]arg_max_grad_def.cpp:22vs01_requirement.md:40-42/56[ArgMaxGradD]01_requirement.md:142-146vs A5 proto 无 verifyscatter_,与 GOLDEN_REF 明确禁用矛盾02_design.md:130vs04_golden/GOLDEN_REF.md:10、golden.py:5701 §6.3说明动态 shape,实际应为 §6.402_design.md:92temp/artifacts-golden-sync/.../ArgMaxGrad仍是旧版拷贝4. 已完成的修改(未提交)
4.1 代码(仅 A5,A2/A3 无改动)
op_host/arch35/arg_max_grad_tiling_arch35.cppCheckShape增indicesrank 关系;CheckAttrAndSplitLayout增逐维关系与D <= INT32_MAX校验op_host/arg_max_grad_def.cpp[ArgMaxGrad]→[ArgMaxGradD](无行为变化)tests/ut/op_host/arch35/test_arg_max_grad_tiling.cppUT 结果:
32 tests from ArgMaxGradTiling,PASSED 32。4.2 文档
01_requirement.mdD <= INT32_MAX支持范围03_spec.yamlrank: [1..8]→rank: "any (>= 1)"D <= INT32_MAX02_design.mdkk_seg内核生成01 §6.3→01 §6.4D <= INT32_MAXtorch.where,与 GOLDEN_REF 对齐var/assist shape 不等ops-nn/index/arg_max_grad/README.mdD <= INT32_MAX5. 待决策 / 待修清单
IsArgMaxGradCheckPass在 tiling 补齐:rank 关系、逐维关系;新增 4 条负向 UTD <= INT32_MAX校验MAX_DIM_SIZE与dimSize拒收def.cpp注册 ascend350def.cpp注释段名[ArgMaxGrad]→[ArgMaxGradD]temp/artifacts-golden-sync拷贝未同步6. 不在本文范围
反馈提到的其余 6 项 P2(单因素变异缺失、dimval_015 字段错误、NAN-INT32、TOL-FLOAT、GEIR-2、不支持 dtype 负向覆盖)修改对象是 ST 用例本身,未核对。