Back
Kevin Riedl

12 min read · 23 Jul 2026
Last reviewed

Next
Made on your device, with no Instagram connection. We copy the post link for Instagram’s Link sticker.

Compress RAG Vectors to 2 Bits: Is Data-Oblivious Quantization Ready for Production?

The short answer: yes, 2-bit TurboQuant stores each vector's quantized codes in one-sixteenth of the bytes used by float32. Total index memory is not automatically 16x smaller because norms, identifiers, graph structures, metadata and optional full-precision vectors still consume space. TurboVec, an open-source Rust index, reports fitting its 10 million document example into about 4 GB instead of about 31 GB. Qdrant has also shipped TurboQuant since version 1.18.

TurboQuant is peer-reviewed ICLR 2026 research, and production implementations now exist. TurboVec reached its first stable 1.0 release on 18 August 2026, with a stable forward-compatible on-disk format, but maintenance remains concentrated around its creator. Treat its FAISS benchmark wins as hardware-specific, author-reported results, then prove total memory, recall and latency on your own corpus before you swap a live vector store.

Designing a self-hosted or air-gapped RAG stack?

 Plan a Retrieval Architecture Review

Why RAG memory becomes the bottleneck

Retrieval-augmented generation stores one embedding per chunk, and low-latency search often keeps vector data in RAM. The arithmetic is unforgiving. A 1536-dimensional vector in float32 uses 6,144 bytes, so ten million such vectors need about 61.4 GB in decimal units before index overhead. At 2 bits per dimension, the raw codes use 384 bytes each, or about 3.84 GB for ten million. That is the exact 16x code compression. The end-to-end index ratio will be lower once its other structures are counted.

Memory can dominate retrieval cost. It influences whether an index fits one node or needs a cluster, whether it can share a host with a model, and whether an on-premise box is practical. Compressing raw vector codes 16x can change the hardware plan, but only a resident-memory measurement reveals the bill.

What is data-oblivious quantization?

Data-oblivious quantization compresses vectors using a fixed recipe that does not learn anything from your dataset. There is no codebook trained on a sample, no calibration pass, and no per-dataset parameters to fit, store or refit when the data drifts.

That differs from trained product quantization, available in FAISS IVF-PQ and many vector databases. PQ learns codebooks by running k-means over a representative sample. New vectors can use an existing codebook, but material distribution drift may reduce quality enough to justify training a new codebook and rebuilding the index. Plain TurboQuant removes that training lifecycle. Enhanced implementations can add small calibration steps to improve recall on real embedding distributions.

How TurboQuant compresses without training

TurboQuant comes from the ICLR 2026 paper "TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate" by Amir Zandieh, Majid Daliri, Majid Hadian and Vahab Mirrokni at Google and NYU, and Google Research describes it in a public write-up. The core idea is one geometric trick used twice.

  1. Rotate. Apply a random orthogonal rotation to every vector. A rotation preserves distances and inner products, so it changes nothing about the search result. What it changes is the coordinate distribution: after a random rotation, each coordinate of a high-dimensional vector follows a known, concentrated distribution that depends only on the dimension, not on your data.
  2. Quantize per coordinate. Because that distribution is known in advance, you can precompute the optimal scalar quantizer for it once, from theory, and reuse the same universal codebook for every coordinate of every vector. In high dimensions the rotated coordinates are close to independent, so treating them one at a time is near-optimal rather than a shortcut.

The paper adds a second stage that quantizes the residual with a 1-bit Quantized Johnson-Lindenstrauss transform, producing an unbiased inner-product estimate. The authors show the distortion sits close to the information-theoretic lower bound, within a small constant factor of about 2.7, across bit-widths. In nearest-neighbor search the method outperforms product quantization on recall while cutting indexing time to near zero, because there is nothing to train.

The practical payoff is the part that survives all the theory: no training sample, no calibration, no codebook to persist or refit. You rotate and quantize, and you can do it the moment a vector arrives.

What does TurboQuant actually beat?

The method was independently implemented in Qdrant, which published a detailed evaluation against the quantizers teams already use. The comparison is what matters commercially, because it is measured at fixed storage budgets.

