Skip to main content

mojolearn

PyPI DOI

Bitwise-identical machine learning across Apple, NVIDIA and AMD GPUs.

The same machine-learning workload can produce different bits on different GPUs, changing predictions, learned models and subsequent training updates. mojolearn is a GPU machine-learning library whose default identical mode produces bitwise-identical results across verified Apple, NVIDIA and AMD GPUs and x86-64 and Arm CPUs. Results agree bit for bit, not merely within a numerical tolerance.

  • 57 machine-learning algorithms in 12 families, from decision trees to neural networks, with training and inference for every one of them.
  • Serve models trained elsewhere. Neural models trained in other frameworks can be served with identical outputs across vendors.
  • Move training between vendors. A training run can be handed off from one GPU vendor to another mid-run, or shared by Apple, NVIDIA and AMD GPUs working on one model at once, and the training state after every step is bitwise identical to a single GPU's.
  • Full FP32. Neural training and inference run in full FP32 floating-point arithmetic, without reducing the computation to integers.
  • Every algorithm runs on the Mac's own GPU, where XGBoost, LightGBM, CatBoost and cuML have no supported GPU path.

To the author's knowledge, mojolearn is the first system to enable these capabilities.

One Mojo codebase implements these algorithms across Metal, CUDA and HIP under a shared numerical contract. Mojo compiles code for different GPUs, but maintaining that contract and implementing the algorithms is original work.

Why it matters

A model may serve predictions on NVIDIA GPUs, run locally on an Apple laptop and later be evaluated on an AMD server. With identical weights and inputs, different GPUs normally return different output bits, so hardware becomes another variable in serving, regression testing and auditing. In a tree learner one rounding difference can change the winning split and every node beneath it. In a training loop it perturbs a gradient, then the optimizer state, then every step after that.

mojolearn removes hardware from that list. A team can test a deployed model on different hardware, replay a recorded decision during an audit, replace serving hardware without numerical change, and resume a checkpoint on another vendor's GPU on the same trajectory as uninterrupted training.

How it works

Floating-point addition is not associative, and GPU vendors differ in reduction order, fused multiply-add contraction, denormal handling, square root, tie-breaking and elementary functions. Recompiling does not fix any of that. mojolearn's numerical contract fixes the operations that determine model bits, including reduction order, rounding and elementary functions, and leaves tiling, thread layout, memory placement and kernel scheduling free, so each backend can be tuned for its own hardware without changing a bit. The kernels are mojolearn's own, written in Mojo, and replace vendor math routines wherever their results would depend on the backend.

Algorithms

family algorithms
gradient boosting symmetric-tree, depth-wise and loss-guided boosting, ordered boosting
forests random forest, extremely randomized trees, isolation forest
clustering k-means, DBSCAN, HDBSCAN, agglomerative, spectral, Gaussian mixture
neighbors, density and search nearest neighbors, k-NN prediction, radius neighbors, random ball cover, IVF-Flat, kernel density
linear models least squares, ridge, lasso, elastic net, logistic regression
kernel methods and Gaussian processes support vector machines, kernel ridge, Gaussian process regression and classification, Nystroem, random Fourier features
decomposition and manifold PCA, truncated SVD, UMAP
time series ARIMA, Holt-Winters exponential smoothing, KPSS test
preprocessing and resampling standard and min-max scalers, bootstrap, permutation test, Monte Carlo integration
neural blocks and optimizers transformer, Mamba-1, Mamba-2, Mamba-3, Samba hybrid stack, MLP, Adam, AdamW, SGD with momentum
language model and tokenizer decoder language model, byte-level BPE tokenizer
linear algebra matrix product, Cholesky, QR, symmetric eigendecomposition, singular values

Also provided are evaluation metrics, cross-validation, CPU training and inference, Hugging Face checkpoint loading and decoding, BF16 and INT8 weight storage, tokenized corpora, multi-GPU execution plans and a built-in verifier.

Numeric modes

identical is the default and, outside the tree learners, the only mode. Gradient boosting, random forests and Extra Trees also offer two opt-in modes.

mode contract
identical The same bits across Apple, NVIDIA and AMD GPUs and CPUs.
deterministic The same bits on repeated runs on one device.
fast Throughput only, with no repeatability promise.

