fix(fa3): skip scheduler_metadata precompute under DP attention (#24632)
This commit is contained in:
@@ -224,6 +224,16 @@ class FlashAttentionBackend(AttentionBackend):
|
||||
and server_args.disable_radix_cache
|
||||
)
|
||||
|
||||
# Skip the FA3 scheduler_metadata precompute (PR #21104) under DP
|
||||
# attention. The precomputed buffer can become inconsistent with the
|
||||
# num_splits the C++ mha_fwd kernel derives from live cache_seqlens
|
||||
# during decode, leading to an OOB read in the split-KV combine kernel
|
||||
# (flash_fwd_combine_launch_template.h:52). Leaving scheduler_metadata
|
||||
# unset uses the existing per-layer metadata path.
|
||||
self._disable_scheduler_metadata_precompute = bool(
|
||||
getattr(server_args, "enable_dp_attention", False)
|
||||
)
|
||||
|
||||
def _compute_scheduler_metadata(
|
||||
self, batch_size, max_seq_len_k, cache_seqlens, cu_seqlens_q
|
||||
):
|
||||
@@ -233,6 +243,8 @@ class FlashAttentionBackend(AttentionBackend):
|
||||
"""
|
||||
if self._get_scheduler_metadata is None or self.use_mla:
|
||||
return None
|
||||
if self._disable_scheduler_metadata_precompute:
|
||||
return None
|
||||
# Always use window_size=(-1, -1) because scheduler_metadata is only
|
||||
# consumed by non-SWA layers (SWA layers skip it in forward_decode).
|
||||
return self._get_scheduler_metadata(
|
||||
|
||||
Reference in New Issue
Block a user