// the find
elixir-nx/nx
Multi-dimensional arrays (tensors) and numerical definitions for Elixir
Nx is Elixir's answer to a tensor library with autodiff, and this monorepo bundles it with two swappable backends: EXLA (Google's XLA, for GPU/TPU) and Torchx (LibTorch). It's the base layer under Axon and Bumblebee, so it's for Elixir developers doing ML/numerical work who don't want to shell out to Python for everything.
The backend abstraction actually works — you write the same defn code and swap Binary/EXLA/Torchx underneath, and there's a backend_documentation_test pattern that runs doctests against every backend to catch drift. Linear algebra is implemented properly (QR, SVD, LU, Cholesky live under nx/lib/nx/lin_alg, not just FFI passthroughs). JIT compilation through EXLA to XLA HLO is a real compiler pipeline (see exla/lib/exla/mlir), not a toy wrapper around a Python call.
You're one of maybe a few thousand people running numerical code on the BEAM, so when you hit a missing op or a CUDA edge case, there's no Stack Overflow answer waiting — you're reading exla_cuda.cc yourself. Native builds are heavy: c_src has hand-rolled NIFs, IPC bridging, and separate CUDA/ROCm Dockerfiles, so first-time setup on anything but a supported combo is friction. Three mix projects (nx, exla, torchx) live in one repo with separate mix.exs/README/CHANGELOG each, and the README says they'll eventually split — so tooling and doc links may not be stable long-term. This is tensors + autodiff only; you need Axon for actual neural net layers and Bumblebee for pretrained models, so plan on pulling in siblings, not just this repo.