TurboQuant recall versus common quantizers, from Qdrant's evaluation, rechecked 2 September 2026
Storage classBit-widthCompressionResult versus incumbent
Half of scalar quantization4-bit8xCompetitive with scalar quantization at half the storage; beats it on 3 of 10 datasets, by up to 4.6 points on one.
Binary quantization budget2-bit16xBeats 2-bit binary quantization by 9 to 24 points on every tested dataset.
Extreme budget1-bit32xBeats vanilla 1-bit binary quantization by 9 to 21 points on every tested dataset.

The pattern is consistent. At the aggressive budgets where teams normally accept a large recall hit, a training-free rotation-based quantizer holds recall far better than binary quantization, and at 4-bit it trades blows with a data-tuned scalar quantizer while using half the space. Qdrant also layered on engineering extras: per-vector length renormalization, per-coordinate anisotropy compensation and SIMD acceleration. Those additions are mildly data-aware, which is worth noting when someone calls the whole pipeline strictly oblivious.

Qdrant ships this extended implementation in version 1.18, including its standard Docker image and cloud product. Its official documentation exposes 4-, 2-, 1.5- and 1-bit options, while recommending that teams test recall on their own data and reindex when enabling the feature.

What is TurboVec, and what does it claim?

TurboVec is an open-source Rust vector index with Python bindings, MIT licensed, built directly on TurboQuant. It packages the quantizer into a searchable index you can drop into a Python retrieval stack. Its headline claims:

ClaimReported detailWhat to verify yourself
16x code compressionA 1536-dimensional vector goes from 6,144 bytes in float32 to 384 bytes of 2-bit codes. The repository separately reports about 4 GB instead of 31 GB for its 10M-document example.Do not apply 16x to the whole index. Measure codes, norms, IDs, metadata, index structures and retained capacity.
Beats FAISS on ARMOn an 8-vCPU Google Axion instance, the current suite reports about 3.5x average speed at 4-bit and 26% at 2-bit versus FAISS FastScan.Benchmark on your target CPU; ARM and x86 kernels differ.
Beats FAISS on x86On an 8-vCPU Intel Xeon Platinum 8481C, it reports about 3.4x average speed at 4-bit and 20% at 2-bit.Confirm on your instance type under your query concurrency.
Recall usually matches or winsCalibrated TQ+ beats FAISS at recall@1 in three of four OpenAI benchmark cells by 0.9 to 2.9 points, trails one by 0.7, and leads on GloVe at recall@1 while FAISS can lead deeper at 2-bit.These are author-run 100K-vector tests. Recall depends on your embeddings, corpus and reranking.
Online ingestPlain TurboQuant needs no train step. TurboVec's optional TQ+ path fits two scalars per coordinate from a representative sample before adding vectors.Choose and document whether you use uncalibrated TurboQuant or TQ+, then test ingest and drift.
Filter by ID at search timePass an allowlist of IDs; blocks with no allowed slots are skipped, so tenant and permission filters stay cheap.Validate that filtered recall holds when allowlists are small and sparse.
Drop-in for frameworksReplacements for LangChain, LlamaIndex, Haystack and Agno vector stores.Check API coverage for metadata, deletes and hybrid search your app relies on.

The scoring kernels use NEON SDOT or SMMLA on ARM and AVX-512 VNNI or vpermb on modern x86, with AVX2 and scalar fallbacks. Those implementation details help explain the CPU results without implying that every processor will reproduce them. Because TurboVec is local software, you can pair it with a local embedding model and keep the retrieval stack behind your own network boundary.

Where data-oblivious compression helps, and where it hurts

Quantization is a lossy compression of a lossy signal. Embeddings already approximate meaning, and quantizing them approximates the approximation. That is fine for retrieval, which only needs the right neighbors to rank near the top, but it sets the honest expectations for a decision.

