net = RecurrentMemoryTransformer(
seq_len=1024,
num_tokens=256,
num_memory_tokens=128,
dim=512,
depth=1,
causal=True,
heads=4,
dim_head=128,
use_flash_attn=True,
rotary_pos_emb=True
).eval()
x = torch.randint(0, 256, (8, 1024))
jit = torch.jit.trace(net, (x,))
x = torch.randint(0, 256, (8, 1024))
l = torch.randint(100, x.shape[1], size=(x.shape[0],))
m = lengths_to_padding_mask(x.shape[1], l)
l1, mems, _ = net(x, mask=m)
l2, mems, _ = net(x, mems, mask=m)
l3, mems, _ = jit(x, mask=m)
l4, mems, _ = jit(x, mems, mask=m)
torch.testing.assert_close(l1, l3)
torch.testing.assert_close(l2, l4)
It would be great if the above worked.
It would be great if the above worked.