已关闭
HSTU attention 的 causal mask 在 intra-utterance padding 场景下错误遮盖了有效 token #1251
崇理战队创建于  7月8日关闭于  7月14日
崇理战队
7月8日 创建

#1247 提到的 HSTU attention 算子编译运行,我这边在 DCNv2 + HSTU 的 GSR(生成式推荐)场景下也遇到了一个 mask 的问题。

HSTU 的训练数据是用户行为序列,每个 sample 里可能包含多个 utterance(对话轮次),用 <sep> 分隔。attention 需要做 intra-utterance masking(只看到本轮次内的行为),但当前 HSTU attention 的 mask 实现是标准的 causal mask + sequence padding mask。

问题出在:sequence padding(把变长序列 pad 到 max_len)时,padding 的 mask 和 intra-utterance 的 causal mask 是相乘的关系。如果某个有效 token 刚好在 padding 的边界上(比如 pos=127,max_len=128),那它的 causal mask 上三角里有一部分被 padding mask 覆盖了——但 padding mask 是 0 的位置本来不应该 attend,如果把有效的 attend 位置也 mask 了,梯度就少了一截。

这个问题在短序列占比高的场景下影响比较明显,因为 padding ratio 高。

Check pos:HSTU attention 的实现里 build_attention_mask 生成了一个 [B, H, S, S] 的 mask,padding mask 和 causal mask 是通过元素乘叠加的。如果 causal mask 在 [i, j] 位置是 1(可以 attend)但 padding mask 在 [i, :] 是 0(应该被 attend 的 token 不在 padding 区域),那个 1 就被错误清零了。

正确的做法应该是:causal mask 只管上三角/下三角,padding mask 只管有效长度外的位置,两者是 AND 关系。但实现的 min/max 顺序可能反了。

likedislike
崇崇理战队
7月8日 添加了label:bug
xiangjie10成员
7月8日 评论:

👋 您好,感谢向 RecSDK 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!

📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:

  • 清晰的问题描述
  • 可复现的操作步骤
  • 相关日志、截图或环境信息
    我们会尽快跟进,感谢您的理解与配合!
likedislike
xiangjie10成员
7月8日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
7月8日 添加了label:triaged
zhoucyzhoucy成员
7月9日 将 zhoucy998 设为负责人
zhoucy
zhoucy成员
7月9日 评论:

开发者你好,我们的hstu算子(torch.ops.mxrec.hstu_dense、torch.ops.mxrec.hstu_jagged接口)中并未使用padding mask。能否进一步提供使用接口的方式?

likedislike
zhoucy
zhoucy成员
7月13日 评论:

由于暂未收到更多信息,我们将标记关闭,如若需要进一步定位,请留言或联系我。

likedislike
zhoucy
zhoucy成员
7月13日 评论:

/label add resolved

likedislike
ascend-robotascend-robot成员
7月13日 添加了label:resolved
zhoucyzhoucy成员
7月14日 issue状态由 TODO 改变为 DONE
zhoucyzhoucy成员
7月14日 关闭了 issue