Closed
[Bug-Report|缺陷反馈]: Mask1 变体算子(Reciprocal_Mask1/Exp_Mask1/Cast_Mask1)输出全部为零 #1471
AAAAAZBXAdd on  Aug 9Closed at  Aug 24
AAAAAZBX
AAAAAZBX
Aug 9 Create

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

多个 Mask1 变体算子输出全部为零,不执行任何实际计算。Mask2 变体完全正常。

Reciprocal_Mask1:

输入:  [0.0, -0.0, 1.0, -1.0, NaN, Inf, -Inf, 2.0]
输出:  [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
预期:  [Inf, -Inf, 1.0, -1.0, NaN, 0.0, -0.0, 0.5]

Exp_Mask1: 同样全零(Exp(1.0) 输出 0.0,预期 2.718)

Cast_Mask1: 同样全零

Exp_Mask2 (对比): 完全正常,Exp(1.0)=2.718,NaN/Inf 传播正确

Environment / 环境信息 (Mandatory / 必填)

  • HDK 版本: 24.1.RC3
  • CANN 版本: 9.1.0-beta.1 (CANN Version 1.0.0, TimeStamp 202602)
  • 硬件形态: Atlas A3 训练系列, Ascend 910B3
  • 操作系统版本: Ubuntu 22.04 (aarch64)

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

tar xzf bug02_mask1_systemic_failure.tar.gz && cd bug02_mask1_systemic_failure
bash reproduce.sh

Describe the expected behavior / 预期结果 (Mandatory / 必填)

Mask1 和 Mask2 应该产生相同的计算结果,只是 mask 机制不同(逐 bit vs 连续 mask)。

Reciprocal_Mask1 输出:

========== OUTPUT DIAGNOSTICS ==========
  min=0.000000e+00  max=0.000000e+00  mean=0.000000e+00
=========================================
[AIV Block 0/1] [RESULT] Compute done. Final output (output1): first=0.000000 last=0.000000 len=64
[INFO]: ascendc_kernels_bbit finished, exit code=0

Exp_Mask2 (正常对照):

========== OUTPUT DIAGNOSTICS ==========
  min=0.000000e+00  max=1.484132e+02  mean=6.033795e+00
  first: 1.0000 2.7183 1.0000 0.3679 ...
### Special notes for this issue/备注 (Optional / 选填)
            
1. 影响至少 3 个 Mask1 算子:Reciprocal_Mask1, Exp_Mask1, Cast_Mask1
2. Mask2 变体完全正常,问题特定于 Mask1 的 wrapper 代码生成
3. 所有受影响算子在编译和运行时均无错误/警告,exit code=0,属于静默错误<a href="https://gitcode.com/user-attachments/files/8547062/e9b50ba294954c2ba474e028c14ae6ae.gz" target="_blank">e9b50ba294954c2ba474e028c14ae6ae.gz</a>
likedislike
ApeiriaNode_Booker
ApeiriaNode_BookerCollaborators
Aug 10 Comments:

您好,需要提供准确的接口调用场景,以及出错的位置。
推荐使用上板维测接口进行详细定位。

likedislike
ApeiriaNode_BookerApeiriaNode_BookerCollaborators
Aug 11 Assign ApeiriaNode_Booker as responsible person
AAAAAZBX
AAAAAZBX
Aug 13 Comments:

感谢建议,已用 Dump 完成定位,并已在与报告环境一致的 CANN 9.1.0-beta.1(1.0.0 / 202602)上复验。结论需要更正一下。

对 Reciprocal_Mask1 在 API 调用前后分别做了 dump,并把 mask 值用 printf 打印了出来。实际传入的 mask 是确定性的 0x820820820820820,只有 10/64 个位置位(wrapper 代码注释声称 75%)。逐位核对后发现:置位的元素全部计算正确(inf→0、42→0.0238),未置位的按 Mask1 语义保持原值——beta.1 上复验结果一致,masked Reciprocal 执行完全正确,不是 CANN 的问题。"全零/identity"的假象来自我们测试 wrapper 生成的这个稀疏 mask(约 84% 元素根本没被计算),加上判定逻辑的误判。

Cast_Mask1 确实有问题,但根因与 #1470 完全相同:CAST_NONE 的 float→int32 在 910B 上静默不执行,与 Mask1 机制无关。

所以原 issue 中 Reciprocal_Mask1 / Exp_Mask1 的"全零 bug"描述撤回,这是代码生成器的 mask 生成问题,我们这边已在修复;Cast_Mask1 请与 #1470 一并处理。

likedislike
ApeiriaNode_Booker
ApeiriaNode_BookerCollaborators
Aug 17 Comments:

您好,感谢您的使用。。
关于您遇到的问题,确实是CAST_NONE的f32 to i32路径在A3上不支持,可以参考文档Cast。
在您遇到一些异常问题时,可以使用-DASCENDC_DEBUG=1去开启NPU_DEBUG,但是因为性能考量我们不会去默认开启。

likedislike
ApeiriaNode_Booker
ApeiriaNode_BookerCollaborators
Aug 24 Comments:

您好,因长时间未回复,该issue暂且关闭。若后续有问题欢迎继续反馈。

likedislike
ApeiriaNode_BookerApeiriaNode_BookerCollaborators
Aug 24 changed custom state from 待办的 to 已完成
ApeiriaNode_BookerApeiriaNode_BookerCollaborators
Aug 24 Close issue