OptionMemoryOperational weightBest fit
Float32 flat indexLargest, about 4 bytes per dimensionTrivial, exact searchSmall corpora, quality-sensitive retrieval, a baseline to measure against
TurboQuant 2-bit (Qdrant or TurboVec)16x smaller raw codesNo PQ training; implementation-specific calibration and reindex behaviorLarge corpora, memory-bound nodes and self-hosted deployments
Trained product quantization (FAISS IVF-PQ and database implementations)Configurable, often strong recall per byteNeeds a training sample; major drift can justify retraining and reindexingStable corpora with a good training sample or an existing platform
Managed vector serviceProvider dependentLower infrastructure effort; processing boundary depends on provider and deployment modelTeams that accept the provider's data-processing terms and operating model

Two caveats decide most real deployments. First, aggressive quantization loses some recall, so production RAG typically retrieves more candidates than it needs and reranks the top set, either with the full-precision vectors kept on slower storage or with a cross-encoder. Budget for that step. Second, the compression ratio is fixed, but your actual footprint includes index structure, identifiers, metadata and any full-precision copy you keep for reranking. Measure the total, not the vector bytes alone.

Does this actually make your RAG cheaper?

A compression ratio is not a saving until it removes something you pay for. Price the change against the full retrieval bill:

monthly benefit = removed memory or nodes + smaller instance tier + avoided managed-DB fees - added rerank compute - engineering and operations cost

Raw vector codes that are sixteen times smaller create value only when they help the complete index cross a threshold: an index that now fits one node instead of a cluster, a corpus that fits in RAM instead of spilling to disk, a retrieval service that co-locates on a GPU host you already run, or a workload you can bring in-house instead of paying a per-vector managed fee. If your corpus already fits comfortably and search is not memory-bound, the win is smaller and a mature, supported vector store may be the safer choice. For the wider own-versus-rent decision, work through our local models versus APIs break-even analysis, and if you are still choosing a retrieval strategy at all, compare RAG against fine-tuning and long context first.

The air-gapped and EU data-residency angle

The most interesting property for regulated teams is not the memory number. It is deployment control. A self-hosted index and local embedding model can keep the retrieval path inside your network. Plain TurboQuant needs no dataset calibration; enhanced implementations may calibrate locally, which does not itself require sending a sample to a third party.

That matters when personal or confidential data feeds retrieval. An embedding is not automatically anonymous, and it may remain personal data when it relates to an identifiable person. The EDPB's Opinion 28/2024 requires anonymity to be assessed case by case. Self-hosting can simplify processor and transfer architecture, but it does not by itself establish GDPR compliance. For the surrounding controls, see our guides on EU data residency for AI apps and enforcing RAG permissions across SharePoint, Confluence and Drive.

A 10-day evaluation before you swap a vector store

  1. Freeze a baseline. Build a float32 flat index on a representative slice and record exact recall on a labeled query set. This is the number every compressed option is measured against.
  2. Reproduce the footprint. Load your real embeddings at their true dimension and count, and measure resident memory including index overhead and identifiers, not just vector bytes.
  3. Run three lanes. Compare your current store, TurboVec at 2-bit and 4-bit, and one trained product-quantization configuration on the same hardware.
  4. Measure recall with reranking. Report recall@k before and after your intended oversample-and-rerank step, because that is what production actually serves.
  5. Load test search. Measure p50 and p95 query latency and throughput at your real concurrency, on your target CPU, with filters applied.
  6. Test ingest and growth. Add a large batch, delete, and add again; confirm memory, latency and recall stay stable without a retraining or reindex step.
  7. Audit the dependency. TurboVec 1.0 commits to forward compatibility for its v7 on-disk format, but older files need conversion and files predating v5 need rebuilding. Review that migration path, its concentrated maintenance, security policy and your ability to operate or fork it.
  8. Decide on economics. Convert the measured footprint into instance tiers or node counts, subtract added rerank cost and the engineering time to own a nonstandard index, and compare cost per successful query.

