Skip to main content

FFT and complex-valued tensor operations for AWS Trainium via NKI

Project description

trnfft

CI PyPI Python License Docs

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 trnsci scientific computing suite (github.com/trnsci).

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.8.0 — NKI butterfly, GEMM, complex-multiply, and ComplexLinear kernels are validated on trn1.2xlarge. For STFT and batched FFT, set_backend("nki") now beats vanilla torch.fft.fft. See benchmarks for the full picture.

API coverage (9 of 12 torch.fft functions): fft, ifft, rfft, irfft, fft2, fftn, ifftn, stft, istft. Not yet: hfft, ihfft, rfft2, irfft2, rfftn, irfftn (tracked for v0.10.0+).

Roadmap

  • NKI ComplexConv1d / ComplexModReLU kernels (today both fall back to PyTorch on NKI)
  • BF16 / FP16 support across NKI kernels
  • Multi-NeuronCore parallelism (scaffold in trnfft/nki/multicore.py)
  • SBUF-resident dispatch to reduce small-op overhead
  • Remaining torch.fft functions

Related projects in the trnsci suite

All six siblings are on PyPI, along with the umbrella meta-package:

Project What Latest
trnsci Umbrella meta-package pulling the whole suite v0.1.0
trnblas BLAS Level 1–3 for Trainium v0.4.0
trnrand Philox / Sobol / Halton random number generation v0.1.0
trnsolver Linear solvers (CG, GMRES) and eigendecomposition v0.3.0
trnsparse Sparse matrix operations v0.1.1
trntensor Tensor contractions (einsum, TT/Tucker decompositions) v0.1.1
neuron-complex-ops Original proof-of-concept, folded into trnfft archived

License

Apache 2.0 — Copyright 2026 Scott Friedman

Acknowledgments

Built on insights from:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trnfft-0.9.0.tar.gz (79.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trnfft-0.9.0-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file trnfft-0.9.0.tar.gz.

File metadata

  • Download URL: trnfft-0.9.0.tar.gz
  • Upload date:
  • Size: 79.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trnfft-0.9.0.tar.gz
Algorithm Hash digest
SHA256 6e8e5b3c566ae13bde2b523ef1078adb6392549aec9b1ac52eaee9fd4c5eb9ef
MD5 954c465f1b868a1c36b73a0079961514
BLAKE2b-256 3e512ad6361e244367f0d7df051393aee3f9ad485b3b59f5a3570041b1f2dc3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for trnfft-0.9.0.tar.gz:

Publisher: publish.yml on trnsci/trnfft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file trnfft-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: trnfft-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 26.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for trnfft-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 949511daf93f31f7cb8b11d26362ee7025421e9b6b603f297fcf84d2d1355f54
MD5 71cfdadbedeae2b2ce2d4248795046c6
BLAKE2b-256 7d5b9a6d8b0f9bc541c70934af37b5e389340a3196a1d7453115436175344246

See more details on using hashes here.

Provenance

The following attestation bundles were made for trnfft-0.9.0-py3-none-any.whl:

Publisher: publish.yml on trnsci/trnfft

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page