Is your feature request related to a problem? Please describe.
I want to integrate cuVS into OceanBase (OB). In my deployment, I build an HNSW index on GPU for performance, but I run searches on CPU.
To keep the upper-layer interface consistent with OceanBase, I also need to support incremental index updates, i.e., adding new vectors to an existing index. Therefore, I need the functionality equivalent to extend_point() during the index construction phase.
However, when I checked the official cuVS documentation for HNSW-cuvs, I found that extend is only supported when hierarchy=cpu. In my case I prefer to build with hierarchy=gpu (GPU build), and I cannot find a way to use extend_point()
Describe the solution you'd like
I’m confused because from my understanding, both CPU and GPU hierarchies end up constructing an HNSW index (based on hnswlib).
Specifically, in my investigation, the extend implementation eventually calls hnswlib’s addPoint() internally. From that perspective, it seems the underlying index structure is still an HNSW graph stored in hnswlib, so I do not understand why using hierarchy=cpu vs hierarchy=gpu would change whether extend_point() is supported.
Could you please clarify:
What is the technical reason that extend_point() / extend is restricted to hierarchy=cpu only?
Is there a different index data layout or update mechanism for hierarchy=gpu that makes incremental updates unsupported today?
My understanding is that when using hierarchy=gpu, building the index in batches and then using add_point as a fallback is technically possible, but not recommended. I need to confirm whether my understanding is correct, because it will affect my design.
Is your feature request related to a problem? Please describe.
I want to integrate cuVS into OceanBase (OB). In my deployment, I build an HNSW index on GPU for performance, but I run searches on CPU.
To keep the upper-layer interface consistent with OceanBase, I also need to support incremental index updates, i.e., adding new vectors to an existing index. Therefore, I need the functionality equivalent to extend_point() during the index construction phase.
However, when I checked the official cuVS documentation for HNSW-cuvs, I found that extend is only supported when hierarchy=cpu. In my case I prefer to build with hierarchy=gpu (GPU build), and I cannot find a way to use extend_point()
Describe the solution you'd like
I’m confused because from my understanding, both CPU and GPU hierarchies end up constructing an HNSW index (based on hnswlib).
Specifically, in my investigation, the extend implementation eventually calls hnswlib’s addPoint() internally. From that perspective, it seems the underlying index structure is still an HNSW graph stored in hnswlib, so I do not understand why using hierarchy=cpu vs hierarchy=gpu would change whether extend_point() is supported.
Could you please clarify:
What is the technical reason that extend_point() / extend is restricted to hierarchy=cpu only?
Is there a different index data layout or update mechanism for hierarchy=gpu that makes incremental updates unsupported today?
My understanding is that when using
hierarchy=gpu, building the index in batches and then usingadd_pointas a fallback is technically possible, but not recommended. I need to confirm whether my understanding is correct, because it will affect my design.