Tiered Index

View as Markdown

Source header: cuvs/neighbors/tiered_index.h

Types

cuvsTieredIndexANNAlgo

Enum to hold which ANN algorithm is being used in the tiered index

1typedef enum { ... } cuvsTieredIndexANNAlgo;

Values

NameValue
CUVS_TIERED_INDEX_ALGO_CAGRA0
CUVS_TIERED_INDEX_ALGO_IVF_FLAT1
CUVS_TIERED_INDEX_ALGO_IVF_PQ2

Tiered Index

cuvsTieredIndex

Struct to hold address of cuvs::neighbors::tiered_index::index and its active trained

dtype

1typedef struct { ... } cuvsTieredIndex;

Fields

NameTypeDescription
addruintptr_t
dtypeDLDataType
algocuvsTieredIndexANNAlgo

cuvsTieredIndexCreate

Allocate Tiered Index

1CUVS_EXPORT cuvsError_t cuvsTieredIndexCreate(cuvsTieredIndex_t* index);

Parameters

NameDirectionTypeDescription
indexincuvsTieredIndex_t*cuvsTieredIndex_t to allocate

Returns

CUVS_EXPORT cuvsError_t

cuvsTieredIndexDestroy

De-allocate Tiered index

1CUVS_EXPORT cuvsError_t cuvsTieredIndexDestroy(cuvsTieredIndex_t index);

Parameters

NameDirectionTypeDescription
indexincuvsTieredIndex_tcuvsTieredIndex_t to de-allocate

Returns

CUVS_EXPORT cuvsError_t

Tiered Index build parameters

cuvsTieredIndexParams

Supplemental parameters to build a TieredIndex

1struct cuvsTieredIndexParams { ... };

Fields

NameTypeDescription
metriccuvsDistanceTypeDistance type.
algocuvsTieredIndexANNAlgoThe type of ANN algorithm we are using
min_ann_rowsint64_tThe minimum number of rows necessary in the index to create an ann index
create_ann_index_on_extendboolWhether or not to create a new ann index on extend, if the number of rows in the incremental (bfknn) portion is above min_ann_rows
cagra_paramscuvsCagraIndexParams_tOptional parameters for building a cagra index
ivf_flat_paramscuvsIvfFlatIndexParams_tOptional parameters for building a ivf_flat index
ivf_pq_paramscuvsIvfPqIndexParams_tOptional parameters for building a ivf-pq index

cuvsTieredIndexParamsCreate

Allocate Tiered Index Params and populate with default values

1CUVS_EXPORT cuvsError_t cuvsTieredIndexParamsCreate(cuvsTieredIndexParams_t* index_params);

Parameters

NameDirectionTypeDescription
index_paramsincuvsTieredIndexParams_t*cuvsTieredIndexParams_t to allocate

Returns

CUVS_EXPORT cuvsError_t

cuvsTieredIndexParamsDestroy

De-allocate Tiered Index params

1CUVS_EXPORT cuvsError_t cuvsTieredIndexParamsDestroy(cuvsTieredIndexParams_t index_params);

Parameters

NameDirectionTypeDescription
index_paramsincuvsTieredIndexParams_t

Returns

CUVS_EXPORT cuvsError_t

Tiered index build

cuvsTieredIndexBuild

Build a TieredIndex index with a DLManagedTensor which has underlying

1CUVS_EXPORT cuvsError_t cuvsTieredIndexBuild(cuvsResources_t res,
2cuvsTieredIndexParams_t index_params,
3DLManagedTensor* dataset,
4cuvsTieredIndex_t index);

DLDeviceType equal to kDLCUDA, kDLCUDAHost, kDLCUDAManaged, or kDLCPU. Also, acceptable underlying types are:

  1. kDLDataType.code == kDLFloat and kDLDataType.bits = 32
  2. kDLDataType.code == kDLFloat and kDLDataType.bits = 16

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
index_paramsincuvsTieredIndexParams_tIndex parameters to use when building the index
datasetinDLManagedTensor*DLManagedTensor* training dataset
indexoutcuvsTieredIndex_tcuvsTieredIndex_t Newly built TieredIndex index

Returns

CUVS_EXPORT cuvsError_t

cuvsTieredIndexSearch

Search a TieredIndex index with a DLManagedTensor

1CUVS_EXPORT cuvsError_t cuvsTieredIndexSearch(cuvsResources_t res,
2void* search_params,
3cuvsTieredIndex_t index,
4DLManagedTensor* queries,
5DLManagedTensor* neighbors,
6DLManagedTensor* distances,
7cuvsFilter prefilter);

cuvsCagraSearchParams_t, cuvsIvfFlatSearchParams_t, cuvsIvfPqSearchParams_t depending on the type of the tiered index used

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
search_paramsinvoid*params used to the ANN index, should be one of
indexincuvsTieredIndex_tcuvsTieredIndex which has been returned by cuvsTieredIndexBuild
queriesinDLManagedTensor*DLManagedTensor* queries dataset to search
neighborsoutDLManagedTensor*DLManagedTensor* output k neighbors for queries
distancesoutDLManagedTensor*DLManagedTensor* output k distances for queries
prefilterincuvsFiltercuvsFilter input prefilter that can be used to filter queries and neighbors based on the given bitmap.

Returns

CUVS_EXPORT cuvsError_t

Tiered index extend

cuvsTieredIndexExtend

Extend the index with the new data.

1CUVS_EXPORT cuvsError_t cuvsTieredIndexExtend(cuvsResources_t res,
2DLManagedTensor* new_vectors,
3cuvsTieredIndex_t index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
new_vectorsinDLManagedTensor*DLManagedTensor* the new vectors to add to the index
indexinoutcuvsTieredIndex_tTiered index to be extended

Returns

CUVS_EXPORT cuvsError_t

Tiered index merge

cuvsTieredIndexMerge

Merge multiple indices together into a single index

1CUVS_EXPORT cuvsError_t cuvsTieredIndexMerge(cuvsResources_t res,
2cuvsTieredIndexParams_t index_params,
3cuvsTieredIndex_t* indices,
4size_t num_indices,
5cuvsTieredIndex_t output_index);

Parameters

NameDirectionTypeDescription
resincuvsResources_tcuvsResources_t opaque C handle
index_paramsincuvsTieredIndexParams_tIndex parameters to use when merging
indicesincuvsTieredIndex_t*pointers to indices to merge together
num_indicesinsize_tthe number of indices to merge
output_indexoutcuvsTieredIndex_tthe merged index

Returns

CUVS_EXPORT cuvsError_t