Closed
[Bug-Report|缺陷反馈]: experimental LogAddExp 的 FP16/BF16 路径对同号无穷大返回 NaN #3472
puppyAdd on Oct 11Closed at 11 days ago
Oct 11 Associated pull request
陈思
Oct 11 Comments:
Oct 11 Comments:
/assign @hanggongmao1


Oct 11 Assign hanggongmao1 as responsible person
puppy
Oct 11 Comments:
Oct 11 Comments:
修复 PR #6219 已更新到 a43a21fab9c2,当前 CI 流水线 已通过(ci-pipeline-passed),PR 已转为可评审。
CANN 9.1 仓库 CPU kernel UT 12/12,以及 A3 单卡直接使用生产头文件的 NPU harness 13/13 全部通过;已保留同号/异号无穷、NaN、有限值及尾块断言。BF16 CPU Cast 的后端差异已在生产路径修复,相关诊断与精度测试分开记录。未声称完成完整 ACLNN 包调度或全仓回归。
原始验证证据 与范围说明已更新到 PR 主描述。
@songkai111 @llimwang @LiWei79 麻烦按 experimental 模块的要求评审该修复(两人 LGTM、一人 approve);若还需要补充验证,请指出具体场景,谢谢。


11 days ago Close issue
11 days ago Added label: resolved
一、问题描述(必填)
experimental/math/log_add_exp/op_kernel/log_add_exp.h的 FP16/BF16 路径对(+Inf,+Inf)和(-Inf,-Inf)返回 NaN,预期分别为 +Inf、-Inf。同一源码的 FP32 路径正确处理这两类输入。README 对标 torch.logaddexp,未排除无穷输入。目标为 master
97624efd0ded6e003512f6dddb094d02e653cb9f的 experimental/arch22 实现。这里直接编译未修改的上游 kernel,未验证完整自定义算子包的 host/ACLNN 调度,也不代表已安装 CANN 内置算子的行为。二、环境信息(可选)
Ubuntu aarch64;CANN 9.1.0;driver 26.1.1;ASC/bisheng;Ascend910_9382。一次仅暴露逻辑 device 0,单 AIV block、16 个元素、ubFactor=256。
三、重现步骤(可选)
使用下面附加的源码复现包,包含未修改的 kernel、ASC runner 和实测输出。
source <CANN安装目录>/set_env.sh cmake -S . -B build cmake --build build --target logaddexp_probe -j2 ASCEND_RT_VISIBLE_DEVICES=0 ./build/logaddexp_probe fp32_inf ASCEND_RT_VISIBLE_DEVICES=0 ./build/logaddexp_probe fp16_inf ASCEND_RT_VISIBLE_DEVICES=0 ./build/logaddexp_probe bf16_infFP32 16/16 通过;FP16、BF16 各 4/16 失败,均为同号无穷输入各重复两次。每种 dtype 的
(+Inf,1)、(-Inf,1)、(0,0)、(1,2)、(-2,3)、(3,-2)对照通过。所有调用同步成功。runner 的退出码 1 表示数值不一致,2 表示 ACL 错误。四、预期结果(可选)
FP16/BF16 与 FP32 保持相同的同号无穷语义,补充 NaN、异号无穷、有限值和尾块回归。
可能原因:低精度路径提升到 FP32 后计算 Inf-Inf 产生 NaN;FP32 分支已有同号 Inf 选择修正,低精度路径没有对应处理。
已检查相关 13 条 issue、17 条 PR;#2084 是
math/log_add_exp/arch35的精度问题,与本项 experimental/arch22 缺陷不同。b963f2f0d60a449ab797a0dc262339e3.zip