research(nightly): symphony-qg — co-located RaBitQ + batch ANNS graph (SIGMOD 2025)#421
Draft
research(nightly): symphony-qg — co-located RaBitQ + batch ANNS graph (SIGMOD 2025)#421
Conversation
Implements SymphonyQG co-located RaBitQ codes + batch asymmetric distance estimation on graph-based ANNS in pure Rust (no unsafe, no C FFI). Key results (Intel Xeon 2.80 GHz, D=128, R=32): - Distance kernel: 16.2× faster than exact L2 (269 ns vs 4,348 ns) - End-to-end beam search: 2.0–2.6× QPS over GraphExact at equal params - Memory footprint: identical to GraphExact (codes stored co-located) Source: arXiv:2411.12229 (Gou et al., SIGMOD 2025) https://claude.ai/code/session_01Xkk1ccGRxzFgNnTGP4qNBX
ADR-179: SymphonyQG co-located RaBitQ + graph ANNS (SIGMOD 2025). Research doc: full SOTA survey, design, implementation notes, real benchmark numbers (kernel 9-20× speedup, end-to-end 2-2.6×), failure modes, and production roadmap. https://claude.ai/code/session_01Xkk1ccGRxzFgNnTGP4qNBX
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Nightly research spike implementing SymphonyQG (Gou et al., SIGMOD 2025, arXiv:2411.12229) in pure Rust — a graph-based ANNS index that co-designs memory layout and 1-bit RaBitQ quantization to eliminate the random-read bottleneck during beam search.
docs/adr/ADR-179-symphony-qg.mddocs/research/nightly/2026-05-05-symphony-qg/README.mdcrates/ruvector-symphony-qg/(11 tests pass, cargo --release builds clean)Key innovation
Standard graph ANNS (HNSW, DiskANN) chases R random pointers per hop to load neighbor vectors. SymphonyQG stores each vertex's R neighbors' 1-bit codes contiguously in the same heap block as neighbor IDs. One sequential cache read gives all R estimated distances via XNOR+popcount — no random pointer chasing.
Real benchmark numbers (Intel Xeon @ 2.80 GHz, D=128, R=32)
Distance kernel microbenchmark (Criterion):
End-to-end search (n=5K, D=128, ef=64):
SymphonyQG: 2.0× QPS vs GraphExact at identical memory footprint.
Note: absolute recall is limited by the PoC's O(n²) greedy k-NN graph (no HNSW multi-layer hierarchy). The kernel speedup is the primary validated result. See research doc for full analysis.
Test plan
cargo build --release -p ruvector-symphony-qg— clean buildcargo test -p ruvector-symphony-qg— 11/11 tests passcargo run --release -p ruvector-symphony-qg— real benchmark numberscargo bench -p ruvector-symphony-qg— Criterion kernel micro-benchmarksFiles changed
https://claude.ai/code/session_01Xkk1ccGRxzFgNnTGP4qNBX