Views
No views yet
jburtoft/fnet-fast-fourier-transform-neuron-kernelsKernelConfig references keep resolving.jburtoft/fnet-fast-fourier-transform-neuron-kernelsmodel repo, so it never appeared at
huggingface.co/kernels and does not resolve
through get_kernel. The new repository is a first-class kernel-type repo.| Area | Improvement |
|---|---|
| Tensor Engine matmuls | 25-50% fewer per tile |
| Total ISA operations | 36-45% fewer per tile |
| Numerical accuracy | ~84x better end-to-end (2.6e-05 -> 3.1e-07 relative) |
r2c/c2r specialization. FNet's pass 1 has a real input and pass 2 needs
only a real output. v1 ran a full complex-to-complex transform in both passes,
so half its matmuls either multiplied a zero imaginary input or produced an
imaginary result that was discarded.W[k,n] = exp(-2*pi*i*k*n/N) is exactly symmetric.
Reducing the integer product k*n modulo N before scaling makes the float32
matrix symmetric to 0 ULP, removing 2 nc_transpose plus 2 PSUM copies per DFT.B=4, S=512, D=768 forward pass.KernelConfig value:1 kernel_config = KernelConfig({
2- "FNetBasicFourierTransform":
3- "jburtoft/fnet-neuron-kernels:NeuronFNetFourierForward",
4+ "FNetBasicFourierTransform":
5+ "jburtoft/fnet-fast-fourier-transform-neuron-kernels:NeuronFNetFastFourierTransformForward",
6 })| v1 | v2 |
|---|---|
NeuronFNetFourierForward | NeuronFNetFastFourierTransformForward |
NeuronFNetFourierLayout | NeuronFNetFastFourierTransformLayout |
nki_fft2d_real | nki_fast_fourier_transform_2d_real |
_fft1d_{128,256,512} | _fast_fourier_transform_{128,256,512}_{r2c,c2r} |
(B, S, D) in, (B, S, D) out,
equivalent to torch.fft.fftn(x, dim=(1, 2)).real._torch_fft1d. Only the documentation was wrong. v2 documents the actual behavior
and asserts it in test_e2e.py.max_abs_err against a float64 torch.fft
reference instead.