CAGRA to HNSW serialization and search on CPU#16
Conversation
> Co-authored-by: Ishan Chattopadhyaya <ichattopadhyaya@gmail.com> > Co-authored-by: Puneet Ahuja <puneet@searchscale.com>
|
Another important TODO is to remove the existing hnswlib based HNSW support. And, of course, a lot of refactoring to make the codebase more manageable. |
|
I ran preliminary benchmarks using SIFT 1M (1 million vectors, 128D), using NoMergePolicy, topK=100. Note: There are as many segments created as many as IndexThreads, because of NoMergePolicy. CAGRA -> HNSW Results
Lucene HNSW Results
Steps to run:
Links to suites: |
Complete Vector Search Benchmark Results (58 Runs)
Steps to run benchmarks: clone vectorsearch-bencmarks repo: Make sure you have cuvs built locally (or in a conda environment) Edit the LD_LIBRARY_PATH based on your cuvs path Run script: Results will be stored in the results/ directory in a csv file. Ensure you have the datasets downloaded: |
|
Thanks for providing the updated benchmarks @punAhuja. I notice the querytime seems to be significantly higher for the CAGRA->HNSW than for the HNSW versions. Any idea why this is the case? Are we comparing similar parameter ranges here (apples to apples)?
|
This is extremely slow; we are investigating this. |
This is very likely some bug or something very fundamentally wrong. 13 seconds per query is unacceptable. We all discussed this internally, and Puneet is going to investigate the built index. Need to see in details why this is so slow. Also, Puneet is planning to add query warm up before the benchmark begins. Will need to see if adding more layers make this situation any better. |
|
/ok to test 1a01a6c |
…ion-search-feature
|
/ok to test b23d6ec |
|
/ok to test fed1efb |
|
/ok to test dc7cc60 |
|
/ok to test a78dd29 |
…and add version update marker for cuvs-java dependency
|
/ok to test 8ff4c40 |
|
/merge |

Introducing a new Codec that uses CAGRA for building the index on GPU and serializing to Lucene-compatible HNSW index segments. The Lucene-compatible segments are searchable via the
Lucene99HnswVectorsReader(which is the default in Lucene 10.x).Note: This is based on top of #14 and should be rebased once that is merged.
TODO:
CuVSVectorsFormatinto GPU and CPU-specific formats.Fixes #13