apache / apache/lucene

Support Vector Search on GPU with cuVS

Open
#14,243 3 comments 2 reactions 2 assignees Claimed by @chatman View on GitHub
vector-based-search
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

![Image](https://github.com/user-attachments/assets/3757c788-dc8e-4fdc-9599-7086dfba5c41)

#### 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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.