Skip to content

Commit 0e9f187

Browse files
committed
fix fa3 mask
1 parent 72eb60c commit 0e9f187

1 file changed

Lines changed: 11 additions & 13 deletions

File tree

src/diffusers/models/attention_dispatch.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3024,22 +3024,20 @@ def _flash_attention_3_varlen_hub(
30243024

30253025
if attn_mask is not None:
30263026
attn_mask = _normalize_attn_mask(attn_mask, batch_size, seq_len_kv)
3027-
3028-
(_, seqlens_k), (cu_seqlens_q, cu_seqlens_k), (max_seqlen_q, max_seqlen_k) = (
3029-
_prepare_for_flash_attn_or_sage_varlen(
3030-
batch_size, seq_len_q, seq_len_kv, attn_mask=attn_mask, device=query.device
3027+
(_, _), (cu_seqlens_q, cu_seqlens_k), (max_seqlen_q, max_seqlen_k) = (
3028+
_prepare_for_flash_attn_or_sage_varlen_with_mask(batch_size, seq_len_q, attn_mask, query.device)
30313029
)
3032-
)
3033-
3034-
key_valid, value_valid = [], []
3035-
for b in range(batch_size):
3036-
valid_len = seqlens_k[b]
3037-
key_valid.append(key[b, :valid_len])
3038-
value_valid.append(value[b, :valid_len])
3030+
indices_k = attn_mask.flatten().nonzero(as_tuple=False).flatten()
3031+
key_packed = key.reshape(-1, *key.shape[2:])[indices_k]
3032+
value_packed = value.reshape(-1, *value.shape[2:])[indices_k]
3033+
else:
3034+
(_, _), (cu_seqlens_q, cu_seqlens_k), (max_seqlen_q, max_seqlen_k) = (
3035+
_prepare_for_flash_attn_or_sage_varlen_without_mask(batch_size, seq_len_q, seq_len_kv, query.device)
3036+
)
3037+
key_packed = key.flatten(0, 1)
3038+
value_packed = value.flatten(0, 1)
30393039

30403040
query_packed = query.flatten(0, 1)
3041-
key_packed = torch.cat(key_valid, dim=0)
3042-
value_packed = torch.cat(value_valid, dim=0)
30433041

30443042
func = _HUB_KERNELS_REGISTRY[AttentionBackendName._FLASH_3_VARLEN_HUB].kernel_fn
30453043
result = func(

0 commit comments

Comments
 (0)