Repository navigation
Replies: 1 comment 1 reply
|
@lyang24 were you able to compare to PiPNN? We are planning to investigate both in Q4 starting in maybe a week or two. |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I have been exploring how HNSW should trade memory for single-query throughput when the target is approximately 0.95 recall@10. The comparison includes Faiss HNSW storage codecs, RaBitQ navigation with optional reranking, and graph algorithms that use progressive projections or specialized quantized layouts.
The main question is not “which codec has the smallest code?” in isolation. It is:
Benchmark contract
efConstruction=200, built using FP32 distancesR@10 = 0.95; no interpolation or fitted valuesThe reference RaBitQ implementation, PAG, and SymphonyQG build their own graphs. They are therefore whole-algorithm/system comparisons, while the Faiss codec rows isolate the effect of the search-time distance representation on a common graph.
Datasets
What each row means
k_factor × kcandidates with SQ4/SQ8efConstruction=1000; PAGMain result chart
Each cell is
recall@10 / QPS / bytes per vector.†: the method did not reach 0.95; the highest measured recall point is shown.≈: closest available discrete point.*:k_factor=1, so the additional SQ4 payload did not perform meaningful reranking.—: unsupported or not measured.Selected search parameters
Cells contain
efSearch; refine rows containefSearch / k_factor.PAG search budgets are stage-quantized. For example, Cohere remains at 0.9473 through
ef=39and jumps to 0.9670 atef=40; SIFT similarly jumps from 0.9394 to 0.9584. These points are reported as measured rather than interpolated.Throughput and memory relative to SQ8
Throughput and memory relative to unquantized HNSW FP32
The memory trade-off looks substantially different when the baseline is the
unquantized HNSW index rather than SQ8. This is particularly important for
high-dimensional vectors, where the FP32 payload already dominates the graph
overhead.
Against HNSW FP32, PAG provides 2.99–8.72× the throughput for 1.11–1.69×
the memory. The trade-off is especially favorable on Cohere, GIST, and OpenAI:
PAG adds only 11–20% persistent memory while increasing throughput by
4.04–8.72×. SymphonyQG remains the higher-throughput option on several
datasets, but consistently approaches 2× the FP32 HNSW footprint.
Observations
k_factor=1, so SQ4 adds memory without changing the direct RaBitQ ranking.Caveats
All reactions