Closed
[Bug-Report|缺陷反馈]: July算子图推导、属性与GE示例质量加固 #6947
raoliang_sacAdd on 21 days agoClosed at 19 days ago
21 days ago Added label: bug-report
21 days ago Assign raoliang_sac as responsible person
Rraoliang_sac
21 days ago Change title to "[Bug-Report|缺陷反馈]: SGD校验、Relu6Grad广播推导与GE示例质量问题", originally titled "[Bug-Report|缺陷反馈]: SGD属性校验与参考实现及GE示例质量问题".
21 days ago Change title to "[Bug-Report|缺陷反馈]: SGD校验、Relu6Grad广播推导与GE示例质量问题", originally titled "[Bug-Report|缺陷反馈]: SGD属性校验与参考实现及GE示例质量问题".
21 days ago Modify description of issue
Rraoliang_sac
21 days ago Change title to "[Bug-Report|缺陷反馈]: July算子图推导、属性与GE示例质量加固", originally titled "[Bug-Report|缺陷反馈]: SGD校验、Relu6Grad广播推导与GE示例质量问题".
21 days ago Change title to "[Bug-Report|缺陷反馈]: July算子图推导、属性与GE示例质量加固", originally titled "[Bug-Report|缺陷反馈]: SGD校验、Relu6Grad广播推导与GE示例质量问题".
21 days ago Modify description of issue
21 days ago Modify description of issue
21 days ago Modify description of issue
20 days ago Modify description of issue
20 days ago Modify description of issue
19 days ago Close issue
18 days ago Added label: resolved
2026-10-22当前交付范围:
复用本任务已有Issue,不重复建单。拆分后各自单提交,组合patch/tree与原提交一致;旧CI/设备结果保持原SHA归属。L2示例的集成构建问题已在PR #12515加入入口隔离修复,配置复现对照和独立示例编译链接通过;尚不声明线上CI通过。配套CANN集成验证仍待完成,不要求官方发布包。下文为拆分前历史记录。
2026-10-21统一交付: 原PR #12383的全部修改已归入https://gitcode.com/cann/ops-nn/pull/12376,统一提交`ee32add3c8cab98119bf26641a87b2e887686367`。当前包含Relu6Grad原生V1桥接删除,正式canndev配套包验证仍未完成,不能沿用历史兼容版本的普通环境通过结论。以下既有验证记录保留原受测提交归属。
Describe the current behavior / 问题描述
主仓master
04524e624e486bbcd2c55ac2419ca539b2dda1f7存在以下可从源码确认的问题:SGD InferShape的weight_decay < 0判断不能拒绝NaN;golden形参的默认0/False遮蔽attributes字典,CPU参考计算还可能与float32设备计算共享中间值溢出。SGD示例的多个Data索引相同,缺少完整结果校验和文件写入错误处理;NormalizeBBox示例也未完整校验FP16输出。相关文档、索引及测试资产注释存在与交付内容不一致的表述。Environment Information / 环境信息
9627dffbfe0befe01b41efbe6fb446a0435c9496。Steps to reproduce the issue / 重现步骤
optim/sgd/op_host/sgd_infershape.cpp:NaN与0比较时,< 0为false,不能阻断非法属性。optim/sgd/tests/assets/golden.py的参考入口,通过attributes字典传入非零weight_decay/dampening或true的nesterov,与相同属性的显式关键字调用比较。parameters * weight_decay超出float32范围的参考计算,检查CPU参考中间值。Describe the expected behavior / 预期结果
InferShape拒绝NaN属性;golden正确处理两种属性传参并保留显式零值优先级,使用独立的高精度CPU中间结果;示例核对shape、dtype和全部可观察输出,失败时返回非零并释放资源;文档与公开接口、交付内容一致。
Related log / screenshot / 日志
修复后TTK GEIR正向11/11通过,4个原样GE示例变体通过,6组CPU参考契约检查通过,SGD写文件失败负向通过。动态GEIR实际日志:
Special notes / 备注
本次补扫追加修订提交:
6b3313ff2f7f5b33b3a165b97326d3116d07984a。Relu6Grad:静态图广播推导、编译信息回退、参考实现及GE示例
op_graph/relu6_grad_graph_infer.cpp:补齐GE静态图V1推导注册。修复前双向广播(2,1,5)与(1,3,1)的输出被内置推导覆盖为(2,1,5),在Tiling阶段失败;现在复用Ops::Base::BroadcastShape得到(2,3,5),同时更新输出origin shape及dtype。通过转换保留未知维、未知rank及标量语义,转换前校验runtime Shape容量;与原有动态图V2广播规则保持一致。op_host/arch35/relu6_grad_tiling_arch35.cpp:将TilingParse<ElewiseCompileInfo>改为TilingParse<Ops::Base::BroadcastCompileInfo>。原16字节结构与广播框架读取的24字节结构布局不同,平台对象为空时可能误读coreNum并越界读取ubSize;原TilingPrepare还直接返回成功而不初始化字段。现在校验编译信息和平台指针,写入真实AIV核数与UB容量,使解析和回退读取使用同一类型。op_host/arch35/relu6_grad_tiling_arch35.h:修正构造函数格式和多余分号;现有Host UT同步改用BroadcastCompileInfo。Host UT的实际执行范围见下文。tests/assets/golden.py:Kernel/GEIR的CPU参考改用PyTorch严格比较和where选择,浮点中间值使用float64,按原dtype回传,Promote模式保留float64;支持NumPy的BF16输入。修复本地TTK加载TensorFlow时在生成golden阶段崩溃的问题。TestSpec及legacy golden同时注册relu6_grad和Relu6Grad,兼容两种CSV命名。TensorFlow E2E仍使用框架原生CPU参考及原有乘掩码三方参考,没有将这一路径改为Kernel的Select语义。examples/arch35/test_geir_relu6_grad.cpp:输入数组使用unique_ptr管理并检查分配与SetData返回值;第二Data索引改为1,补齐两个Data的输出描述;Session使用nothrow分配。结果必须恰有一个输出,核对完整shape、dtype、字节数、数据指针及全部数值,空输出列表不能再误报成功。保留原有24个场景,并加入双向广播和rank=8广播两个回归场景;增加--list及按场景名执行入口,支持逐场景独立进程验证。examples/arch35/CMakeLists.txt:补充与当前CANN目录布局相符的独立GE示例构建配置,通过ASCEND_HOME_PATH定位头文件和四个GE库。本次Relu6Grad补扫验证
Relu6Grad注册名入口。(2,3)与(4)经TTK到达GE推导后按预期拒绝。新增Host UT源码未单独执行;NaN路径通过TTK动态GEIR验证。INTrainingReduceV2改动仅为失效注释和测试资产位置说明,保留其他产品原有支持信息。
任务分支:
fix/july-five-ops-hardening-20261020。关联 PR:https://gitcode.com/cann/ops-nn/merge_requests/12376
接手推导注册任务后的补充(2026-10-20)
L2Normalize:V2推导、图声明校验及示例输出检查
VERIFY_FUNC_REG,在推导覆盖前校验用户原始输出shape、已知dtype、输入rank及ND格式。Verify属于图校验,不能随V1 shape注册一起删除。examples/test_geir_l2_normalize.cpp:检查唯一输出的shape、dtype、256字节缓冲及全部64个数值;全1输入每行16个元素,期望输出为0.25,拒绝非有限值和误差超过1e-6的结果。接手合并后验证(当前普通CANN环境)
0415d02e8b887baee227edd7e6c88211f97e58fb;TTK使用July本地提交92496503b70e2e05892d15dd5b78d1f80eae77df,当前算子仓golden,导入并校验哈希的冻结输入;--pc=1,Promote/stat_rel_err。构建并行度≤8。3b973bc51a95e6d36b964656a28536b74957e079的继承证据,没有冒充本次重跑。INTrainingReduceV2的另一设备基线/修改版均存在芯片不支持的Tiling阻塞,未关闭。本Issue对应PR:https://gitcode.com/cann/ops-nn/pull/12376。完整去除Relu6Grad兼容入口单列PR #12383,正式canndev隔离包未完成集成验证。RaggedBinCount不在本次接手范围。
README精简(2026-10-21)
Relu6Grad、L2Normalize README删除多余的编译运行段落及场景选择说明,保留原有调用表、示例和算子IR链接。示例源码、CMake配置及算子实现未变。
2026-10-21文档精简提交
168b69ee8dda61a6a5d292ec69b1d1e6154d5e82:完成本次范围的README检查、链接/调用表渲染、diff及提交钩子检查;确认相对上一提交仅README变化,未重跑NPU、TTK或构建。此前设备验证仍归属原受测提交。正式包验证继续跟进:https://gitcode.com/cann/ops-nn/issues/6956。