已关闭
[Bug]: IndexShare 下 is_index_leader 静默兜底会读错全局层 0 的布局 #2591
wei_zhuoyi创建于 27 天前关闭于 23 天前
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 换出
27 天前 关联了pull request:【r2.1.0-beta1】【bugfix】IndexShare 配置命名对齐 Megatron,修复一阶段 leader 崩溃,恢复 leader 监督与 Top-K 换出
23 天前 关闭了 issue
23 天前 issue状态由 TODO 改变为 DONE
问题描述 (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: dsadsa_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(不再调用会读错一格的推导函数)。