Support Vector Search on GPU with cuVS
- Dominant language
- Java
- Stars
- 3.6k
- Forks
- 1.4k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 88
Description
### Description
* NVIDIA's cuVS library (https://github.com/rapidsai/cuvs) is a state-of-the-art vector search library. It supports fast indexing and search using GPUs.
* cuVS will provide a java api in 25.02 : https://github.com/rapidsai/cuvs/
* Support use-case such as:
* index and search both on GPU
* index on GPU, search on CPU
* flat brute force and graph based
#### In-progress PR
* #14131
#### Architecture

#### Tasks:
- [x] TestCuVS works via IDE, but not via gradle ~(some native access security issues)~.
- [x] Make this branch work with released version of cuvs-java (25.02), once it is released.
- [ ] remove mavenLocal and replace artifact metadata, etc.
- [x] Extend base format test, which covers many many format api and behavioural tests
- [ ] Examine and determine location of extracted native library
- [ ] Examine and determine location of all temporary file
- [ ] Examine heap usage
- [x] Move float32 vectors off-heap
- [ ] Lucene supports various different similarity functions, `EUCLIDEAN`, `DOT_PRODUCT`, `COSINE`, `MAXIMUM_INNER_PRODUCT`. Evaluate mapping these to cuVS index params and/or which to support.
- [ ] Lucene scores are are between 1 and 0, with the former being the most relevant. Ensure that scores are consistent across all supported similarities.
- [ ] How to expose advanced query params, like `iTopK`, `searchWidth`, `thread`, etc, if at all. One way is through a Do we custom `CuVSKnnFloatVectorQuery`. Maybe there are other (better) ways, if needed at all.
- [ ] Publish benchmarks.
Contributors: @narangvivek10, @punAhuja, @chatman, @ChrisHegarty, along with help from @cjnolet.
Contributor guide
Assessment
This issue has not been assessed yet.