Skip to content

feat(zvec): add DiskANN benchmark support - #886

Open
gaowayne wants to merge 2 commits into
zilliztech:mainfrom
gaowayne:pr_vectordb_bench_diskann_zvec
Open

gaowayne wants to merge 2 commits into
zilliztech:mainfrom
gaowayne:pr_vectordb_bench_diskann_zvec

Conversation

@gaowayne

@gaowayne gaowayne commented Oct 6, 2026

Copy link
Copy Markdown

Summary

Add DiskANN support to the Zvec backend, reusing VectorDBBench's existing dataset, loading, search, recall, latency, and result-reporting workflows.

HNSW remains the default.

Changes

  • Add ZvecDiskANNIndexConfig and support restoring DiskANN configurations from saved results.
  • Introduce --index-type diskann with separate construction, search, and PQ parameters.
  • Map configurations to native DiskAnnIndexParam and DiskAnnQueryParam.
  • Reject algorithm-incompatible CLI options.
  • Protect existing non-DiskANN collections from DiskANN rebuild operations.
  • Validate persisted schemas, per-document insert results, document counts, and index completeness.
  • Support search-only runs against existing DiskANN collections without rebuilding.
  • Avoid calling close() after successful collection destruction.
  • Add regression tests, an opt-in Linux native smoke test, and usage documentation.

Validation

Validated on Linux with Python 3.12.3:

  • Adapter/configuration/CLI tests: 35 passed, 1 skipped.
  • Opt-in native DiskANN test: 1 passed.
  • Native test covers insertion, optimization, close/reopen, search, and rebuilding.
  • Cohere 10M build completed with 10,000,000 documents and 1.0 index completeness.

Cohere 10M Search Results

Configuration: 768 dimensions, COSINE, R=64, build list=100, PQ=96,
search list=300, K=100, nq=1, and IDs-only responses.

Metric Result
Insert + optimize duration 1,657.05 s
Highest tested QPS 1,650.32 at 20 concurrent processes
Recall@100 0.8941
NDCG 0.9153
Serial P99 latency 10.5 ms
Concurrent P99 latency at 20 processes 15.922 ms

Concurrent search was tested at 12, 14, 16, 18, and 20 processes,
with a 300-second measurement window per configuration.

Scope and Limitations

  • Uses Zvec's native C++ DiskANN implementation, not Microsoft Rust DiskANN.
  • No changes to the shared benchmark runner or native indexing algorithms.
  • The existing task assembler determines the effective metric from the dataset.
  • Requires a DiskANN-enabled Zvec SDK with Collection.close() support.
  • These results represent one configuration, not a controlled equal-recall comparison with HNSW.
  • Memory consumption and storage I/O benefits have not yet been measured.

- Add DiskANN config, CLI options, and native SDK parameter mappings
- Support DiskANN config serialization and preserve HNSW defaults
- Validate collection reuse, insert results, and index completeness
- Add regression tests and opt-in Linux native smoke test
- Document separate index build and search-only workflows

Signed-off-by: Wayne Gao <wayne.gao1@solidigm.com>
- Skip close() after successful destruction during index rebuild
- Preserve cleanup and abort recreation when destruction fails
- Add regression tests for successful and failed destruction

Signed-off-by: Wayne Gao <wayne.gao1@solidigm.com>
@gaowayne

gaowayne commented Oct 6, 2026

Copy link
Copy Markdown
Author

/approve

@sre-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: gaowayne
To complete the pull request process, please assign xuanyang-cn after the PR has been reviewed.
You can assign the PR to them by writing /assign @xuanyang-cn in a comment when ready.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@gaowayne

gaowayne commented Oct 6, 2026 •

Copy link
Copy Markdown
Author

/assign xuanyang-cn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants