Module neuralops.tests.test_fused_svd_kernel
Unit tests for Fused SVD-Linear Layer with in-SRAM RMSNorm, Autograd backward pass, and integration into SVDLinear and SVDLinearAttention modules.
Functions
def test_analytical_vs_reference_gradients() ‑> None-
Expand source code
def test_analytical_vs_reference_gradients() -> None: """ RESEARCH FIX: Verify analytical backward gradients are 100% numerically identical to PyTorch autograd graph backpropagation. """ torch.manual_seed(42) B, L, in_dim, out_dim, rank = 2, 8, 32, 48, 16 x_val = torch.randn(B, L, in_dim, dtype=torch.float64) V_val = torch.randn(rank, in_dim, dtype=torch.float64) U_val = torch.randn(out_dim, rank, dtype=torch.float64) w_val = torch.randn(rank, dtype=torch.float64) b_val = torch.randn(out_dim, dtype=torch.float64) eps = 1e-6 # 1. Reference PyTorch computation with autograd x_ref = x_val.clone().requires_grad_(True) V_ref = V_val.clone().requires_grad_(True) U_ref = U_val.clone().requires_grad_(True) w_ref = w_val.clone().requires_grad_(True) b_ref = b_val.clone().requires_grad_(True) z_ref = F.linear(x_ref, V_ref) rms_ref = torch.rsqrt(torch.mean(z_ref ** 2, dim=-1, keepdim=True) + eps) z_norm_ref = z_ref * rms_ref * w_ref y_ref = F.linear(z_norm_ref, U_ref, b_ref) loss_ref = (y_ref ** 2).sum() loss_ref.backward() # 2. Fused SVD Linear analytical implementation x_test = x_val.clone().requires_grad_(True) V_test = V_val.clone().requires_grad_(True) U_test = U_val.clone().requires_grad_(True) w_test = w_val.clone().requires_grad_(True) b_test = b_val.clone().requires_grad_(True) y_test = fused_svd_linear(x_test, V_test, U_test, w_test, b_test, eps=eps, use_rms_norm=True) loss_test = (y_test ** 2).sum() loss_test.backward() assert torch.allclose(y_ref, y_test, atol=1e-10, rtol=1e-10) assert torch.allclose(x_ref.grad, x_test.grad, atol=1e-10, rtol=1e-10) assert torch.allclose(V_ref.grad, V_test.grad, atol=1e-10, rtol=1e-10) assert torch.allclose(U_ref.grad, U_test.grad, atol=1e-10, rtol=1e-10) assert torch.allclose(w_ref.grad, w_test.grad, atol=1e-10, rtol=1e-10) assert torch.allclose(b_ref.grad, b_test.grad, atol=1e-10, rtol=1e-10)RESEARCH FIX: Verify analytical backward gradients are 100% numerically identical to PyTorch autograd graph backpropagation.
def test_fused_svd_linear_forward_backward() ‑> None-
Expand source code
def test_fused_svd_linear_forward_backward() -> None: """Verify forward and backward gradients of FusedSVDLinear with RMSNorm and bias.""" torch.manual_seed(42) B, L, in_dim, out_dim, rank = 2, 16, 64, 128, 16 layer = FusedSVDLinear( in_features=in_dim, out_features=out_dim, rank=rank, bias=True, use_rms_norm=True ) x = torch.randn(B, L, in_dim, requires_grad=True) out = layer(x) assert out.shape == (B, L, out_dim) assert torch.isfinite(out).all() loss = out.sum() loss.backward() assert x.grad is not None and torch.isfinite(x.grad).all() assert layer.U.grad is not None and torch.isfinite(layer.U.grad).all() assert layer.V.grad is not None and torch.isfinite(layer.V.grad).all() assert layer.bias.grad is not None and torch.isfinite(layer.bias.grad).all() assert layer.norm_weight.grad is not None and torch.isfinite(layer.norm_weight.grad).all()Verify forward and backward gradients of FusedSVDLinear with RMSNorm and bias.
def test_fused_svd_linear_gradcheck_full() ‑> None-
Expand source code
def test_fused_svd_linear_gradcheck_full() -> None: """Verify analytical gradients match numerical gradients via torch.autograd.gradcheck.""" torch.manual_seed(42) in_dim, out_dim, rank = 4, 4, 2 x = torch.randn(1, 2, in_dim, dtype=torch.float64, requires_grad=True) V = torch.randn(rank, in_dim, dtype=torch.float64, requires_grad=True) U = torch.randn(out_dim, rank, dtype=torch.float64, requires_grad=True) norm_w = torch.ones(rank, dtype=torch.float64, requires_grad=True) bias = torch.zeros(out_dim, dtype=torch.float64, requires_grad=True) test_passed = torch.autograd.gradcheck( fused_svd_linear, (x, V, U, norm_w, bias, 1e-5, True), eps=1e-6, atol=1e-4, rtol=1e-3, ) assert test_passed, "Gradcheck failed for fused_svd_linear with full parameters"Verify analytical gradients match numerical gradients via torch.autograd.gradcheck.
def test_fused_svd_linear_gradcheck_no_norm_weight() ‑> None-
Expand source code
def test_fused_svd_linear_gradcheck_no_norm_weight() -> None: """Verify gradcheck without norm_weight and bias.""" torch.manual_seed(42) in_dim, out_dim, rank = 4, 4, 2 x = torch.randn(1, 2, in_dim, dtype=torch.float64, requires_grad=True) V = torch.randn(rank, in_dim, dtype=torch.float64, requires_grad=True) U = torch.randn(out_dim, rank, dtype=torch.float64, requires_grad=True) test_passed = torch.autograd.gradcheck( fused_svd_linear, (x, V, U, None, None, 1e-5, True), eps=1e-6, atol=1e-4, rtol=1e-3, ) assert test_passed, "Gradcheck failed for fused_svd_linear with None norm_weight/bias"Verify gradcheck without norm_weight and bias.
def test_fused_svd_linear_gradcheck_no_rms_norm() ‑> None-
Expand source code
def test_fused_svd_linear_gradcheck_no_rms_norm() -> None: """Verify gradcheck when RMSNorm is disabled.""" torch.manual_seed(42) in_dim, out_dim, rank = 4, 4, 2 x = torch.randn(1, 2, in_dim, dtype=torch.float64, requires_grad=True) V = torch.randn(rank, in_dim, dtype=torch.float64, requires_grad=True) U = torch.randn(out_dim, rank, dtype=torch.float64, requires_grad=True) bias = torch.zeros(out_dim, dtype=torch.float64, requires_grad=True) test_passed = torch.autograd.gradcheck( fused_svd_linear, (x, V, U, None, bias, 1e-5, False), eps=1e-6, atol=1e-4, rtol=1e-3, ) assert test_passed, "Gradcheck failed for fused_svd_linear without RMSNorm"Verify gradcheck when RMSNorm is disabled.
def test_fused_svd_linear_module_methods() ‑> None-
Expand source code
def test_fused_svd_linear_module_methods() -> None: """Verify FusedSVDLinear helper methods: set_low_rank_factors, get_orthogonality_loss, extra_repr.""" layer = FusedSVDLinear(in_features=32, out_features=64, rank=16, bias=True, use_rms_norm=True) # Test set_low_rank_factors new_U = torch.randn(64, 16) new_V = torch.randn(16, 32) layer.set_low_rank_factors(new_U, new_V) assert torch.allclose(layer.U, new_U) assert torch.allclose(layer.V, new_V) # Test orthogonality loss ortho_loss = layer.get_orthogonality_loss() assert ortho_loss.ndim == 0 and ortho_loss >= 0.0 # Test extra_repr repr_str = layer.extra_repr() assert "in_features=32" in repr_str assert "out_features=64" in repr_str assert "rank=16" in repr_strVerify FusedSVDLinear helper methods: set_low_rank_factors, get_orthogonality_loss, extra_repr.
def test_fused_svd_linear_nd_shapes() ‑> None-
Expand source code
def test_fused_svd_linear_nd_shapes() -> None: """Verify arbitrary multi-dimensional input tensor shapes (2D, 4D).""" torch.manual_seed(42) layer = FusedSVDLinear(in_features=32, out_features=64, rank=16) # 2D input: (M, K_in) x_2d = torch.randn(32, 32) out_2d = layer(x_2d) assert out_2d.shape == (32, 64) # 4D input: (B, H, L, K_in) x_4d = torch.randn(2, 4, 8, 32) out_4d = layer(x_4d) assert out_4d.shape == (2, 4, 8, 64)Verify arbitrary multi-dimensional input tensor shapes (2D, 4D).
def test_fused_svd_linear_no_bias() ‑> None-
Expand source code
def test_fused_svd_linear_no_bias() -> None: """Verify forward and backward pass without bias.""" torch.manual_seed(42) B, L, in_dim, out_dim, rank = 2, 8, 32, 64, 16 layer = FusedSVDLinear( in_features=in_dim, out_features=out_dim, rank=rank, bias=False, use_rms_norm=True ) x = torch.randn(B, L, in_dim, requires_grad=True) out = layer(x) assert out.shape == (B, L, out_dim) assert layer.bias is None loss = out.sum() loss.backward() assert x.grad is not None and torch.isfinite(x.grad).all() assert layer.U.grad is not None and torch.isfinite(layer.U.grad).all() assert layer.V.grad is not None and torch.isfinite(layer.V.grad).all() assert layer.norm_weight.grad is not None and torch.isfinite(layer.norm_weight.grad).all()Verify forward and backward pass without bias.
def test_fused_svd_linear_no_rms_norm() ‑> None-
Expand source code
def test_fused_svd_linear_no_rms_norm() -> None: """Verify forward and backward pass when RMSNorm is disabled.""" torch.manual_seed(42) B, L, in_dim, out_dim, rank = 2, 8, 32, 64, 16 layer = FusedSVDLinear( in_features=in_dim, out_features=out_dim, rank=rank, bias=True, use_rms_norm=False ) x = torch.randn(B, L, in_dim, requires_grad=True) out = layer(x) assert out.shape == (B, L, out_dim) assert torch.isfinite(out).all() loss = (out ** 2).sum() loss.backward() assert x.grad is not None and torch.isfinite(x.grad).all() assert layer.U.grad is not None and torch.isfinite(layer.U.grad).all() assert layer.V.grad is not None and torch.isfinite(layer.V.grad).all() assert layer.bias.grad is not None and torch.isfinite(layer.bias.grad).all() assert layer.norm_weight is NoneVerify forward and backward pass when RMSNorm is disabled.
def test_svd_linear_attention_integration() ‑> None-
Expand source code
def test_svd_linear_attention_integration() -> None: """Verify SVDLinearAttention executes with use_fused_kernel=True across exact and linear modes.""" torch.manual_seed(42) config = SimpleNamespace( hidden_size=64, num_attention_heads=4, dropout=0.1, linear_attention_eps=1e-6, ) # 1. Exact Softmax mode with fused SVD projections attn_exact = SVDLinearAttention(config, rank=16, mode="exact", use_fused_kernel=True) x = torch.randn(2, 16, 64, requires_grad=True) out_exact, _ = attn_exact(x) assert out_exact.shape == (2, 16, 64) loss = out_exact.sum() loss.backward() assert x.grad is not None and torch.isfinite(x.grad).all() # 2. Linear Kernel mode with fused SVD projections attn_linear = SVDLinearAttention(config, rank=16, mode="linear", use_fused_kernel=True) x2 = torch.randn(2, 16, 64, requires_grad=True) out_linear, _ = attn_linear(x2) assert out_linear.shape == (2, 16, 64) loss2 = out_linear.sum() loss2.backward() assert x2.grad is not None and torch.isfinite(x2.grad).all()Verify SVDLinearAttention executes with use_fused_kernel=True across exact and linear modes.
def test_svd_linear_integration() ‑> None-
Expand source code
def test_svd_linear_integration() -> None: """Verify SVDLinear module with use_fused_kernel=True and False.""" torch.manual_seed(42) in_dim, out_dim, rank = 32, 64, 16 # Standard mode layer_std = SVDLinear(in_dim, out_dim, rank=rank, use_fused_kernel=False) # Fused mode layer_fused = SVDLinear(in_dim, out_dim, rank=rank, use_fused_kernel=True) # Copy parameters layer_fused.U.data.copy_(layer_std.U.data) layer_fused.V.data.copy_(layer_std.V.data) layer_fused.bias.data.copy_(layer_std.bias.data) x = torch.randn(2, 8, in_dim) out_std = layer_std(x) out_fused = layer_fused(x) assert torch.allclose(out_std, out_fused, atol=1e-6, rtol=1e-5)Verify SVDLinear module with use_fused_kernel=True and False.
def test_svd_linear_layer_compression_integration() ‑> None-
Expand source code
def test_svd_linear_layer_compression_integration() -> None: """Verify SVDLinearLayer in compression engine with use_fused_kernel=True.""" torch.manual_seed(42) linear = nn.Linear(32, 64, bias=True) svd_layer_fused = SVDLinearLayer(linear, rank=16, use_fused_kernel=True) svd_layer_std = SVDLinearLayer(linear, rank=16, use_fused_kernel=False) x = torch.randn(2, 8, 32) out_fused = svd_layer_fused(x) out_std = svd_layer_std(x) assert out_fused.shape == (2, 8, 64) assert out_std.shape == (2, 8, 64) assert torch.allclose(out_fused, out_std, atol=1e-5, rtol=1e-4)Verify SVDLinearLayer in compression engine with use_fused_kernel=True.