Merged
fix: 迁移 RaggedBinCount V2 推导并规范两算子 golden #6538
fix: 迁移 RaggedBinCount V2 推导并规范两算子 golden #6538
Merged
raoliang_sacAdd on 21 days ago
raoliang_sacCollaborators
21 days ago

描述

RaggedBinCount 删除原生 V1 shape 实现及注册,由已有 runtime V2 推导接管;保留 size 值依赖 .InputsDataDependency({2})、输入 shape 及合法性检查。旧 V1 测试替换为 14 条实际 V2 注册入口测试,覆盖不同 shape/相同元素数、空与标量 weights、int32/int64 常量 size、动态维/rank、非法输入和重复推导覆盖输出。

这三份文件选取自 推导迁移 PR #6548 的 e74083196deca466aa0492b904410f9c73ebcf60。只接入 RaggedBinCount,没有接入 MulNoNan、L2Normalize 或 July 任务,原任务分支/PR 保持原状。RaggedBinCount kernel/tiling 未改动。

本 PR 保留已有质量加固:按 golden 规范移除 RaggedBinCount 按用例名切换算法的分支,统一 Torch bincount 并保留 TTK 下发精度;SquareSumAll 输出修为 rank-0、1200 条 CSV 同步修正,不再强制 FP64。两算子示例核对输出数量、dtype、shape、字节数和全部数值。SquareSumAll 无生产代码修改。

关联的Issue

https://gitcode.com/cann/ops-math/issues/3695

测试

2026-10-21 最新提交本地 CI

受测 HEAD:d9ce12b29345e879e47098a556b8cff31a6fe746;主仓 master 快照:d98f2c0ba27be58813200f1a3c9008a092b74ae8。先保留备份并核验 squash 前后同一原始基点的完整二进制 diff 与 tree 一致,再 rebase;当前 PR 相对该主线只有一个提交。

使用指定 /workspace/CI-skills/ci_local_check.sh,本任务独立 CANN_Revise,SOCS=ascend950,ascend910b、JOBS=8,两个仓库顺序执行。统一入口实际输出 pre-commit: PASS 和 定向检查全部通过,退出码 0。完整 PR 静态检查、隔离 OAT、Markdown 链接、示例 SKIP 退出契约和 golden Python 语法检查通过。

阶段 结果 覆盖说明
normal pkg/ascend950 PASS 构建/门禁通过;日志未报告 GTest 用例数
normal package GE ABI/ascend950 PASS 构建/门禁通过;日志未报告 GTest 用例数
normal ophost/ascend950 PASS 实际运行 127 条 GTest
normal Host UT GE ABI/ascend950 PASS 构建/门禁通过;日志未报告 GTest 用例数
normal opapi/ascend950 PASS 实际运行 0 条 GTest
normal opgraph/ascend950 PASS 实际运行 1 条 GTest
normal opkernel/ascend950 PASS 构建/门禁通过;日志未报告 GTest 用例数
normal pkg/ascend910b PASS 构建/门禁通过;日志未报告 GTest 用例数
normal package GE ABI/ascend910b PASS 构建/门禁通过;日志未报告 GTest 用例数
normal ophost/ascend910b PASS 实际运行 56 条 GTest
normal Host UT GE ABI/ascend910b PASS 构建/门禁通过;日志未报告 GTest 用例数
normal opapi/ascend910b PASS 实际运行 0 条 GTest
normal opgraph/ascend910b PASS 实际运行 1 条 GTest
normal opkernel/ascend910b PASS 构建/门禁通过;日志未报告 GTest 用例数

0 条用例或只有构建目标通过的阶段不计为单测覆盖;本地 CI 没有新增 NPU/GPU 数值回归,不替代下方历史精度 FAIL、正式整包集成与性能验收。线上 CI 流水线已由机器人确认启动,结果待返回。

此前 README 清理时获取的 master:3e45432dc9ed21cd5b00f4fa12c06d9dc7800939;最终 HEAD:066a732fc31b6d00f4402956aa0d27152cb1533c。

本轮仅删除 RaggedBinCount、SquareSumAll README 中新增的通用安装、环境加载、build.sh 运行命令及产物路径说明,共 16 行。保留必要接口/能力修正、原有示例和 IR 链接。相对上一轮受测提交 78ec51268e0ce5254f140906b93072f6c7a21de7,两个算子的生产代码、golden、测例及示例均逐字节未变;完成 diff 检查、文档链接/编码/围栏和渲染检查,没有为删说明重复运行 NPU。

以下为此前注册迁移和数值核实的历史验证,非本轮重跑:

