已合并
修改log_add_exp小值域情况下精度误差 #3631
修改log_add_exp小值域情况下精度误差 #3631
已合并
zhangqijia1创建于 6月29日
zhangqijia1成员
6月29日

描述

使用数值稳定性公式来解决小值域下精度误差问题,对私有格式进行拦截

关联的Issue

#2084

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangqijia1 的贡献)
Zzhangqijia1成员
6月29日 创建了 pull request,commit 7daadaa7
CANN-robotCANN-robot成员
6月29日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
6月29日 评论:

CLA Signature Pass

gcw_SUaZx3UQ, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robot
CANN-robot成员
6月29日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
math/log_add_exp 唐燕峰, 冯彤 (2/2) 唐燕峰 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
zhangqijia1成员
6月29日 评论:

compile

likedislike
Zzhangqijia1成员
6月29日 update merge request[project id: 7649531, iid: 3631, commit_id: 47619e6400725c9209c04d0db92b9796d259b956] virtual merging success
CANN-robotCANN-robot成员
6月29日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
6月29日 评论:

流水线任务触发成功
任务链接 [29f6369d007f418689abc658ac1e743f][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_harmony-infer ✅ SUCCESS >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-math ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS
UT_Test_experimental ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-06-29 20:46:19]    CI执行结束

likedislike
Zzhangqijia1成员
6月29日 修改了pull request 的描述
CANN-robot
CANN-robot成员
6月29日 评论:

流水线任务触发成功
任务链接 [d0ee3f5f3d3f41239bf5c8890dfeb445][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ✅ SUCCESS >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>

[2026-06-29 20:41:03]    CI执行结束

likedislike
FelixTang7成员
6月29日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
6月29日 添加了label:approved
atomgit-bot
atomgit-bot
6月29日 评论:

变更摘要

此 PR 主要解决 log_add_exp 算子在输入值域较小时因 1+exp(x) 舍入为 1 导致 log(1+exp(x)) 计算结果精度丢失的问题。在 API 层增加了对 RegBase 场景下的 format 严格校验,并将原有 format 警告逻辑重构为独立函数;在 Kernel 层引入了 StableLog1p 模板结构,通过数值稳定的 log1p 实现替代原先直接 Adds + Log 的组合,避免小值域下的精度误差。

主要改动

  • 新增 StableLog1p 模板结构:在 log_add_exp_dag.h 中引入 StableLog1p<CT, In>,当 1+x 因舍入等于 1 时通过 x * log(1+x) / ((1+x)-1) 的公式修正,并正确处理无穷大边界情况;所有计算结构(LogAddExpSimplifiedComputeLogAddExpSimplifiedWithCastComputeLogAddExpFullComputeLogAddExpFullWithCastCompute)的 OpLog 均替换为 StableLog1p 的输出。

  • 新增 CMP_NE_MODE 常量:在 Kernel 层添加 CMP_NE_MODE = 5(对应 AscendC::CMPMODE::NE),供 StableLog1p 中的不等于比较使用。

  • API 层 CheckFormat 重构与新增:原有 CheckFormat 仅做 ND format 警告,现将其重命名为 WarnFormat;同时新增一个严格版本 CheckFormat,校验 self/other 与 out 的 format 一致性并拒绝私有 format,仅在 IsRegBase() 为 true 时调用并触发错误返回。

  • CheckParams 中条件分支:在 CheckParams 末尾增加 IsRegBase() 判断,RegBase 场景下调用严格的 CheckFormat 校验;非 RegBase 场景则在 aclnnLogAddExpGetWorkspaceSize 中调用 WarnFormat 仅输出警告。

likedislike
rxtfeng成员
6月29日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
6月29日 添加了label:lgtm
CANN-robotCANN-robot成员
6月29日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
6月29日 添加了label:ci-pipeline-passed
CANN-robotCANN-robot成员
6月29日 关闭了关联的issue
CANN-robotCANN-robot成员
6月29日 合入了pull request