Repository navigation
[diskann-inmem] Add scalar quantization - #1484
Mark Hildebrand (hildebrandmw) wants to merge 5 commits into
Conversation
Codecov Report❌ Patch coverage is ❌ Your patch status has failed because the patch coverage (87.80%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## main #1484 +/- ##
==========================================
- Coverage 92.10% 92.08% -0.03%
==========================================
Files 590 591 +1
Lines 121495 122196 +701
==========================================
+ Hits 111905 112521 +616
- Misses 9590 9675 +85
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
ff71398 to
e16d644
Compare
e16d644 to
d3624fb
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Inner-product query rescaling lacks distance compensation, affecting returned scores and range-search filtering.
1 open issue
What changed in this PR
Adds 1–8-bit scalar quantization to diskann-inmem, extending the quantized representation introduced for product quantization.
Changes:
- Separates insertion and query distances to support inner-product query rescaling.
- Adds scalar benchmark support and integration regression baselines.
- Simplifies distance construction and shares quantizer test utilities.
| File | Description |
|---|---|
| diskann-vector/src/distance/distance_provider.rs | Adds public distance constructor. |
| diskann-inmem/src/repr/spherical.rs | Updates distance construction in tests. |
| diskann-inmem/src/repr/quantized/scalar.rs | Implements scalar quantization and unit tests. |
| diskann-inmem/src/repr/quantized/product.rs | Reuses shared test utilities. |
| diskann-inmem/src/repr/quantized/mod.rs | Separates insertion and query distance routing. |
| diskann-inmem/src/repr/internal/quantization/rerank.rs | Simplifies reranker distance construction. |
| diskann-inmem/src/repr/full.rs | Adopts distance constructor. |
| diskann-inmem/src/neighbors.rs | Simplifies empty-list assertions. |
| diskann-inmem/integration/main.rs | Registers scalar regression tests. |
| diskann-inmem/integration/jsons/graph/scalar/two-bit-cosine.json | Configures two-bit cosine test. |
| diskann-inmem/integration/jsons/graph/scalar/two-bit-cosine-baseline.json | Records cosine regression baseline. |
| diskann-inmem/integration/jsons/graph/scalar/one-bit-l2.json | Tests one-bit L2 with optional reranking. |
| diskann-inmem/integration/jsons/graph/scalar/one-bit-l2-baseline.json | Records one-bit L2 baselines. |
| diskann-inmem/integration/jsons/graph/scalar/four-bit-ip.json | Configures four-bit inner-product test. |
| diskann-inmem/integration/jsons/graph/scalar/four-bit-ip-baseline.json | Records inner-product baseline. |
| diskann-inmem/integration/jsons/graph/scalar/eight-bit-l2.json | Configures eight-bit L2 test. |
| diskann-inmem/integration/jsons/graph/scalar/eight-bit-l2-baseline.json | Records eight-bit L2 baseline. |
| diskann-inmem/integration/index/runner.rs | Adds scalar training and index construction. |
| diskann-benchmark/src/index/inmem2.rs | Registers and implements scalar benchmarks. |
| diskann-benchmark/example/inmem2.json | Adds scalar benchmark example. |
Review effort: Balanced
| let scale = mean_norm / norm; | ||
| let rescaled = query.iter().map(|q| q * scale).collect(); | ||
| return Calf::Owned(rescaled); |
There was a problem hiding this comment.
This is fine. This is how it's always worked. We don't really expect distances retrieved from quantized searches to be meaningful outside of ordering.
d3624fb to
eeca7f9
Compare

This adds support for scalar quantization (bits 1 through 8) to
diskann-inmem, follow the pattern mostly set up in #1469. This does require theQuantizertrait to differentiate between distances for insert and distances for general queries due to the need to rescale queries for wiki-cohere embedding.I've found several areas in
diskann-quantizationthat need help:diskann-quantizationneeds better support for asymmetrical compression. It's really a shame that we need to handle the somewhat sketch query rescaling for inner-products manually.