Skip to content

Commit ccb0143

Browse files
Merge pull request AI-Hypercomputer#4289 from huytransformer:htn/tpu-splash-local-window-size
PiperOrigin-RevId: 940069489
2 parents 5201e2f + 4cb3051 commit ccb0143

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/maxtext/layers/attention_op.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,7 @@ def create_sa_config(config, query, key, attn_logits_soft_cap):
12861286
raise ValueError("Sliding_window_size must be set if Local Sliding attention type")
12871287
mask &= mask_module.LocalMask(
12881288
shape=(query.shape[2], key.shape[2]),
1289-
window_size=(self.sliding_window_size, self.sliding_window_size),
1289+
window_size=(self.sliding_window_size - 1, self.sliding_window_size),
12901290
offset=0,
12911291
)
12921292
elif self.attention_type == AttentionType.CHUNK:

tests/unit/attention_test.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from flax import nnx
2626
import jax
2727
import jax.numpy as jnp
28+
from jax.experimental.pallas.ops.tpu.splash_attention import splash_attention_mask
2829
from jax.sharding import AxisType, Mesh
2930
from maxtext.utils import maxtext_utils
3031
from maxtext.common.gcloud_stub import is_decoupled
@@ -56,6 +57,24 @@
5657
from tests.utils.test_helpers import get_test_config_path
5758

5859

60+
class SplashLocalMaskTest(unittest.TestCase):
61+
"""Tests for Splash local masks."""
62+
63+
def test_local_window_matches_dense_mask(self):
64+
seq_len = 8
65+
window_size = 3
66+
mask = splash_attention_mask.CausalMask((seq_len, seq_len)) & splash_attention_mask.LocalMask(
67+
(seq_len, seq_len),
68+
window_size=(window_size - 1, window_size),
69+
offset=0,
70+
)
71+
q_sequence = np.arange(seq_len)[:, None]
72+
kv_sequence = np.arange(seq_len)[None, :]
73+
expected_mask = (kv_sequence <= q_sequence) & (kv_sequence > q_sequence - window_size)
74+
75+
np.testing.assert_array_equal(mask[:, :], expected_mask)
76+
77+
5978
class BidirectionalBlockMaskTest(unittest.TestCase):
6079
"""Test for make_bidirectional_block_mask."""
6180

0 commit comments

Comments
 (0)