已关闭
[Bug-Report|缺陷反馈]: 多个算子 arch35 测试精度校验使用混合精度校验规则 #319
justsheldon创建于  7月17日关闭于  7月20日
justsheldon成员
7月17日 创建

Describe the current behavior / 问题描述

ops-blas 多个算子的 arch35 测试(gemv_batched、getri_batched、getrs_batched、matinv_batched、strsv、stpsv、ssyr、ssyr2、sgbmv、sgels_batched、sgetrf_batched)在精度校验时统一使用固定的 PrecisionMode::MERE_MARE 模式,阈值由 CSV 参数 mereThreshold/mareMultiplier 静态指定。该方式在 FP16/BF16 等混合精度场景下无法自适应数据范围与精度位宽,导致校验误报失败;部分算子(如 tpsv)在 diag == ACLBLAS_UNIT 时未对输入做缩放,数值放大后进一步触发精度问题;getri_batched 还存在哑元矩阵构造代码重复。

Environment / 环境信息

  • 硬件:Ascend950(arch35)
  • 软件:CANN ops-blas test 框架
  • 涉及测试目录:test/gemv_batched、test/getri_batched、test/getrs_batched、test/matinv_batched、test/trsv/strsv、test/tpsv/stpsv、test/syr/ssyr、test/syr2/ssyr2、test/gbmv/sgbmv、test/gels_batched/sgels_batched、test/getrf_batched/sgetrf_batched

Steps to reproduce the issue / 重现步骤

  1. 在 arch35 环境下运行上述任意算子的 arch35 测试
  2. 当数据范围较大或 dtype 为 FP16/BF16 时,MERE_MARE 固定阈值与实际精度位宽不匹配
  3. tpsv 在 diag == ACLBLAS_UNIT 时未缩放,矩阵条件数偏大时精度校验失败

Describe the expected behavior / 预期结果

精度校验应采用混合精度容差模式 applyMixedTolerance,依据输出数据类型(ACL_FLOAT/ACL_FLOAT16/ACL_BF16)与 golden 数据范围自适应计算容差,避免固定阈值在混合精度场景下的误报;tpsv 对 UNIT diag 做缩放处理;getri_batched 抽取公共 MakeDummyConstMatrices 辅助函数消除重复代码;getrs_batched 测试文件去除精度前缀 s 以支持多精度。

PR #285 已提供测试通过截图:https://raw.gitcode.com/user-images/assets/8916851/8a98dfbc-6fc1-4b25-9629-b61f35489f59/image.png

Special notes for this issue/备注

关联 PR:https://gitcode.com/cann/ops-blas/pull/285

likedislike
Jjustsheldon成员
7月17日 添加了label:bug-report
justsheldon成员
7月17日 评论:

/assign @justsheldon

likedislike
CANN-robotCANN-robot成员
7月17日 将 justsheldon 设为负责人
Jjustsheldon成员
7月17日 修改标题为 “[Bug-Report|缺陷反馈]: 多个算子 arch35 测试精度校验使用混合精度校验规则”,原标题为“[Bug-Report|缺陷反馈]: 多个算子 arch35 测试精度校验使用固定 MERE/MARE 阈值,混合精度场景下误报失败”
CANN-robotCANN-robot成员
7月20日 关闭了 issue
CANN-robotCANN-robot成员
7月20日 添加了label:resolved