Module neuralops.tests.test_fused_backward
Tests for fused attention backward.
Functions
def test_fused_attention_backward_accuracy()-
Expand source code
def test_fused_attention_backward_accuracy(): torch.manual_seed(42) B, H, N, D = 2, 2, 8, 16 q = torch.randn(B, H, N, D, requires_grad=True) k = torch.randn(B, H, N, D, requires_grad=True) v = torch.randn(B, H, N, D, requires_grad=True) grad_out = torch.randn(B, H, N, D) # Autograd reference scale = 1.0 / (D ** 0.5) scores = torch.matmul(q, k.transpose(-2, -1)) * scale p = F.softmax(scores, dim=-1) out = torch.matmul(p, v) # Backward using autograd out.backward(grad_out) ref_gq, ref_gk, ref_gv = q.grad.clone(), k.grad.clone(), v.grad.clone() # Backward using fused reference with torch.no_grad(): gq, gk, gv = fused_attention_backward(grad_out, q.detach(), k.detach(), v.detach(), out.detach()) assert torch.allclose(ref_gq, gq, atol=1e-5) assert torch.allclose(ref_gk, gk, atol=1e-5) assert torch.allclose(ref_gv, gv, atol=1e-5)