已关闭
HSTU attention 的 causal mask 在 intra-utterance padding 场景下错误遮盖了有效 token #1251
崇理战队创建于 7月8日关闭于 7月14日
xiangjie10
7月8日 评论:
7月8日 评论:
👋 您好,感谢向 RecSDK 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!
📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:
- 清晰的问题描述
- 可复现的操作步骤
- 相关日志、截图或环境信息
我们会尽快跟进,感谢您的理解与配合!


xiangjie10
7月8日 评论:
7月8日 评论:
/label add triaged


7月8日 添加了label:triaged
7月9日 将 zhoucy998 设为负责人
zhoucy
7月9日 评论:
7月9日 评论:
开发者你好,我们的hstu算子(torch.ops.mxrec.hstu_dense、torch.ops.mxrec.hstu_jagged接口)中并未使用padding mask。能否进一步提供使用接口的方式?


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


zhoucy
7月13日 评论:
7月13日 评论:
/label add resolved


7月13日 添加了label:resolved
7月14日 issue状态由 TODO 改变为 DONE
7月14日 关闭了 issue
#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 顺序可能反了。