Add IVF sampled ADC start-point router - #1279
Conversation
|
@xwj-ox please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
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