| Files | Last commit | Last update |
|---|---|---|
feat(logit): Logit/LogitGrad 改手写支持非连续输入输出 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !11989 merge feat/logit-noncontig into master feat(logit): Logit/LogitGrad 改手写支持非连续输入输出 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 ### 改动原因 O1 图模式/eager 模式存在非连续输入输出场景,aclnnLogit / aclnnLogitGrad 当前为自动生成实现(无手写 aclnn 层),输出为非连续 tensor 时 kernel 按连续线性布局写入,结果落在错误位置(详见关联 issue)。 ### 改动方法 | 接口 | 改造 | |---|---| | aclnnLogit(input, eps, out) / aclnnLogitGrad(x, dy, eps, out) | 自动生成改手写:新建 l0op 桥接(logit_l0op / logit_grad_l0op,避开 op_kernel 同名头文件)+ 手写 aclnn 层;CMakeLists 由 aclnn 改 aclnn_exclude | - 参照同目录族 nll_loss 的手写先例(loss 系 op_api 位于算子目录顶层) - 非连续支持:输入 l0op::Contiguous 转连续(连续原样返回零开销);输出 IsContiguous 判断——连续直接作 kernel 输出,非连续分配连续结果 buffer(write-only 不拷旧值)计算后 l0op::ViewCopy 按 stride 回写 - eps 属性按公共签名 double 透传(桥接侧 float),签名与自动生成版逐参一致 - 机型判断用 SocVersion;kernel/tiling/binary 不变 ## 关联的Issue Closes #6701 ## 测试 - A2(910B3)build.sh --soc=ascend910b --ops=logit;logit_grad 真机 op 构建:Build binary success - A2 build.sh -u --opapi --soc=ascend910b --ut_mode=fast:4 tests PASSED / 0 FAILED(非连续输入+非连续输出用例,六参 TensorDesc 构造 strides/offset/storageShape) - pre-commit 全部 hook 通过(clang-format / codespell / OAT 合规),零自动修复 ## 文档更新 - docs/aclnnLogit.md / docs/aclnnLogitGrad.md:out 的"非连续Tensor"标记由 × 改为 √ ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11989 | 29 days ago | |
fix: 修复logit算子A5平台次正规数输入精度问题 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !10181 merge fix/logit-subnormal-precision into master fix: 修复logit算子A5平台次正规数输入精度问题 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 **改动原因**:A5(Ascend 950PR/DT, __CCE_AICORE__ == 310)平台向量接口对次正规(subnormal)操作数做 FTZ 处理。原实现按 ln(x/(1-x)) 计算,次正规输入 x 的除商 x/(1-x) 为次正规中间值,被 Div 冲刷为 0,导致 Ln(0) 输出 -inf,而正确结果应为 -88 ~ -103 区间的有限负数。 影响场景:eps <= 0 时(clamp 边界 [0,1] 不拦截次正规数)的 fp32 次正规输入,以及 bf16 次正规输入(cast 到 fp32 后仍为次正规);fp16 不受影响(fp16 最小值 2^-24 在 fp32 中恒为正规数)。 **改动方法**:A5 MicroAPI 路径(ComputeStepTwo)中将 Div + Log 改写为 ln(x) - ln(1-x),按 ln(2x) - ln(2-2x) 计算:两次 Reg::Log 均使用 LogAlgo::PRECISION_1ULP_FTZ_FALSE 模式(该模式在 A5 上通过"次正规判定 -> ×2^23 缩放 -> 硬件 vln -> -ln(2^23) 补偿"实现,全为快速指令)。整体乘 2 为精确的 2 的幂缩放,补偿在相减中相消;次正规 x 经乘 2 后不会落在库缩放判定的边界值上,彻底绕开 FTZ 冲刷;对可表示的 x < 1,2-2x 恒为正规数。消除产生次正规中间商的 Div,非 A5 平台路径不变。 同时清理 aclnnLogit 文档与调用示例中的模板残留文案。 ## 关联的Issue Closes #5774 ## 测试 - ATK ST 201 用例(single_bm):201/201 通过 - ATK 全量 2100 用例(double_benchmark):2100/2100 通过 - 次正规专项 A/B(fp32/bf16 次正规输入,eps=-1/0):修改前输出 -inf(如 x=1.4e-45 期望 -103.3);修改后与 CPU golden 一致(x=1.4e-45 -> -103.3、x=5.9e-39 -> -88.03),NaN/Inf/边界值语义不变,正常输入最大绝对差 <= 4.8e-7 - 性能 A/B/B/A(batch-event,warmup 300/batch 100/20 窗口):8192x8192 fp32 +0.27%~+0.59%(噪声级),fp16 -5.7%,无可测回退 - pre-commit 全部通过(含 clang-format、OAT 合规检查) 说明:ATK ST 201(single_bm,201/201 通过)与次正规专项(含缩放判定边界最大次正规数 0x7FFFFF 探针、fp32/bf16 次正规全谱段、77 例混合 battery 零新增失败)以及 699 条全量用例(double_benchmark,fp32/fp16/bf16 各 233 例,699/699 通过)已在最终提交的 ×2 实现上设备复验通过;2100 条全量与性能 A/B 基于 ×2 前的等价 ln(x)-ln(1-x) 实现(×2 为精确的 2 的幂恒等变形,正常输入实测差异 <= 1 ULP)。 ## 文档更新 清理 aclnnLogit.md 与 test_aclnn_logit.cpp 中的模板残留文案 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!10181 | 2 months ago | |
[logit] 修复eps<=0时被tiling层改写为1e-6导致x=1输出非inf的问题 Co-authored-by: yangdong48<yangdong48@huawei.com> # message auto-generated for no-merge-commit merge: !12472 merge fix/logit-eps-negative-clamp into master [logit] 修复eps<=0时被tiling层改写为1e-6导致x=1输出非inf的问题 Created-by: east_yang Commit-by: yangdong48 Merged-by: cann-robot Description: ## 问题描述 torch.logit(x, eps=-1.0) 在 NPU 上,x=1 时输出 13.802318 而非 +inf(fp32, shape [16])。 ## 根因 loss/logit/op_host/logit_tiling.cpp 的 RunBigKernelTiling 中把 eps<=0 一律改写为 1e-6 后写入 TilingData 下发 kernel,导致 eps=-1.0被静默替换为 eps=1e-6 x=1 被 clamp 到 1-1e-6,输出 ln(hi/(1-hi))=13.802318 而非 +inf。 ## 修复内容 1. loss/logit/op_host/logit_tiling.cpp:删除 eps<=0 时 epsilon=1e-6 的改写逻辑,eps 原样下发 kernel(kernel 侧 eps>=0 才走 ComputeStepOne 钳位,eps<0 天然不钳位)。 2. loss/logit/op_api/aclnn_logit.cpp:删除 CheckParams 中的 ND format 校验(误校验)。 3. loss/logit_grad/op_api/aclnn_logit_grad.cpp:同步删除 CheckParams 中的 ND format 校验(误校验)。 ## 验证(Ascend910B3) - bash build.sh --pkg --soc=ascend910b --ops=logit,logit_grad 编译通过并部署 - fp32 [16] eps=-1.0 回归:x=1 -> +inf,x=0 -> -inf,16/16 位置与 CPU golden 一致(含 inf/nan 位置与符号逐一对齐) - eps=1e-6 正例回归:与 CPU golden 逐位一致,钳位路径不受影响 - logit_grad 反向梯度回归:与 CPU golden 一致  Closes #7087 See merge request: cann/ops-nn!12472 | 24 days ago | |
Logit算子贡献 Co-authored-by: ilovescrapy<2623969821@qq.com> # message auto-generated for no-merge-commit merge: !4945 merge logit-latest into master Logit算子贡献 Created-by: ilovescrapy Commit-by: ilovescrapy Merged-by: cann-robot Description: Backgroud(背景信息) 一、背景信息 (必填) 对现有的算子增加int16、int8、uint8三种数据类型的支持。 二、价值/作用 (必填) 基于Logit算子历史TBE版本使用Ascend C编程语言进行优化,实现了AscendC实现的Logit算子对Atlas A2训练系列产品和Atlas 800I A2推理系列硬件的适配。丰富昇腾算子开源仓算子实现,给同类型算子开发提供了参考示例。 See merge request: cann/ops-nn!4945 | 1 month ago | |
[logit] 修复eps<=0时被tiling层改写为1e-6导致x=1输出非inf的问题 Co-authored-by: yangdong48<yangdong48@huawei.com> # message auto-generated for no-merge-commit merge: !12472 merge fix/logit-eps-negative-clamp into master [logit] 修复eps<=0时被tiling层改写为1e-6导致x=1输出非inf的问题 Created-by: east_yang Commit-by: yangdong48 Merged-by: cann-robot Description: ## 问题描述 torch.logit(x, eps=-1.0) 在 NPU 上,x=1 时输出 13.802318 而非 +inf(fp32, shape [16])。 ## 根因 loss/logit/op_host/logit_tiling.cpp 的 RunBigKernelTiling 中把 eps<=0 一律改写为 1e-6 后写入 TilingData 下发 kernel,导致 eps=-1.0被静默替换为 eps=1e-6 x=1 被 clamp 到 1-1e-6,输出 ln(hi/(1-hi))=13.802318 而非 +inf。 ## 修复内容 1. loss/logit/op_host/logit_tiling.cpp:删除 eps<=0 时 epsilon=1e-6 的改写逻辑,eps 原样下发 kernel(kernel 侧 eps>=0 才走 ComputeStepOne 钳位,eps<0 天然不钳位)。 2. loss/logit/op_api/aclnn_logit.cpp:删除 CheckParams 中的 ND format 校验(误校验)。 3. loss/logit_grad/op_api/aclnn_logit_grad.cpp:同步删除 CheckParams 中的 ND format 校验(误校验)。 ## 验证(Ascend910B3) - bash build.sh --pkg --soc=ascend910b --ops=logit,logit_grad 编译通过并部署 - fp32 [16] eps=-1.0 回归:x=1 -> +inf,x=0 -> -inf,16/16 位置与 CPU golden 一致(含 inf/nan 位置与符号逐一对齐) - eps=1e-6 正例回归:与 CPU golden 逐位一致,钳位路径不受影响 - logit_grad 反向梯度回归:与 CPU golden 一致  Closes #7087 See merge request: cann/ops-nn!12472 | 24 days ago | |
Logit算子贡献 Co-authored-by: ilovescrapy<2623969821@qq.com> # message auto-generated for no-merge-commit merge: !4945 merge logit-latest into master Logit算子贡献 Created-by: ilovescrapy Commit-by: ilovescrapy Merged-by: cann-robot Description: Backgroud(背景信息) 一、背景信息 (必填) 对现有的算子增加int16、int8、uint8三种数据类型的支持。 二、价值/作用 (必填) 基于Logit算子历史TBE版本使用Ascend C编程语言进行优化,实现了AscendC实现的Logit算子对Atlas A2训练系列产品和Atlas 800I A2推理系列硬件的适配。丰富昇腾算子开源仓算子实现,给同类型算子开发提供了参考示例。 See merge request: cann/ops-nn!4945 | 1 month ago | |
feat(logit): Logit/LogitGrad 改手写支持非连续输入输出 Co-authored-by: luoyufan7<luoyufan7@h-partners.com> # message auto-generated for no-merge-commit merge: !11989 merge feat/logit-noncontig into master feat(logit): Logit/LogitGrad 改手写支持非连续输入输出 Created-by: luoyufan7 Commit-by: luoyufan7 Merged-by: cann-robot Description: ## 描述 ### 改动原因 O1 图模式/eager 模式存在非连续输入输出场景,aclnnLogit / aclnnLogitGrad 当前为自动生成实现(无手写 aclnn 层),输出为非连续 tensor 时 kernel 按连续线性布局写入,结果落在错误位置(详见关联 issue)。 ### 改动方法 | 接口 | 改造 | |---|---| | aclnnLogit(input, eps, out) / aclnnLogitGrad(x, dy, eps, out) | 自动生成改手写:新建 l0op 桥接(logit_l0op / logit_grad_l0op,避开 op_kernel 同名头文件)+ 手写 aclnn 层;CMakeLists 由 aclnn 改 aclnn_exclude | - 参照同目录族 nll_loss 的手写先例(loss 系 op_api 位于算子目录顶层) - 非连续支持:输入 l0op::Contiguous 转连续(连续原样返回零开销);输出 IsContiguous 判断——连续直接作 kernel 输出,非连续分配连续结果 buffer(write-only 不拷旧值)计算后 l0op::ViewCopy 按 stride 回写 - eps 属性按公共签名 double 透传(桥接侧 float),签名与自动生成版逐参一致 - 机型判断用 SocVersion;kernel/tiling/binary 不变 ## 关联的Issue Closes #6701 ## 测试 - A2(910B3)build.sh --soc=ascend910b --ops=logit;logit_grad 真机 op 构建:Build binary success - A2 build.sh -u --opapi --soc=ascend910b --ut_mode=fast:4 tests PASSED / 0 FAILED(非连续输入+非连续输出用例,六参 TensorDesc 构造 strides/offset/storageShape) - pre-commit 全部 hook 通过(clang-format / codespell / OAT 合规),零自动修复 ## 文档更新 - docs/aclnnLogit.md / docs/aclnnLogitGrad.md:out 的"非连续Tensor"标记由 × 改为 √ ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11989 | 29 days ago | |
Logit算子贡献 Co-authored-by: ilovescrapy<2623969821@qq.com> # message auto-generated for no-merge-commit merge: !4945 merge logit-latest into master Logit算子贡献 Created-by: ilovescrapy Commit-by: ilovescrapy Merged-by: cann-robot Description: Backgroud(背景信息) 一、背景信息 (必填) 对现有的算子增加int16、int8、uint8三种数据类型的支持。 二、价值/作用 (必填) 基于Logit算子历史TBE版本使用Ascend C编程语言进行优化,实现了AscendC实现的Logit算子对Atlas A2训练系列产品和Atlas 800I A2推理系列硬件的适配。丰富昇腾算子开源仓算子实现,给同类型算子开发提供了参考示例。 See merge request: cann/ops-nn!4945 | 1 month ago | |
产品名称修改 Co-authored-by: y60124828<yanglou1@h-partners.com> # message auto-generated for no-merge-commit merge: !11292 merge master into master 产品名称修改 Created-by: yanglu-1 Commit-by: y60124828 Merged-by: cann-robot Description: ## 描述 产品名称修改 ## 关联的Issue 关联Issue [#6089](https://gitcode.com/cann/ops-nn/issues/6089) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11292 | 1 month ago |
Logit
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
算子功能:
该算子是概率到对数几率(log-odds)转换的一个数学运算,常用于概率值的反变换。它可以将一个介于0和1之间的概率值转换为一个实数值。
-
计算公式:
yi=ln(zi1−zi)y_i = \ln \left( \frac{z_i}{ 1 -z_i} \right) yi=ln(1−zizi)
其中:
zi={eps,if xi<epsxi,if eps≤xi≤1−eps1−eps,if xi>1−epsz_i = \begin{cases} \text{eps}, & \text{if } x_i < \text{eps} \\ x_i, & \text{if } \text{eps} \leq x_i \leq 1 - \text{eps} \\ 1 - \text{eps}, & \text{if } x_i > 1 - \text{eps} \end{cases} zi=⎩⎪⎪⎨⎪⎪⎧eps,xi,1−eps,if xi<epsif eps≤xi≤1−epsif xi>1−eps
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| input | 输入 | 公式中的输入input。 | BFLOAT16、FLOAT16、FLOAT、INT16、INT8、UINT8 | ND |
| eps | 属性 |
|
DOUBLE | - |
| out | 输出 | 公式中的y。 | BFLOAT16、FLOAT16、FLOAT、INT16、INT8、UINT8 | ND |
约束说明
- input取值范围不在[0, 1],输出NaN,取值0时为-Inf,取值为1时为Inf。
- eps大于1时,输出NaN,取值为1时为Inf。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_logit | 通过aclnnLogit接口方式调用Logit算子。 |
| 图模式调用 | - | 通过算子IR构图方式调用Logit算子。 |