已关闭
[Bug]: IndexShare 下 is_index_leader 静默兜底会读错全局层 0 的布局 #2591
wei_zhuoyi创建于  27 天前关闭于  23 天前
wei_zhuoyi成员
27 天前 创建

问题描述 (Describe the bug)

IndexShare(!8785)开启后,若调用方未显式传入 is_index_leader,DSAttention.__init__ 会
用自己拿到的 layer_number 去查布局。但 MultiLatentAttention 构造 core attention 时传的是
clamped 的 layer_index(max(1, layer_number)),用它查布局会把全局第 0 层读错一格。

FSSS 布局下,全局层 0 因此被判成 Shared,于是没有任何一层拥有 indexer,第一个 Shared 层
拿着 None 的 Top-K 去做 sparse attention。

触发条件 (To Reproduce)

  • experimental_attention_variant: dsa
  • 开启 IndexShare(dsa_index_share_size > 1 或 dsa_index_share_pattern)
  • 构造 DSAttention 时不传 is_index_leader

当前所有生产路径都经由 DSASelfAttention.core_attention_extra_kwargs() 显式传值,该函数正是
为规避此问题而存在,因此这条兜底路径暂时不可达。但它是一个静默陷阱:新增一个 core-attention
子类、或在测试里直接构造 DSAttention,都会命中一个已知错误的布局,且不报任何错。

期望行为 (Expected behavior)

共享开启时不允许静默回退到 clamped 层号推导;应要求调用方显式传入,或明确报错。

修复 (Fix)

共享开启且 is_index_leader is None 时抛 ValueError,错误信息指明应由
core_attention_extra_kwargs 传入真实全局层号;共享关闭时每层都是 Full,直接取 True
(不再调用会读错一格的推导函数)。

likedislike
Wwei_zhuoyi成员
27 天前 关联了pull request:【master】【bugfix】IndexShare 下 is_index_leader 不再静默兜底
Wwei_zhuoyi成员
27 天前 关联了pull request:【r2.1.0-beta1】【bugfix】IndexShare 配置命名对齐 Megatron,修复一阶段 leader 崩溃,恢复 leader 监督与 Top-K 换出
MindSpore-BotMindSpore-Bot成员
23 天前 关闭了 issue
MindSpore-BotMindSpore-Bot成员
23 天前 issue状态由 TODO 改变为 DONE