任务独立 Master/Revise CANN,Ascend950PR_9579;真实 GPU A100-PCIE-40GB、Torch 2.14.1+cu130。构建最多 8 jobs;全部 TTK 显式 --pc=1。该轮 TTK 为 3db54be4b479d487ffd44300046ffa664789edea,包含本地比较修复。对应 TTK PR #483 已由用户关闭;下面的 19/19 不能表述为未修改 TTK 主线的通过结果。原比较器结果为 17 PASS、2 FAIL。

  • 该轮两算子包构建、安装完成。Ragged Host/Graph UT 为 85+1=86/86,包含新增 14 条 V2 注册 UT;导入生产文件和新测试与来源逐字节一致,没有合并冲突。
  • 原 19 条冻结失败实际 GPU 三方 19/19 PASS,全部 BINARY_MATCH、TTK OOB 检查 PASS,输入不变。此前两条正确 FP32 舍入结果被误判的比较逻辑已在 TTK PR #483中提交过修复(该 PR 现已关闭),258 项比较测试通过;没有修改本算子 golden、输出或容差。
  • 静态/动态 GEIR 分开记录:当前安装周包直接执行 6 例为 4 PASS、2 EXEC_FAILURE。trace 确认仍进入旧 libopsproto.so V1,两个 values/weights shape 组合报错。
  • 仅隔离 RaggedBinCount 旧 V1 的诊断运行,6 例静态/动态 12 条路径全部通过,trace 确认选中当前 custom_math 的原生 V2。canndev 最新源码已有产品隔离,但没有重建正式 canndev 产品包,因此不能把诊断结果当作正式整包集成验收,也没有恢复 V1 规避问题。
  • 部署通用自检仍提示 math 分组层缺少 inc/;这两个 kernel 依赖自身头与 CANN 头,已部署 common/,实际目标图编译运行通过。该告警日志保留,不写成全部自检通过。
  • 新提交钩子通过。历史验证保留:SquareSumAll 56/56 两方 Kernel;Ragged 4 条、Square 3 条合法静态/动态 GEIR;两个文档示例编译上板并核对全部输出。本轮未重复全量执行。
  • SquareSumAll 原 29 条 L2 的历史结果仍为 7 FAIL、22 SKIP,未重现 builtin V1 SIGABRT;框架异常和不支持输入不计作精度 PASS。5 条非法 GEIR受控报错、2 条 BF16 经 GE Cast 的固定数值诊断结果见此前验证。

此前注册迁移阶段未执行完整本地 CI、性能回归或全矩阵三方;本次双平台本地 CI 和线上触发见最新追加记录。旧 CANN 注册的正式整包集成验证仍待完成。

文档更新

按用户要求删除上述两份 README 的冗余环境准备与运行说明,保留必要的动态 shape/接口约束修正、正确产品能力和原有示例链接。示例源码及已经核实的输出检查保持不变。

类型标签

AI/Agent生成声明

likedislike
Pull Request has been successfully merged by CANN-robot.
(Thank you for raoliang_sac's contribution.)
Rraoliang_sacCollaborators
21 days ago Created pull request, commit 820087e8
Rraoliang_sacCollaborators
21 days ago Associated issue: test
atomgit-bot
atomgit-bot
21 days ago Comments:

变更摘要

本 PR 按 golden 规范统一了 RaggedBinCount 与 SquareSumAll 两个算子的参考计算精度与输出合同。RaggedBinCount 删除了按 testcase_name 切换到独立精确超累加器 oracle 的分支,所有用例统一使用按行 torch.bincount 并按 TTK 下发/提升的 weights_flat.dtype 累加,同时补齐整数输入类型(int32/int64)的容差判据;SquareSumAll 的输出由 reshape(1) 改为 rank-0 标量 reshape(()),参考计算不再强制 FP64,而是保持 TTK 下发精度(Promote 时仍保留提升后的精度)。配套新增/重写 CPU-only 合同测试、强化示例程序的输出校验与失败返回,并同步 CSV 用例与文档说明。Kernel 实现未改动。

主要改动

  • RaggedBinCount 参考实现去分支化: math/ragged_bin_count/tests/assets/golden.py 移除了 _exact_sum、_float32_from_exact_units、_float64_from_exact_units、_compute_exact_weighted_reference 及基于 _PRECISION_SPECIAL_WEIGHTS 的 testcase 名分支,_compute 统一以 weights_flat.dtype 建累加器并按行 torch.bincount,精度只由输入 dtype 决定。
  • 补全整数输入类型判据并简化适配层: _TOL 新增 int32/int64 的 binary_equal 条目,_kernel_golden 不再按 output_dtypes 做 astype 转换,ragged_bin_count_golden 也不再注入默认 output_dtypes,输出 dtype 直接沿用计算结果的 dtype。
  • SquareSumAll 输出合同改为 rank-0: _reduce_one 改为 np.array(x, copy=True, order="C") 并 reshape(()),不再转 float64;_Compose 同步由 reshape(1) 改为 reshape(()),两路输出均为标量,与 InferShape 接口一致。
  • 示例程序增加输出校验与失败返回: math/ragged_bin_count/examples/test_geir_ragged_bin_count.cpp 中 ProcessOutputData 改为返回 bool,校验输出个数、dtype、shape、字节数及逐元素数值,main 在输出非法时返回 FAILED,图配置失败时调用 ge::GEFinalize(),并显式 delete session。
  • 新增/重写 CPU-only golden 合同测试: 新增 math/square_sum_all/tests/ut/test_golden_contract.py,验证标量 shape、下发精度保持与 _Compose 返回 FP32 标量;math/ragged_bin_count/tests/ut/test_ragged_bin_count_golden.py 重写为参数化测试,覆盖精度随权重 dtype 而非用例名、Promote 溢出、非法 splits 返回正零、binary_output 不读权重及相反无穷大传播 NaN 等合同点。

此外,依据 PR 描述,SquareSumAll 的 1200 条 Kernel/GEIR CSV 同步改为标量输出,RaggedBinCount CSV 中未引用的逗号被修复,文档补充了动态 shape 含义、执行期约束及图模式示例构建命令。


🧩 本次 Review 已使用自定义 Skill:

likedislike
Incorrect?
atomgit-bot
atomgit-bot
21 days ago Comments:

代码审查

✅ 未发现问题


🧩 本次 Review 已使用自定义 Skill:

likedislike
Incorrect?
Rraoliang_sacCollaborators
21 days ago Modify description of pull request
51 messages are collapsed here。 See more
CANN-robotCANN-robotCollaborators
19 days ago Added label: lgtm
CANN-robot
CANN-robotCollaborators
19 days ago Comments:

The MR can not be merged, because of CodeReview discussion not resolved

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
Rraoliang_sacCollaborators
18 days ago Resolved final issue
CANN-robotCANN-robotCollaborators
18 days ago Closed associated issue
CANN-robotCANN-robotCollaborators
18 days ago Merged pull request