已关闭
[Bug-Report|缺陷反馈]: PSROIPoolingV2 Golden拒绝Promote float64导致GEIR用例失败 #6578
陈展熹创建于  2 天前关闭于  2 天前
陈展熹成员
2 天前 创建

Describe the current behavior / 问题描述 (Mandatory / 必填)

PSROIPoolingV2 的 pooling/psroi_pooling_v2/tests/assets/golden.py 在 TTK GEIR cross_check 精度比较中拒绝 Promote 后的 float64 输入,导致 Golden 生成失败,无法完成数值比较。

TTK 为获得高精度真值将原 float32 输入提升为 float64;Golden 计算核心本来支持 float64,但入口只允许 float16/float32,提前抛出:

Golden generation failure: x/rois must have the same float16 or float32 dtype
precision=GOLDEN_FAILURE / FAIL

这不是已经完成数值比较后的 kernel 精度失败,也不是 CSV 声明错误:设备输入/输出仍为 float32,只有高精度参考输入被 Promote 为 float64。

原始缺陷及附件:https://gitcode.com/wangyueting/changwei_hebaojing/issues/23

Environment Information / 环境信息 (Mandatory / 必填)

  • 回归硬件:Ascend950PR。
  • CANN:9.2.0。
  • Python:3.12.9;Torch CPU:2.7.1+cpu。
  • 测试框架:ops-test-kit,源基线 46fe46ebdbb60f07a63662a6419cb67c17efc55f。
  • 正式源码基线:cann/ops-nn master 3f80c6707107c5dcd793187fdc0b4dbc0819f8a5。
  • 模式:GEIR const,原 Spec cross_check L1,第三方为真实 Torch CPU provider。

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 在修复前基线检出 ops-nn,准备 NumPy/Torch CPU;从仓根目录执行下面的独立最小复现(模拟 TTK 对 float32 输入的 Promote):
import importlib.util
from pathlib import Path
import numpy as np

path = Path("pooling/psroi_pooling_v2/tests/assets/golden.py")
spec = importlib.util.spec_from_file_location("psroi_golden", path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
x = np.array([1, 3, 5, 7], dtype=np.float64).reshape(1, 1, 2, 2)
rois = np.array([0, 0, 0, 1, 1], dtype=np.float64).reshape(1, 5, 1)
y = module.PsroiPoolingV2TestSpec.golden(
    x, rois, spatial_scale=1.0, output_dim=1, group_size=1,
    golden_mode="Promote",
)[0]
assert y.dtype == np.float64 and y.item() == 4.0

修复前在 dtype 入口校验抛出 TypeError;修复后返回 float64 的 4.0。

  1. 使用原 issue 附件中的 GEIR 用例,保留设备 float32 输入、原 Spec cross_check L1 及既有判据;分别选择 PSROIPoolingV2_L0_accuracy_perf_c_s_002、PSROIPoolingV2_L0_accuracy_perf_c_s_008 回归。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

  • 仅在 golden_mode == "Promote" 时允许 float64,保证高精度真值不被降回 float32。
  • x/rois 仍必须使用相同 dtype;非 Promote 模式仍仅允许 float16/float32。
  • 不扩展正式算子的 dtype 支持,不改数学计算核心、第三方 Torch 计算、精度阈值、kernel 或原用例。
  • 两条用例正常完成 Golden 生成和精度比较。

已完成修复及实际回归:

用例 结果 保存的 Golden / 设备输出 数值证据
PSROIPoolingV2_L0_accuracy_perf_c_s_002 PASS float64 / float32;shape (48456,93,1,1) 最大绝对误差 7.947285973752827e-08,无 NaN/Inf
PSROIPoolingV2_L0_accuracy_perf_c_s_008 PASS float64 / float32;shape (9186,1,127,127) 148160994 个 +Inf 完全一致;0 NaN、0 -Inf

每条 NPU 实际执行 3 次,输出 MD5 一致;cst_precision=PASS、precision_status=PASS、deterministic_status=PASS。原 Spec cross_check L1 判据未放宽。

额外公共接口行为测试:三份本地 Golden 36/36 PASS;PR 版本重新执行 12/12 PASS,TTK SpecLoader 的 Promote 调用及 Python 语法检查 PASS。

Special notes for this issue/备注 (Optional / 选填)

修复 PR:https://gitcode.com/cann/ops-nn/pull/11830 (已提,尚未合并)。

单提交:a0df562f11027c64824444cf98b7d005bed5f8be;仅修改 Golden 入口的 Promote float64 准入、函数说明和错误信息,共 1 文件,9 行新增、2 行删除。共享计算 core 和 TestSpec 判据保持原样。

本次只回归上述 002/008,不宣称全量通过。三方仅验证 Torch CPU 功能,未验证 GPU 三方性能,本轮没有可报告的 CST kernel 耗时。不修改已有 OPP 包,也不将原 issue 中历史性能数据当作本轮结果。

likedislike
CANN-robotCANN-robot成员
2 天前 关闭了 issue
CANN-robotCANN-robot成员
2 天前 添加了label:resolved