Meta FAIR Open-Sources e-means, a Drop-In k-means Replacement: Lower Loss in About One-Tenth the Epochs, 10-45x Faster Than Flash-KMeans on GPU, Now in FAISS 1.16.0
On November 10, Meta FAIR researcher Swann Bessa announced e-means on X, a clustering algorithm that replaces classic Lloyd k-means and is open-sourced in FAISS 1.16.0. It swaps full-batch iterations for mini-batch updates with exponential moving averages, and fitted scaling laws set the batch size and step size automatically, so k is the only setting. The paper says that on a range of embedding datasets e-means beats the loss Lloyd reaches after 25 epochs in 1.4 to 2.6 epochs, running 10-45x faster than Flash-KMeans on GPU and 8-15x faster than FAISS k-means on CPU (authors' figures). Teams building vector indexes, RAG pipelines, or dedup jobs can speed up this step directly.

Key Takeaways
- Epochs: on a range of embedding datasets it beats Lloyd's 25-epoch test loss in 1.4-2.6 epochs; each of the 11 VIBE datasets needs only 1.6-2.4 epochs (paper/authors' figures)
- Speed: 10-45x faster than Flash-KMeans on GPU and 8-15x faster than FAISS k-means on CPU; on one H100 with 10M vectors and 65,536 clusters, 25 Flash-KMeans epochs take 14-22 seconds
- Scale: it splits 10 billion DINO embeddings into 16 million clusters in 2.5 epochs, below Lloyd's loss at 25 epochs
- Dead clusters: with 1M vectors and k=16,384, reviving by proportionally splitting large clusters keeps dead clusters at 0.1%-0.3%, versus 4.6%-14.3% for EnCodec-style resampling
- Getting started:
from faiss.contrib.e_means import Emeans, 5 epochs by default, PyTorch and NumPy supported; paper arXiv:2611.09501