Merged
[Atanh] 修复原地 Golden 输入污染并兼容 TF 输入 #7021
陈展熹Add on 12 days ago
[Atanh] 修复原地 Golden 输入污染并兼容 TF 输入 #7021
Merged
Pull Request has been successfully merged by CANN-robot.
(Thank you for 陈展熹's contribution.)atomgit-bot
12 days ago Comments:
12 days ago Comments:
变更摘要
本 PR 针对 math/atanh/tests/assets/golden.py 中的原地 Atanh 测试规格 AclnnInplaceAtanhTestSpec,完善原地接口的返回别名关系与 Torch 第三方参考合同:写回后返回 inputRef 本身而非新计算结果,显式拒绝整型与 BOOL 输入,并补充基于 torch.atanh_() 的第三方适配器,同时在文件头说明中同步该原地通路的合同描述。
主要改动
- 原地返回保持别名关系:
AclnnInplaceAtanhTestSpec.golden在inputRef.copy_(result)写回后改为返回[inputRef],使返回对象与传入的inputRef指向同一张量,替代原先返回新计算的result。 - 拒绝非法输入类型: 在
golden入口新增类型校验,当inputRef既非浮点也非复数时抛出TypeError,避免整型/BOOL 输入经普通 atanh 计算后被隐式转换并写回。 - 新增 Torch 原地第三方参考: 增加内部类
ThirdPartyImpl,其__call__返回[inputRef.atanh_()],并通过third_party = {"torch": ThirdPartyImpl}注册,支持位置参数与inputRef关键字调用。 - 更新原地合同说明: 修改类文档字符串以说明按原始
inputRefdtype 原地写回并返回同一张量,模块头注释调整为Kernel/GEIR的 third_party 保持原样、ACLNN 原地通路提供torch.atanh_参考。
🧩 本次 Review 已使用自定义 Skill:


Incorrect?
atomgit-bot
12 days ago Comments:
12 days ago Comments:
代码审查
检视结论
变更文件覆盖情况
math/atanh/tests/assets/golden.py:已逐条检视(文档说明行 24、AclnnInplaceAtanhTestSpec.golden的类型拒绝与返回别名 114-123、新增ThirdPartyImpl125-127),发现 1 个问题。
已核对且判定无问题的点
- 新增的
is_floating_point()/is_complex()拒绝与op_api/aclnn_atanh.cpp:70-73的原地支持列表(FLOAT/FLOAT16/DOUBLE/BF16/COMPLEX64/COMPLEX128)一致,整型/BOOL/uint8 确实应被拒绝,未与AclnnAtanhTestSpec的非原地通路(支持整型经 cast)产生矛盾。 - 使用
TypeError表达 aclnn 侧 dtype 拒绝,与仓内既有做法一致(bitwise_and/tests/assets/golden.py:130、left_shift/tests/assets/golden.py:195)。 ThirdPartyImpl未定义__init__(self, **kwargs):该通路无属性(CSV attributes 为空),且inv、left_shift的三方类同样未定义,属允许写法;按输入原型名inputRef接收参数,与aclnnInplaceAtanhGetWorkspaceSize(inputRef)契约一致。- 返回
[inputRef]保持与输入同一对象、dtype/shape/stride 不变,符合 PR 声明的原地别名合同;FP16/BF16 升 FP32 计算再 cast 回写的既有数值链未被改动。
问题统计:P0 0 个 / P1 0 个 / P2 1 个 / P3 0 个。
整体风险判断:变更范围极小、方向正确(补齐原地别名返回、非法 dtype 拒绝、torch 参考),主要风险集中在新增第三方参考对框架输入做原地改写这一点——它与仓内“原地标杆先 clone”的既有约定相反,是否实际触发取决于 TTK 是否为各 provider 独立拷贝输入,属中等偏低风险,建议按 clone 方式收敛后再合入。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论
🧩 本次 Review 已使用自定义 Skill:


Incorrect?
12 days ago Added label: cann-cla/yes
57 messages are collapsed here。 See more
4 days ago Removed label: ci-pipeline-running
4 days ago Added label: ci-pipeline-passed
xuejinghui
4 days ago Comments:
4 days ago Comments:
/lgtm


4 days ago Added label: lgtm
4 days ago Merged pull request
描述
完善 Atanh 原地 ACLNN 通路的测试参考,修复 Golden 改写共享输入造成的精度失败。
TTK 在设备执行前生成 Golden。原来的
AclnnInplaceAtanhTestSpec.golden通过inputRef.copy_(result)写回共享输入;FP64 不会创建升精度副本,后续 ACLNN 调用收到的已经是第一次 atanh 的结果。例如输入 1 会先被 Golden 写成 Inf,设备再计算 atanh(Inf) 得到 NaN。本 PR 的最终行为:
inputRef参数,计算后按其 dtype 完整转换,返回独立的[result],保持框架输入及底层存储不变。inputRef的 Torch 三方适配器,使用[inputRef.clone().atanh_()],使重复参考调用相互独立。(0,)回读设备输入缓冲区进行验证;Golden 的 Python 返回对象不承担设备别名验证。本次仅修改
math/atanh/tests/assets/golden.py,包括对应说明。既有注册、数值计算 helper、FP16/BF16 提升规则、输出 dtype 映射和 Kernel/GEIR L0 标准保持一致。关联的Issue
该精度 issue 的 CI 使用 operator-artifacts 中的独立 Golden;本 PR 更新 ops-math 的同类资产,归档仓 Golden 需单独同步后才能对该 CI 生效。
测试
python3 -m ttk aclnn通路,直接加载本 PR 修改后的 math Golden,回放 issue 中 002、003 的原始输入 dump;每条执行 3 次、确定性级别 1,精度和确定性均 PASS。8.881784197001252e-16;003 的16,627,603个输出全部为正 Inf,与 Golden 一致。a89e7962。本轮验证本地 ACLNN/NPU 精度,未采集远端三方或性能数据,不代替 CI 精确构建的验收。git diff --check及 AST 范围核验通过。三方适配器内的 clone 会增加分配与拷贝开销,其整体耗时包含 clone。
文档更新
更新 Golden 文件中的输入保留和独立返回值说明。
类型标签
2026-11-11 补充:TF Golden 输入兼容
关联问题: https://gitcode.com/wangyueting/changwei_yezhao/issues/90
归档仓对应修复: https://gitcode.com/opencann/operator-artifacts/pull/417
问题为 TF EagerTensor 被直接送入要求 NumPy 数组的转换函数,导致
TypeError: expected np.ndarray (got tensorflow.python.framework.ops.EagerTensor),TTK 最终判为GOLDEN_FAILURE。math 原 Golden 未注册
tf.math.atanh。本次在同一文件math/atanh/tests/assets/golden.py补入独立的TensorFlowAtanhTestSpec:TF 输入经np.asarray(x.numpy())归一化,支持零维标量、空张量和 Variable;借助现有 dtype 转换工具及_atanh_reference/_numpy_result生成 NumPy 参考输出,保持输入 dtype/shape,并提供 TF 三方映射。既有 Kernel/GEIR 和 ACLNN Spec、数值辅助函数、原地输入隔离逻辑保持原样,Kernel/GEIR 仍只支持 FP16/BF16/FP32 并使用 L0;本次未新增 FP64 容差标准。
验证:
(7,406692,7)、FP16(2451122,);按源仓范围和固定种子 9001/9002 生成输入,Golden 生成、shape/dtype 和输入保持检查通过。环境:TensorFlow CPU 2.21.0、Torch 2.7.1+cpu、恢复树 ops-test-kit。本次未取得原 CI 输入 dump,未执行 NPU eager/graph_cst/graph_dyn 精度回归;CPU 检查不作为设备精度结论。关联 issue 不自动关闭。