Select a mode per estimator with numeric_mode=, per process with mojolearn.set_numeric_mode(...), or before import with MOJOLEARN_NUMERIC_MODE. A configuration that cannot meet its mode's contract raises a named error rather than silently returning something weaker.

Install

pip install mojolearn

Version 0.8.17 is on PyPI as a macOS arm64 wheel (Apple Metal) and a Linux x86-64 wheel carrying NVIDIA CUDA and AMD HIP together. Both wheels train and predict on the CPU as well.

mojolearn doctor

reports what the installed wheel supports on this machine.

Quick start

import numpy as np
import mojolearn

rng = np.random.default_rng(0)
X = rng.random((100_000, 20), dtype=np.float32)
y = (X[:, 0] + X[:, 1] > 1.0).astype(np.float32)

model = mojolearn.GradientBoosting(loss="Logloss", n_estimators=200, max_depth=6)
model.fit(X, y)
print(model.predict_proba(X[:5]))
print(model.numeric_mode_used(), mojolearn.vendor())

Run the same script on an Apple, NVIDIA or AMD GPU and the model and its predictions are the same bits.

Verify it yourself

The wheel ships the reference results recorded on Apple, NVIDIA, AMD and CPU, and a verifier that checks your machine against them.

python -m mojolearn verify --quick   # one lane per family
python -m mojolearn verify --all     # every lane

Each part reads IDENTICAL or DIVERGENT against the recorded references. docs/VERIFY.md describes the verifier and docs/VERIFY_EXTERNALLY.md shows how to check the claims from outside the project.

Scope

The guarantee holds for the same code revision, numerical profile, input bytes, hyperparameters and seed, in identical mode, on configurations the verification record covers. It is an FP32 guarantee. Weights trained in another framework reproduce under mojolearn's arithmetic, not that framework's. SUPPORT_MATRIX.md lists the verified devices and configurations.

Documentation

Trademarks and affiliation

mojolearn is an independent project by Andrew Hendel, licensed under Apache-2.0. It is not affiliated with, sponsored by, or endorsed by Modular, Inc. MAX® and Mojo® are trademarks of Modular, Inc. Binary wheels include unmodified Modular runtime components redistributed under Modular's own license; see NOTICE.

Citation

To cite mojolearn, use CITATION.cff. The concept DOI is 10.5281/zenodo.22068632.

Release files for mojolearn 0.8.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for mojolearn 0.8.17
File Interpreter ABI Platform
mojolearn-0.8.17-py3-none-manylinux_2_35_x86_64.whl Python 3 none Linux glibc 2.35+ x86-64 Details
mojolearn-0.8.17-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 118.9 MB

Release files / mojolearn-0.8.17-py3-none-manylinux_2_35_x86_64.whl

Download URL mojolearn-0.8.17-py3-none-manylinux_2_35_x86_64.whl
Size 81.8 MB
Tags Linux glibc 2.35+ x86-64 Python 3
SHA-256 checksum
How to use checksums
dd3899f0e28d5e1c64f3827735937a7be1731b04f37758a02b4bd13b1be66c69
BLAKE2b-256 checksum
How to use checksums
ee4e85683e6a05bbdfc7a8cbdcee866c262ce24bb8d9c5892acab95f18f46d54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / mojolearn-0.8.17-py3-none-macosx_11_0_arm64.whl

Download URL mojolearn-0.8.17-py3-none-macosx_11_0_arm64.whl
Size 37.2 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b34730762d0646dac6a19a009130b86decca097e250d8e3b409a55d56762029e
BLAKE2b-256 checksum
How to use checksums
d6c31d1e50714f733ff8867b69532e69d87a6da7ecf41fa75b1c5b65780fe159
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

0.8.19

1 release file

0.8.18

2 release files

This release

0.8.17 This release

2 release files

0.8.16

2 release files

0.8.15

2 release files

0.8.14

2 release files

0.8.13

2 release files

0.8.12

2 release files

0.8.11

2 release files

0.8.10

2 release files

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

1 release file

0.3.1

2 release files

0.3.0

2 release files

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page