Prhub

#41341 [ROCm][CI] Add ROCm score absolute tolerance floor

原始 PR 作者 AndreasKaratzas 合并时间 2026-05-01 09:59 文件变更 1 提交数 1 评论 0 代码增减 +17 / -3

执行摘要

ROCm 测试绝对值容差优化

修复 ROCm 7.2/gfx950 上交叉编码器视觉测试中低概率文本对比文本分值的微小数值漂移问题(漂移约 0.005-0.006),同时保持对较大分值(如图像和多模态)的严格容差。

该 PR 值得快速合入,因为它是针对特定硬件平台测试稳定性的低风险调整。设计决策(绝对值与相对值组合)值得参考,但无需深入研读。

讨论亮点

Reviewer Bortlesboat 确认方法正确,指出 pytest.approx(expected, rel=tol, abs=abs_tol) 在底层使用 max(rel * |expected|, abs),因此绝对值下限仅在相对容差低于它时才生效。通过示例验证了阈值设置合理:对于期望值约 0.1 的文本对比文本分值,相对容差与绝对值下限相当;对于较大期望值,相对容差仍主导。

实现拆解

  1. 新增绝对值容差配置:在 tests/entrypoints/pooling/scoring/test_cross_encoder_online_vision.py 中,添加 BACKEND_ABS_TOL 字典,为 defaultROCM_AITER_FAFLEX_ATTENTION 后端指定绝对值容差(分别为 0.0、0.005、0.006)。
  2. 新增辅助函数:实现 get_abs_tol(backend: str) -> float 函数,从字典中获取绝对值容差,若 backend 未定义则返回默认值。
  3. 更新断言逻辑:修改 assert_score 函数,获取绝对值容差并在 pytest.approx 中添加参数 abs=abs_tol。同时更新调试打印和断言消息以包含绝对值容差值。
文件 模块 状态 重要度
tests/entrypoints/pooling/scoring/test_cross_encoder_online_vision.py 测试 modified 5.49

关键符号

get_abs_tol

关键源码片段

tests/entrypoints/pooling/scoring/test_cross_encoder_online_vision.py test-coverage

唯一的变更文件,添加了绝对值容差配置和相关函数,修改了断言逻辑。

# ... (before assert_score)# ROCm 7.2/gfx950 shows small absolute drift on the low text-vs-text
# probability even though larger scores remain well inside the relative
# tolerance. Keep the relative tolerances tight and add only a small floor.
BACKEND_ABS_TOL: dict[str, float] = {
    "default": 0.0,
    "ROCM_AITER_FA": 0.005,
    "FLEX_ATTENTION": 0.006,
}def get_abs_tol(backend: str) -> float:
    return BACKEND_ABS_TOL.get(backend, BACKEND_ABS_TOL["default"])def assert_score(actual: float, expected: float, backend: str, label: str):
    tol = get_tol(backend)
    abs_tol = get_abs_tol(backend)
    diff = abs(actual - expected)
    rel_diff = diff / abs(expected) if expected != 0 else diff
    print(
        f"[{backend}] {label}: actual={actual:.6f} expected={expected:.6f} "
        f"diff={diff:.6f} rel_diff={rel_diff:.4f} tol={tol} abs_tol={abs_tol}"
    )
    assert actual == pytest.approx(expected, rel=tol, abs=abs_tol), (
        f"[{backend}] {label}: score mismatch — "
        f"actual={actual:.6f}, expected={expected:.6f}, "
        f"rel_diff={rel_diff:.4f}, tol={tol}, abs_tol={abs_tol}"
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

该变更仅影响测试文件,不涉及生产代码。风险极低,主要风险为万一硬件行为变化导致绝对值容差设置过快或过慢,但范围非常窄(仅 ROCM_AITER_FAFLEX_ATTENTION 后端且仅对低分值生效)。

影响范围限于 ROCm 平台上的交叉编码器在线视觉测试,特别是使用 ROCM_AITER_FAFLEX_ATTENTION 注意力后端的场景。变更后测试将更稳定,减少因数值漂移导致的假阳性失败,同时保持对较大分值的敏感性。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论