Add IVF sampled ADC start-point router - #1279
Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces an IVF+PQ posting-list sampled ADC start-point router for DiskANN disk search, including artifact build/load support, query-time routing to seed disk Vamana traversal, and benchmark plumbing to configure and report router metrics. It also adds a bilingual RFC documenting the design and experimental operating points.
Changes:
- Add IVF+PQ router artifact format + builder (centroids + posting IDs + offsets + optional fallback medoid) and query-time routing integration for disk search.
- Extend disk search statistics and benchmark reporting to include router time and sampled-ADC diagnostics.
- Add benchmark configuration schema for
ivf_pq_router_buildandstart_point_router, plus RFC documentation (EN/ZH).
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| rfcs/00001-ivf-pq-posting-list-sampled-adc-router.zh.md | Chinese RFC describing sampled ADC router design, metrics, and rollout plan |
| rfcs/00001-ivf-pq-posting-list-sampled-adc-router.en.md | English RFC describing sampled ADC router design, metrics, and rollout plan |
| diskann-disk/src/utils/statistics.rs | Adds router timing and diagnostic counters to QueryStatistics |
| diskann-disk/src/search/start_point_router.rs | Introduces StartPointRouter enum wrapper for query-time routing |
| diskann-disk/src/search/provider/disk_provider.rs | Integrates router into disk search path; records router stats; adds routing helpers + unit tests |
| diskann-disk/src/search/mod.rs | Exposes new ivf_pq_router and start_point_router modules |
| diskann-disk/src/search/ivf_pq_router.rs | Implements IVF router artifact build/serialize/deserialize and query-time router parameters |
| diskann-benchmark/src/inputs/disk.rs | Adds JSON config for router artifact build and start-point router selection |
| diskann-benchmark/src/disk_index/search.rs | Loads router artifacts, passes router into disk searcher, and reports new router metrics |
| diskann-benchmark/src/disk_index/build.rs | Builds IVF+PQ router artifacts during benchmark disk-index build step |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if data.len() != num_points * dim { | ||
| return Err(index_error("data length must equal num_points * dim")); | ||
| } |
| let mut centroids = vec![0.0; num_centroids * dim]; | ||
| for value in &mut centroids { | ||
| *value = reader.read_f32::<LittleEndian>()?; | ||
| } | ||
| let mut offsets = vec![0usize; num_centroids + 1]; | ||
| for offset in &mut offsets { | ||
| *offset = usize::try_from(reader.read_u64::<LittleEndian>()?)?; | ||
| } | ||
| let mut posting_ids = vec![0u32; num_postings]; | ||
| for id in &mut posting_ids { | ||
| *id = reader.read_u32::<LittleEndian>()?; | ||
| } |
| query_stats.cpu_time_us = query_stats.total_execution_time_us | ||
| - query_stats.io_time_us | ||
| - query_stats.query_pq_preprocess_time_us; |
| | Parameter | Value | | ||
| |---|---:| | ||
| | IVF cells | 2048 | | ||
| | load mode | mmap | |
| | 参数 | 值 | | ||
| |---|---:| | ||
| | IVF cells | 2048 | | ||
| | load mode | mmap | |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1279 +/- ##
==========================================
- Coverage 91.50% 91.31% -0.20%
==========================================
Files 497 499 +2
Lines 95524 96230 +706
==========================================
+ Hits 87411 87874 +463
- Misses 8113 8356 +243
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
Summary
ivf_pq_router_buildandstart_point_routerScope
This intentionally excludes residual PQ, PQ sidecars, block routers, hierarchy, posting-order PQ layout, mmap artifact loading, and experiment result artifacts.
Validation
cargo fmt --all --checkcargo test -p diskann-disk ivf -- --nocapturecargo test -p diskann-benchmark --features disk-index ivf_pq -- --nocapturecargo clippy -p diskann-disk --tests -- -D warningscargo clippy -p diskann-benchmark --features disk-index --bins --tests -- -D warnings