Questions to ask before you adopt it

  • What is the measured recall@k on our corpus and query set, after reranking, at 2-bit and 4-bit?
  • What is the true resident memory including index structure, IDs and any full-precision copy kept for reranking?
  • Does the index support the deletes, updates, metadata filters and hybrid search our application needs?
  • How does filtered search behave when allowlists are small, for tenant isolation and permissions?
  • What are latency and throughput on our production CPU, not the benchmark machine?
  • What is the library's release maturity, test coverage, license and maintenance situation, and can we fork it?
  • Can we fall back to our existing vector store without rebuilding the retrieval service?

Sources and claim boundaries

The algorithm, two-stage residual method and near-optimal distortion result come from the ICLR 2026 paper and the Google Research write-up. Fixed-budget recall comparisons and Qdrant 1.18 behavior come from Qdrant's evaluation and official documentation. TurboVec's compression, benchmark, TQ+ and feature claims come from its public repository and changelog. Wavect did not reproduce vendor or maintainer benchmarks. Facts and project status were rechecked on 2 September 2026.

Frequently Asked Questions

What does data-oblivious quantization mean?
It means the compression recipe is fixed in advance and learns nothing from your dataset. There is no trained codebook, no calibration sample and no per-dataset parameters, so a vector can be quantized the moment it arrives and the pipeline never needs retraining when data drifts.
How does TurboVec fit 10 million documents in 4 GB?
That is a TurboVec repository example, not a universal calculation for 1536-dimensional vectors. What is fixed is that raw 2-bit codes use one-sixteenth of the float32 bytes. The total index also contains norms, IDs and other structures, so measure your own dimensions and configuration.
Does quantizing embeddings hurt retrieval quality?
It costs some recall, which is why production RAG usually retrieves extra candidates and reranks them with full-precision vectors or a cross-encoder. In published tests TurboQuant holds recall far better than binary quantization at the same storage and trades blows with scalar quantization at half the storage, but you should measure recall on your own corpus.
Is TurboVec production-ready?
TurboVec reached version 1.0 in August 2026 and commits to forward compatibility for its current on-disk format. It is still a young project with maintenance concentrated around its creator, and 1.0 made older file formats a migration concern. Pilot it, test recovery and upgrades, and keep a fallback. If you need an established database surface, Qdrant has shipped TurboQuant since version 1.18.
How is TurboQuant different from FAISS product quantization?
FAISS IVF-PQ learns codebooks with k-means over a training sample of your vectors, which needs a representative set and can degrade on drift. TurboQuant uses a universal codebook derived from theory after a random rotation, so it needs no training and no reindex when data changes.
Can I run this fully offline for GDPR or air-gapped use?
Yes. TurboVec is self-hosted and MIT licensed, and Qdrant can also be self-hosted. Plain TurboQuant needs no dataset calibration, while optional enhanced calibration can run locally. Keeping retrieval inside your network helps with deployment control, but GDPR compliance still depends on lawful processing, access controls, retention and the rest of the system.

Final thoughts

Data-oblivious quantization is a genuine shift in how RAG memory works. A random rotation makes every coordinate predictable, a universal codebook does the rest, and the training step required by product quantization disappears. The recall results at aggressive storage budgets are strong enough to take seriously.

TurboVec 1.0 and Qdrant 1.18 now turn the research into deployable software. Raw 2-bit codes are genuinely 16x smaller than float32, but the complete index ratio must be measured. Pilot, audit and benchmark on your own corpus before carrying production traffic. Buy the retrieval outcome that lowers cost per successful query, not the largest compression headline.

Want a decision-grade retrieval benchmark on your own corpus?

 Scope a RAG Evaluation Pilot

Senior product and tech leadership

Need technical leadership before a full-time hire makes sense? Wavect gives founders CTO, CPO, and delivery judgment while the product is still changing fast.

Useful routes:

Inbox, without the noise

Follow the work that matters to you

Get a short email when we publish something new. Follow the whole blog or only the problems you care about.

What would you like to receive?
Choose your topics

Free, double opt-in, no tracking pixels.

Back
Kevin Riedl

12 min read · 23 Jul 2026
Last reviewed

Next

Get the next AI and agents field note

One concise email when we publish. No tracking pixels, and no inbox filler.

Free, double opt-in, no tracking pixels.