FFT and complex-valued tensor operations for AWS Trainium via NKI
Project description
trnfft
FFT and complex-valued tensor operations for AWS Trainium via NKI.
Trainium has no native complex number support and ships no FFT library. trnfft fills that gap with split real/imaginary representation, complex neural network layers, and NKI kernels optimized for the NeuronCore architecture.
Incorporates neuron-complex-ops. Part of the trn-* scientific computing suite by Playground Logic.
Why
NVIDIA has cuFFT, cuBLAS, and native complex64. Trainium has none of these. Every signal processing, speech enhancement, physics simulation, and spectral method workload on Trainium currently falls back to CPU or requires hand-rolling complex arithmetic. trnfft fixes this.
Install
pip install trnfft
# With Neuron hardware support
pip install trnfft[neuron]
Usage
import torch
import trnfft
# Drop-in replacement for torch.fft
signal = torch.randn(1024)
X = trnfft.fft(signal)
recovered = trnfft.ifft(X)
# Real-valued FFT
X = trnfft.rfft(signal)
# 2D FFT
image = torch.randn(256, 256)
F = trnfft.fft2(image)
# STFT (matches torch.stft signature)
waveform = torch.randn(16000)
S = trnfft.stft(waveform, n_fft=512, hop_length=256)
Complex Neural Network Layers
from trnfft import ComplexTensor
from trnfft.nn import ComplexLinear, ComplexConv1d, ComplexModReLU
# Build complex-valued models for speech/audio/physics
x = ComplexTensor(real_part, imag_part)
layer = ComplexLinear(256, 128)
y = layer(x)
Architecture
+--------------------------------------------+
| User Code / Model |
+--------------------------------------------+
| trnfft.api (torch.fft API) |
| fft() ifft() rfft() stft() fft2() |
+--------------------------------------------+
| trnfft.fft_core | trnfft.nn |
| Cooley-Tukey | ComplexLinear |
| Bluestein | ComplexConv1d |
| Plan caching | ComplexModReLU |
+------------------------+-------------------+
| trnfft.nki.dispatch |
| "auto" | "pytorch" | "nki" |
+--------------------------------------------+
| PyTorch ops | NKI kernels |
| (any device) | (Trainium only) |
| torch.matmul | nisa.nc_matmul |
| element-wise | Tensor Engine |
| | Vector Engine |
| | SBUF ↔ PSUM pipeline |
+------------------+------------------------+
How It Works
No complex dtype? Trainium's NKI doesn't support complex64/complex128. ComplexTensor stores complex values as paired real tensors and decomposes complex arithmetic into real-valued operations.
FFT → butterflies → matmul. Each Cooley-Tukey butterfly stage performs complex-multiply-and-add across all groups simultaneously. On NKI, the complex multiply maps to the Tensor Engine (systolic array).
Algorithms:
- Power-of-2: Cooley-Tukey radix-2 (iterative, decimation-in-time)
- Arbitrary sizes: Bluestein's chirp-z transform (pads to power-of-2)
NKI complex GEMM uses stationary tile reuse (2 SBUF loads instead of 8) and PSUM accumulation, overlapping Vector Engine negation with Tensor Engine matmul.
Hardware compatibility
NKI kernels are validated against Neuron SDK 2.24+ on the Deep Learning AMI Neuron PyTorch 2.9 (Ubuntu 24.04) AMI (20260410 or later). See docs/installation.md for the full compatibility matrix.
Benchmarks
NKI vs PyTorch on the same Trainium instance — see the benchmarks page for the latest numbers.
Status
v0.1.0 — CPU fallback works, NKI kernels scaffolded for on-hardware validation.
- ComplexTensor with full arithmetic
- Complex matmul (4 real matmuls)
- 1D FFT/IFFT (power-of-2, Cooley-Tukey)
- Bluestein (arbitrary sizes)
- rfft/irfft
- 2D FFT
- STFT
- Complex NN layers (Linear, Conv1d, BatchNorm, ModReLU)
- NKI dispatch layer (auto/pytorch/nki)
- Plan caching
- NKI butterfly kernel validation on trn1/trn2
- NKI GEMM kernel validation
- Multi-NeuronCore parallelism
- Benchmarks vs cuFFT
- Inverse STFT
- N-D FFT
Related Projects
| Project | What |
|---|---|
| neuron-complex-ops | Original proof-of-concept (now folded into this library) |
| trnblas | BLAS for Trainium (Level 1-3, DF-MP2 use case) |
| trnsolver (planned) | Linear solvers and eigendecomposition for Trainium |
License
Apache 2.0 — Playground Logic LLC
Acknowledgments
Built on insights from:
- tcFFT — Tensor Core FFT research
- FFTW — Plan-based FFT architecture
- AWS NKI documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trnfft-0.7.0.tar.gz.
File metadata
- Download URL: trnfft-0.7.0.tar.gz
- Upload date:
- Size: 63.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac4c5732b747d807848e85e82433a1e7df047355a75d87b996a6e612af41f696
|
|
| MD5 |
993916fdf1b9b7dff1549c58f3328070
|
|
| BLAKE2b-256 |
36ae3112f539b80f1bd004b687c792f334147fd796288915c9787ac5af398502
|
Provenance
The following attestation bundles were made for trnfft-0.7.0.tar.gz:
Publisher:
publish.yml on scttfrdmn/trnfft
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trnfft-0.7.0.tar.gz -
Subject digest:
ac4c5732b747d807848e85e82433a1e7df047355a75d87b996a6e612af41f696 - Sigstore transparency entry: 1280489583
- Sigstore integration time:
-
Permalink:
scttfrdmn/trnfft@fd0db40161255213043c6b20c257ad3f87c16945 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/scttfrdmn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fd0db40161255213043c6b20c257ad3f87c16945 -
Trigger Event:
release
-
Statement type:
File details
Details for the file trnfft-0.7.0-py3-none-any.whl.
File metadata
- Download URL: trnfft-0.7.0-py3-none-any.whl
- Upload date:
- Size: 25.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14bbee1668f2cbbfa8f358f3516da1be003eeba6b9194f5151d6cfbe3fea3d20
|
|
| MD5 |
725b425e211572b0f013b56f6e317523
|
|
| BLAKE2b-256 |
f21052706917fa03307ddba56a72380eddf385ea9547cb9b3111a851a1fe130c
|
Provenance
The following attestation bundles were made for trnfft-0.7.0-py3-none-any.whl:
Publisher:
publish.yml on scttfrdmn/trnfft
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trnfft-0.7.0-py3-none-any.whl -
Subject digest:
14bbee1668f2cbbfa8f358f3516da1be003eeba6b9194f5151d6cfbe3fea3d20 - Sigstore transparency entry: 1280489584
- Sigstore integration time:
-
Permalink:
scttfrdmn/trnfft@fd0db40161255213043c6b20c257ad3f87c16945 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/scttfrdmn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fd0db40161255213043c6b20c257ad3f87c16945 -
Trigger Event:
release
-
Statement type: