Nori V1 — Replaces XGBoost

AI & Machine LearningProduct Updates5 min read

Introducing Nori Flash: Nori's Accuracy, Now in Microseconds on CPU

Nori Flash distills our tabular foundation model into a compact MLP — keep Nori's zero-training accuracy, but run inference on CPUs in microseconds, thousands of times faster and cheaper than a foundation-model forward pass.

#Distillation#Tabular Data#Foundation Models#Inference#CPU
Introducing Nori Flash: Nori's Accuracy, Now in Microseconds on CPU

Less than one month ago, we released Synthefy Nori V1, our state-of-the-art tabular foundation model. Tabular foundation models like Nori, TabPFN from Prior Labs, and TabFM from Google replace the constant training ritual of classical ML with a single forward pass — better accuracy, with zero training. The tradeoff that isn't discussed enough is inference cost: tabular foundation models need datacenter-grade GPUs and are thousands of times slower at inference than the gradient-boosted trees they replace.

That's why we've developed Nori Flash. Keep the accuracy of Nori, keep zero training, but infer on CPUs, in microseconds. With Nori, you can have your cake and eat it too.

Motivation

Language got LLMs. Images and video got VLMs and diffusion models. But for intelligence on the structured data that drives business decisions, industry still relies on classical ML and gradient-boosted trees — models we have to train for each new dataset, optimize, and retrain every time there's new data. That's why we built Nori, the foundation model for tabular data. Along with Prior Labs' TabPFN and Google's TabFM, Nori delivers better accuracy than optimized classical ML with zero training cost.

The nasty secret that isn't mentioned enough is inference cost. With tabular foundation models, what you save in training you pay back in slow inference on costly, powerful GPUs. For some tasks that's completely fine. But for operational workflows where you run millions of predictions a day, that cost piles up fast.

Solution

That's why, less than a month after releasing Nori V1, we're introducing Nori Flash, a distillation service for Nori. With Nori Flash you get the best of both worlds: no tuning, no feature engineering, no hyperparameter optimization, zero training — and inference on CPUs, in microseconds.

The science behind Nori Flash is all about splitting "learning a dataset" from "predicting with what you learned." When Nori makes a forward pass, three things happen implicitly, all at once:

  1. Nori maps your dataset to the synthetic priors it was trained on that best represent your data.
  2. Nori performs in-context learning to produce a predictive distribution.
  3. Nori queries that predictive distribution at your rows to get the final predictions.

The first two — priors and in-context learning — are hard. They are why Nori is a transformer with millions of parameters. The third — querying a distribution — is easy. The key insight behind Nori Flash is that only the first two need to happen when you fit(). When you predict(), we don't need to redo all that work again.

So Nori Flash decouples learning the best predictor for a dataset from doing inference with that predictor. It leverages Nori to learn the best predictor, then represents that predictor in a dense multi-layer perceptron (MLP) that runs on any hardware in microseconds. You pay a slightly higher latency during fit() for a huge speedup at predict(). Nori Flash fits in a few minutes for easy datasets, up to a couple of hours for hard ones.

The Numbers Don't Lie

Two claims, one comparison — Nori Flash against Nori itself, on the 13 TabArena regression datasets.

First, accuracy: we give up almost nothing. Across every dataset, Nori Flash's predictions track Nori's — it retains 99.6% of Nori's R², and on two datasets it even edges Nori out.

Accuracy (R²) on held-out test · 13 TabArena datasets
99.6%of Nori's accuracy retained· mean R² gap 0.003 · Flash wins outright on 2 of 13
Nori Nori Flash
diamonds
0.983 0.001
airfoil
0.969 +0.000
miami housing
0.942 0.003
concrete
0.931 0.010
superconductivity
0.923 0.005
houses
0.866 0.002
healthcare
0.866 0.001
used Fiat 500
0.862 0.000
QSAR-TID
0.750 0.013
physicochemical
0.734 0.004
QSAR fish
0.646 +0.000
wine quality
0.539 0.006
food delivery
0.369 +0.004
R² on the official held-out TabArena test splits. Each row is a dataset; the two markers are Nori (ring) and Nori Flash (dot) — they sit almost on top of each other. Across all 13, Nori Flash keeps 99.6% of Nori's R² (mean gap 0.003), and on QSAR-fish and food-delivery it edges Nori out.

Second, speed: this is the whole point. The same predictions, but 100 to 1,000+ times faster per row — microseconds on a CPU-class workload instead of milliseconds on a datacenter GPU.

predict() latency per row · Nori Flash vs Nori
121–1,367×faster — every dataset· median 279×
Microseconds, not milliseconds.
diamonds1.16 ms → 0.8 µs
1,367×
superconductivity2.32 ms → 2.0 µs
1,136×
physicochemical0.65 ms → 0.7 µs
976×
food delivery0.62 ms → 0.7 µs
905×
miami housing0.89 ms → 1.1 µs
784×
houses0.51 ms → 0.8 µs
674×
wine quality0.65 ms → 2.3 µs
279×
QSAR-TID6.00 ms → 23.2 µs
258×
airfoil1.98 ms → 10.0 µs
198×
used Fiat 5001.97 ms → 10.7 µs
184×
concrete2.78 ms → 15.7 µs
178×
healthcare1.46 ms → 12.0 µs
122×
QSAR fish2.15 ms → 17.8 µs
121×
Per-row inference latency on the full held-out test set (one idle H200 GPU, warm, GPU-synced median). Nori runs its full in-context transformer over the training set every call; Nori Flash runs only the cached MLP. Bars are the speedup, with the raw per-row times beside each — even the smallest gain is 121×.

Deployment and Usage

Using Nori Flash is as simple as using Nori — you write two lines.

The work happens when you call fit with distill=True: on our API, we fit Nori on your data, distill the learned predictor into a compact MLP, and send the weights back to cache on your machine. Every predict after that runs only the cached MLP — locally, on your CPU, in microseconds. Nori is never called again.

python
1model.fit(X, y, distill=True) # runs once, on our API
2preds = model.predict(X_test) # every call — your CPU, in µs

Conclusion

The biggest reason not to use tabular foundation models — the cost of inference — just got deleted. Keep the accuracy; infer on CPUs, in microseconds. Try Nori Flash today.